golang study
Go to file
2023-03-01 20:14:17 +08:00
.vscode init 2023-03-01 11:23:26 +08:00
src 🎨 change module path 2023-03-01 20:14:17 +08:00
.gitignore init 2023-03-01 11:23:26 +08:00
go.mod 🎨 change module path 2023-03-01 20:14:17 +08:00
go.sum init 2023-03-01 11:23:26 +08:00
README.MD init 2023-03-01 11:23:26 +08:00

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) {...}

变量赋值

  • 赋值可以自动进行类型推断
  • 在一个赋值语句中可以对多个变量进行同时赋值
// 单独赋值
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

类型转化

  • 与其他编程语言的差异

    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