1 基本语法
fmt包:输入输出字符串、格式化字符串
%v:可以打印任何类型的变量;%+v、%#v:可以得到更详细的信息,通常在结构体中
运行:
- go run main.go
-
- go build main.go
-
- ./main
1.1 变量
1.变量类型:整型、字符串、浮点型
2.变量声明:
- var a = "hello" // 自动推导类型
- var a,b int = 1,2 // 自定义类型
- f := float(e) // f = e的值
- 常量:const s string = "constant"
1.2 if else
if 7%2 == 0{ //if后面没有括号
fmt.Println("7 is even")
}else{
fmt.Println("7 is odd")
}
1.3 循环 for
只有for循环
for{
fmt.Println("loop")
break
}
for j := 7; j < 9; j++{
fmt.Println(j)
}
switch:不需要break,也可以在每个case里写条件分支
a := 2
switch a{
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4:
fmt.Println("four")
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("one")
default:
fmt.Println("two")
1.4 数组
具有编号且长度固定的元素序列,var a [5]int a[4]=100
1.5 切片
可变长度的数组,用make来创建一个切片
s := make([]string, 3)
s = append(s, "d")
s[2:5] 包含左不含右
1.6 map
s := make(map[string]int) string:key的类型,int:value的类型
m["one"] = 1
读取:fmt.Println(m["one"])
1.6 range
用range快速遍历,会返回两个值,一个是索引,一个是对应位置的值
1.7 函数
func add(a int, b int) int{
return a+b
}
//可以返回多个值
func exists(m map[string]string, k string) (v string, ok bool){
v, ok = m[k]
return v, ok
}
1.8 指针
对传入的参数进行修改
func add2ptr(n *int) {
*n += 2
}
add2ptr(&n)
1.9 结构体
结构体带类型的字段集合
type user struck{
name string
password string
}
a := user{name: "liu", password: "1024"}
b := user{"liu", "1024"}
a.name = "miao"
1.10 错误处理
如果该函数可能会出错,那么需要在返回值添加error,同时返回值也是两个
返回值之后要先判断error是否有值
func findUser(users [], name string) (v *user, err error) {
for _, u := range users{
if u.name == name{
return &u, nil
}
}
return nil, error.Now("Not found")
}
u, err := findUser([]user{{"wang","1024"}}),"wang")
if err != nil{
fmt.Println(err)
return
}
fmt.Println(u.name) // wang
1.11 字符串操作
1.12 时间处理
now := time.Now() //当前时间
t := time.Date(2022,5,16,17,23,1,4,time.UTC()) //指定时间