73 lines
1.5 KiB
Markdown
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 |