go_study/README.MD
2023-03-01 11:23:26 +08:00

73 lines
1.5 KiB
Markdown

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