这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
为什么选择Go语言
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库:相比第三方库有更稳定,兼容性,迭代性
- 完善的工具链:编译、代码格式化、错误检查、帮助文档、包管理、代码补充提示、内置的单元测试框架
- 静态链接:上线占内存小(c++得加source文件, java得加JRE)
- 快速编译
- 跨平台
- 垃圾回收
Go基础语法
| 定义变量格式:var name = value / name := value |
|---|
| 定义if else : 1.条件语句没有括号. 2.不能写成一行 |
| 定义for循环:1.for后面语句没有括号 |
| 定义switch循环:1.同样没有括号 2.不用break只会走一条分支3.可以使用任意的变量类型 |
| 定义数组: var a [5]int数组长度固定不常用 |
| 定义切片,添加元素,复制切片:1. a := make([]int,3) 2.a = a.append(a,1,2) 切片容量不够时会扩容返回新的切片 3.copy(c,a) |
| 定义map,定义值,取值,删除: m := make(map[string]int)或者 m := map[string]int{"a":"A","b":"B"},m["one"] = 1, r,ok := m["one"],delete(m,"one") |
| - 定义range用法: 数组:nums := []int{2,3,4} for i,num := range nums{} 切片:for k,v := range m{} |
| 基础用法指针:修改传参 |
| 定义结构体:type name struct{} 使用.来访问和改值成员变量,可以使用指针减少大结构体复制开销 |
| 定义结构体方法: func(structname stucttype) funcname (variablename variabletype){body}func(structname *stucttype) funcname (variablename variabletype){body} |
| 定义错误处理:函数返回值为(name type,err error)如果正常return(value,nil)产生异常根据情况返回return nil,errors.New("not found")取出value, err:= func() |
| 字符串操作:可以查看strings包 |
| 字符串打印格式化:fmt.Printf("s = %v\n",s)%v可以查看任意类型的变量,%+v较为详细 ,%#v更为详细,%.2f打印保留小数 |
| json处理:1.确保变量名首字母大写,然后使用json.Marshal(a)转化成buf格式,在通过string强制类型转化既可以变成字符串格式的json 2. 反序列化var b userInfo json.Unmarshal(buf,结构体指针) |
| 时间处理: time包,time.Now(),time.Date,t.Format(),t.Sub(),time.Parse(),now.unix() |
| 数字处理:strconv包 |
| 获取进程信息:os.Args os.Getenv环境变量,exec.commond |