「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」
Golang 设计大佬设计 Go 语言的核心思想是“Less can be more ”。
主要特征
-
自带 GC ,自动立即回收
-
丰富的内置类型
- 值类型
-
bool int(32 or 64), int8, int16, int32, int64 uint(32 or 64), uint8(byte), uint16, uint32, uint64 float32, float64 string complex64, complex128 array -- 固定长度的数组 - 引用类型
-
slice -- 序列数组(最常用) map -- 映射 chan -- 管道
-
函数多返回值
-
错误处理
内置 error 接口
type error interface { //只要实现了Error()函数,返回值为String的都实现了err接口 Error() String } -
匿名函数和闭包
-
类型和接口
-
并发编程
-
反射
-
语言交互性, 支持和 C 语言混合编程
Go 文件名
所有的 go 源码都以 “.go” 为文件的扩展名
命名规则
函数,变量,常量,自定义类型,包的命名规则
- 首字母可以是任何 Unicode 字符或者下划线
- 剩余字母可以是 Unicode 字符串,下划线,数字
- 字符长度不限
25个 关键字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
37个保留字
Constants: true false iota nil
Types: int int8 int16 int32
unit unit8 uint16 uint32
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
可见性
- 声明在函数内部,是函数的本地指,类似 private
- 声明在函数外部,是对当前包可见的全局值,包内所有的 go 文件都可见,类似 protect
- 声明在函数外部且首字母大写是所有包可见的全局值,类似 public
语言声明
- var 变量声明
- const 常量声明
- type 类型声明
- func 函数声明
- package 包声明
项目构建与编译
src:源代码文件
pkg:包文件
bin:相关 bin 文件
常用的命令:
- go get 获取指定的代码包及其依赖包,并对它们进行编译安装
- go run 编译并运行命令源码的文件
- go build 编译我们指定的源码文件或代码包以及它们的依赖包
- go install 用于编译并安装指定的代码包以及依赖包,系统会到GOPATH的src目录中寻找abc_name目录,然后编译其下的go文件;
- go test 用于对程序进行单元测试
- go env 打印 Go 语言的环境信息
- go list 列出指定的代码包信息
- go fix 将指定代码包的就版本的文件修正为新版本的代码
- go vet 检查源码中静态错误的简单工具
- go tool pprof 命令来交互式的访问概要文件的内容
内置函数
- append :用来追加元素到数组、slice中,返回修改后的数组、slice
- close :主要用来关闭channel
- delete : 从map中删除key对应的value
- panic: 停止常规的goroutine (panic和recover:用来做错误处理)
- recover :允许程序定义goroutine的panic动作
- real : 返回complex的实部 (complex、real imag:用于创建和操作复数)
- imag :返回complex的虚部
- make : 用来分配内存,返回Type本身(只能应用于slice, map, channel)
- new : 用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
- cap :capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
- copy:用于复制和连接slice,返回复制的数目
- len : 来求长度,比如string、array、slice、map、channel ,返回长度
- print、println :底层打印函数,在部署环境中建议使用 fmt 包
init 函数和 main 函数
init 函数
初始化包时使用 init 函数。
- 程序执行之前进行包初始化的函数,如:初始化包里变量
- init 函数的不能被调用,是在main 函数执行之前,自动被调用
- 一个包可以有多个 init 函数,但执行顺序没有明确定义,一般都认为是至上而下顺序执行
- 每个 Go 源文件都可以有 init 函数
- 不同包的 init 函数执行顺序都按照依赖关系决定
main 函数
Go 语言程序的默认主函数,无参数
init 函数 与 main 函数区别
-
相同:无参数,也没有返回值,都是 Go 程序自动调用
-
不同:
- init 函数可以重复定义,各个包都可以使用
- main 函数只能在 main 包中,且有且只能一个 main 函数
-
\