08 2019 档案

摘要:欢迎来到 Golang 系列教程的第 32 篇。 什么是 panic? 在 Go 语言中,程序中一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。 但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 panic 来终止程序。当函数发生 panic 时 阅读全文
posted @ 2019-08-15 09:52 风一样自由419154 阅读(234) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 31 篇。 在上一教程里,我们学习了 Go 中的错误是如何表示的,并学习了如何处理标准库里的错误。我们还学习了从标准库的错误中提取更多的信息。 在本教程中,我们会学习如何创建我们自己的自定义错误,并在我们创建的函数和包中使用它。我们会使用与标准库中相同的技术,来 阅读全文
posted @ 2019-08-15 09:50 风一样自由419154 阅读(523) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 30 篇。 什么是错误? 错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。 在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。 就像其他的内建类型(如 int、fl 阅读全文
posted @ 2019-08-15 09:49 风一样自由419154 阅读(178) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 29 篇。 什么是 defer? defer 语句的用途是:含有 defer 语句的函数,会在该函数将要返回之前,调用另一个函数。这个定义可能看起来很复杂,我们通过一个示例就很容易明白了。 示例 上面的程序很简单,就是找出一个给定切片的最大值。largest 函 阅读全文
posted @ 2019-08-15 09:48 风一样自由419154 阅读(451) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 28 篇。 Go 通过接口来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 使用接口实现多态 一个类型如果定义了接口的所有方法,那它 阅读全文
posted @ 2019-08-15 09:47 风一样自由419154 阅读(556) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 27 篇。 Go 不支持继承,但它支持组合(Composition)。组合一般定义为“合并在一起”。汽车就是一个关于组合的例子:一辆汽车由车轮、引擎和其他各种部件组合在一起。 通过嵌套结构体进行组合 在 Go 中,通过在结构体内嵌套结构体,可以实现组合。 组合的 阅读全文
posted @ 2019-08-15 09:46 风一样自由419154 阅读(668) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 26 篇。 Go 支持面向对象吗? Go 并不是完全面向对象的编程语言。Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘录如下。 可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提 阅读全文
posted @ 2019-08-15 09:44 风一样自由419154 阅读(267) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 25 篇。 本教程我们学习 Mutex。我们还会学习怎样通过 Mutex 和信道来处理竞态条件(Race Condition)。 临界区 在学习 Mutex 之前,我们需要理解并发编程中临界区(Critical Section)的概念。当程序并发地运行时,多个  阅读全文
posted @ 2019-08-15 09:42 风一样自由419154 阅读(213) 评论(0) 推荐(0) 编辑
摘要:什么是 select? select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case 语句都是信道操作。我们好好看 阅读全文
posted @ 2019-08-15 09:41 风一样自由419154 阅读(227) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 23 篇。 什么是缓冲信道? 在上一教程里,我们讨论的主要是无缓冲信道。我们在信道的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况,才会阻塞向缓冲信道(Buffered Channel) 阅读全文
posted @ 2019-08-14 09:11 风一样自由419154 阅读(589) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 22 篇。 在上一教程里,我们探讨了如何使用 Go 协程(Goroutine)来实现并发。我们接着在本教程里学习信道(Channel),学习如何通过信道来实现 Go 协程间的通信。 什么是信道? 信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流 阅读全文
posted @ 2019-08-14 09:10 风一样自由419154 阅读(700) 评论(0) 推荐(0) 编辑
摘要:欢迎来到我们 Golang 系列教程的第 20 篇。 Go 是并发式语言,而不是并行式语言。在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。 并发是什么? 并发是指立即处理多个任务的能力。一个例子就能很好地说明这一点。 我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然 阅读全文
posted @ 2019-08-14 09:08 风一样自由419154 阅读(151) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 21 篇。 在前面的教程里,我们探讨了并发,以及并发与并行的区别。本教程则会介绍在 Go 语言里,如何使用 Go 协程(Goroutine)来实现并发。 Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与 阅读全文
posted @ 2019-08-14 09:08 风一样自由419154 阅读(201) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。如果你还没有阅读前面的教程,请你阅读接口(一)。 实现接口:指针接受者与值接受者 在接口(一)上的所有示例中,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Poi 阅读全文
posted @ 2019-08-14 09:07 风一样自由419154 阅读(221) 评论(0) 推荐(0) 编辑
摘要:什么是接口? 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。 在 Go 语言中,接口就是方法签名(Method Signature)的集合。当一个类型定义了接口中的所有方法,我们称它实现了该接口。这与 阅读全文
posted @ 2019-08-14 09:06 风一样自由419154 阅读(211) 评论(0) 推荐(0) 编辑
摘要:什么是方法? 方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。 下面就是创建一个方法的语法。 上面的代码片段创建了一个接收器类型为 Type 的方法 methodName。 方法示例 让我 阅读全文
posted @ 2019-08-14 09:05 风一样自由419154 阅读(408) 评论(0) 推荐(0) 编辑
摘要:什么是结构体? 结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。 例如,一个职员有 firstName、lastName 和 age 三个属性,而把这些属性组合在一个结构体 employee 中就很合理。 结构 阅读全文
posted @ 2019-08-14 09:03 风一样自由419154 阅读(199) 评论(0) 推荐(0) 编辑
摘要:什么是指针? 指针是一种存储变量内存地址(Memory Address)的变量。 如上图所示,变量 b 的值为 156,而 b 的内存地址为 0x1040a124。变量 a 存储了 b 的地址。我们就称 a 指向了 b。 指针的声明 指针变量的类型为 *T,该指针指向一个 T 类型的变量。 接下来我 阅读全文
posted @ 2019-08-14 09:02 风一样自由419154 阅读(130) 评论(0) 推荐(0) 编辑
摘要:欢迎阅读 Golang 系列教程第 14 部分。 由于和其他语言相比,字符串在 Go 语言中有着自己特殊的实现,因此在这里需要被特别提出来。 什么是字符串? Go 语言中的字符串是一个字节切片。把内容放在双引号""之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串的简单示例。 上面的程序将 阅读全文
posted @ 2019-08-14 09:01 风一样自由419154 阅读(414) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 13 个教程。 什么是 map ? map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。 如何创建 map ? 通过向 make 函数传入键和值的类型,可以创建 map。make(map[type of key]typ 阅读全文
posted @ 2019-08-13 17:14 风一样自由419154 阅读(213) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程第 12 章。 一.什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最后一个参数。 请注意只有函数的最后一个参数才允许是可变的。 (1)可变参数函数如何工作 你是否曾经想 阅读全文
posted @ 2019-08-13 17:12 风一样自由419154 阅读(648) 评论(0) 推荐(0) 编辑
摘要:欢迎来到 Golang 系列教程的第 11 章。在本章教程中,我们将讨论 Go 语言中的数组和切片。 数组 数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 阅读全文
posted @ 2019-08-13 16:08 风一样自由419154 阅读(444) 评论(0) 推荐(0) 编辑