这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
简介
什么是 Go 语言
Go 语言是一门开源的编程语言,目的在于降低构建简单、可靠、高效软件的门槛。
C 和 C++ 这类语言提供了很快的执行速度,而 Ruby 和 Python 更善于快速开发。Go 语言处于两者之间,不仅拥有高性能,还能快速开发。
很多大厂,如字节、腾讯、Google 等都在使用 Go 语言,越来越多的厂商开始拥抱 Go。 Go 语言在云计算、大数据和区块链等方面发展较好,拥有较多的占有率。
- 开发速度:只关注那些直接被引用的库,编译快速。编译器帮助用户捕获类型错误。
- 并发
- goroutine:使用同一个线程去执行多个 goroutine,而 goroutine 使用的内存比线程更少,会自动在逻辑处理器上执行。
- 通道:是一种数据结构,可以让 goroutine 之间进行安全的数据通信。
入门
开发环境
Go 官网,下载安装,也可以使用在线 playground。
配置.zshrc
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
开发工具
可以直接使用 Goland,也可以使用 VSCode(需要下载 go插件,并安装支持库)
基础语法
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
- 第1行,Go 程序包
- 第3行,使用 import 导入外部库
- 第5-7行,像 C 语言一样,main 是程序执行入口
变量类型
整数、浮点数、布尔类型、字符串、字典、通道(chan)等
数组
在 Go 中是一个固定长度的数据类型,与其他语言类似。示例,声明 var array [5]int 长度为 5 的整数数组
array := [5]int{10,20,30,40,50} // 包含初始化
array := [...]int{10,20,30} // 用 ... 代替数组长度,元素个数决定长度
切片
切片有 3 个字段的数据结构,包含操作底层数组的元数据。分别是指向底层数组的指针、切片访问的元素个数(长度)和切片允许增长的元素个数(容量)。
示例,slice := make([]string, 5),长度容量均为 5。slice := make([]int, 3, 5) 长度为 3,容量为 5。
slice := make([]int, 3)
slice[0] = 0
slice[1] = 1
slice[2] = 2
slice = append(slice, 3) // slice = [0,1,2,3]
slice[:2] // [0,1]
slice[1:3] // [1,2]
映射
是一个集合,可以使用类似处理数组和切片的方式迭代映射中的元素。及时使用同样的顺序保存键值对,每次迭代的顺序可能也不一样。
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
if v, ok := m["three"]; ok {
fmt.Println(v) // 不执行,ok 为 false
}
类型系统
结构体,通过组合一系列固定且唯一的字段来声明。类型名和字段名首个字母是否大小写来决定是否包导出。
type User struct {
Name string
Age int
}
var u User // 均使用零值来初始化
u1 := User{
Name: "test",
Age: 20,
}
func (u User) Hello(){ // 方法
fmt.Printf("say hello: %s", u.Name)
}