下载地址:所有版本 - Go 编程语言

初始化项目

go mod init <模块路径>

常用示例

go mod init hello
go mod init github.com/Li-shi-ling/hello

运行代码

go run <目录>

常用示例

go run .

数据类型

整数类

int,int8,int16,int32,int64
uint,uint8,Buint16,uint32,uint64
uintptr
byte为uint8别名
rune为int32别名

浮点数类

float32,float64

复数

complex64,complex128

布尔

bool

字符串

string

数组

固定且长度不可变
a := [5]int{1,2,3,4,5}

Slice

a := make([]int,0)
a = append(a,1,2,3,4)
//其他创建方法
a := []int{1,2,3,4,5}

map

m := map[string]int={
"a":1,
"b":2
}
fmt.Println(m)

//其他方法
m := make(map[string]int)

make 与java中的new或c中的malloc类似

结构体

type Point struct{
X int
Y int
}
//初始化
p := Point{1,2}
//访问和修改
p.X = 3

这不是和c一样吗,可恶不打分号有点痛苦

指针

q = &p
p.X = 3
fmt.Println(*q) //也会变成3
//修改时可以不使用*
q.X=10

结构方法

func (p Point) SetPoint(x,y int){
p.x=x
p.y=y
}

//调用
p.SetPoint(3,4)

//和c++的方法一样需要传进去引用,要不修改不起效果
func (p *Point) SetPoint(x,y int){
p.x=x
p.y=y
}

接口

type Shape interface { 
Print()
}

type Rectangle struct{}
type Triangle struct{}

func (r Rectangle) Print() {
fmt.Println("矩形")
}

func (t Triangle) Print(){
fmt.Println("三角形")
}

var s Shape
s = Rectangle{}
s.Print()
s = Triangle{}
s.Print()

分支与循环

分支

if a:=1;b>1{     // a的作用域只在对应if
}else if b<0{
}else{
}

// 与c不同,case运行完后主动退出,不用break
switch a{
case 1:
//代码
case 2:
//代码
default:
//代码
}

循环

for i:=1 ; i<5 ; i++{
fmt.Println(i)
}

// 没有while
i := 1
for i<5{
fmt.Println(i)
i++
}

函数定义

func sum(a int,b int) int{
return a+b
}

//返回多个值
func swap(a,b int) (int,int) {
return b,a
}

// 类似于函数指针
func sum(a int, b int,
transform func(int) int) int{
return transform(a) + transform(b)
}

func main(){
square := func(x int)int {
return X * X
}
fmt.Println(sum(1,2,square))//5
}

错误处理

n, err := fmt.Println("dd")
if err != nil{
// 执行正常代码
} else {
//执行异常代码
}

并发

最重要的部分