Go语言基础
简介
初始化
规则:
- 每个package 只会被初始化一次;
- 同一个 package,不同文件是按照文件名的顺序来初始化;
- 不能循环 import , 例如:A import B ,然后又 B import A;
- 任何 package , 都可以存在一个以上的 init() , 执行顺序由上而下;
- main() 只能存在于 package main;
- 属于 package main 的文件 , 都将会初始化;
变量
golang变量声明即初始化;
|
|
基础语法
类型别名
类型别名是go 1.9中增加的语法,用于给已有类型设置一个另外的名称;
语法:
type TypeAllias = OldType
;类型别名除了名称和原类型不同外,其他完全一样,可以直接用在原类型用的所有属性,无须转换;
类型别名不允许循环定义;
大写字母开头的别名支持导出;
|
|
类型嵌入
golang中的类型不支持继承,但提供了嵌合机制;
|
|
基本数据结构
数组(array)
|
|
切片(slice)
|
|
映射(map)
|
|
gc
goroutine
channel
Interface
sync
- WaitGroup
defer
defer 是后进先出。
panic 需要等defer 结束后才会向上传递。 出现panic恐慌时候,会先按照defer的后入先出的顺序执行,最后才会执行panic。
关键字
- defer
值语义和引用语义
Go语言中的大多数类型都基于值语义,包括:
- 基本类型,如byte、int、bool、float32、string等;
- 复合类型,如arry、struct、pointer等;
字符类型
golang中有两种字符类型:
- byte:uint8 类型, 代表一个ASCII 字符;
- rune: int32 类型,代表一个unicode字符;
注意事项
- for-range 的k,v变量在整个遍历过程中共用,不能直接进行引用传递。
包管理
GOPATH
go-mod
闭包
Go语言支持闭包;
Go语言能通过escape analyze识别出变量的作用域,自动将变量在堆上分配;
返回闭包时并不是单纯返回一个函数,而是返回了一个结构体,记录下函数返回地址和引用的环境中的变量地址;
|
|