Go语言实战阅读笔记|Go主题月

第一章 关于Go语言的介绍

编译速度快,内置并发,自带垃圾回收器。

开发速度:

Go编译器只会关注直接被引用的库。而Java,C,C++要遍历依赖链中的所有库。很多Go程序可以在1秒内编译完成。

Go能捕获类型错误。

并发

goroutine类似线程,占用内存更少;channel允许用户在不同的goroutine之间同步发送具有类型的消息。即并发编程模型倾向于在goroutine之间发送消息,而不是让多个goroutine争夺同一数据的使用权。

gotourine是一个并行执行的函数,单一的操作系统线程可以执行多个goroutine。goroutine代码简洁。

1
go log("error happen") // 调度log函数作为独立的goroutine去运行

channel,通道,一种数据结构,让goroutine之间进行安全的数据通信,避免共享内存访问问题。保证同一时刻只会有一个goroutine修改数据。特别注意,通道不提供跨goroutine的数据访问保护机制,如果通道传输数据的副本,那么每个goroutine各自对自己的副本做修改是安全的;如果是指向数据的指针,如果读和写是由不同的goroutine完成的,每个goroutine仍旧需要额外的同步动作。

类型系统

无继承,使用“组合”设计模式,将一个类型嵌入到另一个类型,就能复用全部功能。允许用户对行为进行建模,而不是对类型进行建模。不需要声明某个类型实现了某个接口,编译器会判断一个类型的实例是否符合正在使用的接口。

用户自定义类型与C语言的结构很像。

接口用于描述类型的行为,如果一个类型实现了一个接口的所有方法,那么这个类型的实例就可以存储在这个接口类型的实例中,不需要额外声明。Go语言的接口只倾向于定义一个单一的动作。

你好,Go

goplayground 可再现运行与分享Go程序:

http://play.golang.org 需科学上网

https://goplay.space/

https://goplay.tools/

第二章 快速开始一个Go程序

程序架构

程序入口main函数,保存在main包中。一个包定义一组编译过的代码,包名即命名空间。