下载地址:所有版本 - Go 编程语言
初始化项目
go mod init <模块路径>常用示例
go mod init hellogo 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 {
//执行异常代码
}并发
最重要的部分