变量声明 ①var a = "initial" ② e float64 := 13.5 (变量:=值) 常量 var改成const
if else:if后面无括号,判断条件后必须接{}
循环只有for
switch:每个case后面不需要加break,可以使用任意类型变量,或者在case后面写条件分支, 使用比多个if,else更清晰
数组声明:var a [5]int,同c语言类似
切片(slice) 创建切片: s:=make([]string, 3) 使用append追加元素:s=append(s,"d","e"),必须把append的结果赋为原数组,不支持负数索引
map
创建(键值对):m = make(map[key]value);
e.g m:=make(map[string]int)
m2 := map[string]int{"one":1,"two":2}
m["one"] = 1
m["two"] = 2
delete删除键值对:delete(m,"one")
range:对于map或slice快速遍历 range遍历时,返回两个值,第一个为索引,第二个为对应值 eg: nums :=[]int{2,3,4} for idx,value = range nums{...}
function:支持返回多个值,变量类型后置,通常第一个返回结果,第二个返回error
指针在传参使用时要加'&'
struct初始化: type user struct{ name string password string }
错误处理:使用单独返回值传递错误信息(import "error") 没有出错时err的值为nil 在Go语言中,布尔类型的零值(初始值)为 false, 数值类型的零值为 0,字符串类型的零值为空字符串"", 而指针、切片、映射、通道、函数和接口的零值则是 ni
字符串操作 import “strings” 常见函数: Contains:是否包含字符串;Count:字符串计数;Index:查找某个字符串位置; Join:连接字符串;Repeat:重复多个字符串;Replace:替换字符串
字符串格式化 s := "hello" fmt.Printf("s=%v\n",s) %v:任意类型,%+v:详细结果,%#v更详细
json操作 import "encoding/json" 对于一个结构,保证每个字段首字母大写,就可以使用json.Marshal()去序列化,变成json的字符串
时间处理 time.Now()显示当前时间 t := time.Date(2021,3,27,1,25,36,0,time.UTC) (time.Date()构造时间)
字符串与数字转换 import "strconv" eg:f, _ := strconv.ParseFloat("1.234", 64) //f=1.234 n, _ = strconv.ParseInt("0x1000", 0, 64)//n=4096 n2, _ := strconv.Atoi("123") //n2=123,字符串转int(itoA,数字转字符串) 第二个返回值返回error
进程信息 import("os" "os/exec") fmt.Println(os.Args) //得到程序执行时指定的命令行参数 fmt.Println(os.Getenv("PATH"))//读取环境变量
生成随机数import "math/rand" rand.Seed(time.Now().UnixNano()) //用时间戳来初始化随机种子 s := rand.Intn(n) //s是0到n之间的随机整数