golang study
.vscode | ||
src | ||
.gitignore | ||
go.mod | ||
go.sum | ||
README.MD |
Go学习
编写hello world程序
- package 必须是 main
- 方法名必须是 main()
- 文件名不一定是 main.go
和其他语言差异
- Go中 main 函数不支持任何返回值
- 通过os.Exit来返回状态
- main 函数不支持传入参数
- 通过 os.Args 获取命令行参数
编写测试程序
- 源码文件以
_test
结尾: xxx_test.go - 测试方法名以 Test 开头: func TestXXX(t *testing.T) {...}
变量赋值
- 赋值可以自动进行类型推断
- 在一个赋值语句中可以对多个变量进行同时赋值
// 单独赋值
var a int = 1
var b int = 1
// 同时赋值
var (
a int = 1
b int = 1
)
// 自动推断
a := 1
b := 1
基本数据类型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for uint8
rune // alias for int32, represents a Unicode code point
float32 float64
complex64 complex128
类型转化
-
与其他编程语言的差异
- Go不允许隐式类型转换
- 别名和原有类型也不能进行隐式类型转换
-
类型的预定义值
- math.MaxInt64
- math.MaxFloat64
- math.MaxUint32
算术运算符
- Go语言没有前置的 ++, --,
线程和协程 Thread vs. Groutine
- 创建时默认的 stack (栈) 的大小
- JDK5 以后 Java Thread stack 默认为 1M
- Groutine 的 stack 初始化大小为 2k
- 和 KSE (Kernel Speace Entity) 的对应关系
- Java Thread 是 1:1
- Groutine 是 M:N