Go 语言实战 第 1 章 关于 Go 语言的介绍
编译
编译 Go 程序时,编译器只会关注那些直接被引用的库。
JiaJia:
这是不是意味着 Go 不支持反射? Go 语言有提供反射功能的 reflect 包。 => Go 语言如何保证反射的包会被编译?
goroutine
Go 语言对并发的支持是这门语言最重要的特性之一。 goroutine 很像线程,但是它占用的内存远少于线程,使用它需要的代码更少。
goroutine 是可以与其它 goroutine 并行执行的函数,同时也会与主程序(程序的入口)并行执行。
go
func log(msg string) {
...
}
go log('发生了可怕的事情')
通道
通道(channel)是一种内置的数据结构,可以让用户在不同的 goroutine 之间同步发送具有类型的消息。
需要强调的是,通道并不提供跨 goroutine 的数据访问保护机制。
如果读和写是由不同的 goroutine 完成的,每个 goroutine 依旧需要额外的同步动作。
Go 开发者使用组合(composition)设计模式,只需简单地将一个类型嵌入到另一个类型,就能复用所有的功能。
接口
接口用于描述类型的行为。如果一个类型的实例实现了一个接口,意味着这个实例可以执行一组特定的行为。
你甚至不需要去声明这个实例实现某个接口,只需要实现这组行为就好。
这和传统的面向对象编程语言的接口系统有本质的区别。
Go 语言的接口更小,只倾向于定义一个单一的动作。
JiaJia:
会不会导致出现接口定义相同,但是其功能完全不同的情况?
你好,Go
go
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
小结
- Go 语言是现代的、快速的,带有一个强大的标准库。
- Go 语言内置对并发的支持。
- Go 语言使用接口作为代码复用的基础模块。