<!-- ## 第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 语言使用接口作为代码复用的基础模块。 Loading... 版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://www.liujiajia.me/2022/4/26/go-in-action-ch-01 ← 上一篇 下一篇 → 提交