这是我参与「第五届青训营 」伴学笔记创作活动的第 1天
go语言特点
go保证了既能达到静态编译语言的安全性和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容go语言:go=c+python。
1)从c继承很多概念,表达式语言,控制结构,基础数据类型,调用参数传值,指针等,也保留了和c语言一样的编译执行方式和弱化的指针。
2)引入包的概念,用于组织程序结构,go语言的一个文件的要属于一个包,不能单独存在
3)垃圾回收机制,内存字典回收,不需要开发人员管理
4)天然并发
- 从语言层面支持并发,实现简单
- goroutine,轻量级线程,可实现大并发处理,高效利用多核
- 基于CPS并发模型实现
- 吸收了管道通信机制,形成go特有的管道channel通过管道channel,可以实现不同goroute之间的相互通道
- 函数返回多个值
- 新的创新:切片,延时执行defer等
go语言后面不用带分号,定义变量,变量名在前类型在后
执行流程分析
两种方式的区别:
- 如果先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go的开发环境的机器上,任然可以运行。
- 如果是go run 源代码,那么如果要在另一台机器上运行,也需要go开发环境。
- 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多。
go build -o my.exe hello.go
my.exe:自定义文件名
hello.go:源代码
go程序开发的注意事项
必须以go为扩展名
go程序的执行入口是main()函数
go语言严格区分大小写
go方法由一条条语句构成,每个语句后不需要分号(go会自动添加分号)
go编译器是一行行进行编译的,因此我们一行就写一条
go语言定义的变量或者import包如果没有使用到,是不能通过编译的
大括号成对出现,缺一不可
常用命令
- build: 编译包和依赖
- clean: 移除对象文件
- doc: 显示包或者符号的文档
- env: 打印go的环境信息
- bug: 启动错误报告
- fix: 运行go tool fix
- fmt: 运行gofmt进行格式化
转义字符
\t:一个制表位,实现对齐
\n:换行
\:一个\
":一个"
\r:一个回车,从当前行最前面开始输出,覆盖掉以前的内容
注释
/**/,块注释,少用
//,行注释
代码风格
gofmt -w main.go //格式化源代码
一行最多80个
fmt.Println("hhhhhh"
,"kkkkk")
Golang标准库API文档
Dos
Dos:磁盘操作系统,就是windows目录结构。
变量
声明变量的一般形式是使用 var 关键字:
var 变量名 变量类型 //标准格式
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)//批量格式
名字 := 表达式 //简短格式
x:=100
a,s:=1, "abc"
//简短模式限制
定义变量,同时显式初始化。
不能提供数据类型。
只能用在函数内部
Go语言的基本类型有:
- bool
- string
- int、int8、int16、int32、int64
- uint、uint8、uint16、uint32、uint64、uintptr
- byte // uint8 的别名
- rune // int32 的别名 代表一个 Unicode 码
- float32、float64
- complex64、complex128
当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的。
每个变量会初始化其类型的默认值:
- 整型和浮点型变量的默认值为 0 和 0.0。
- 字符串变量的默认值为空字符串。
- 布尔型变量默认为 bool。
- 切片、函数、指针变量的默认为 nil。
如果 hp 已经被声明过,但依然使用:=时编译器会报错