这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
什么是go语言
- 高性能、高并发
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
基础语法
switch
func main() {
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
}
switch 后面加不加条件,在case后面加条件的话,可以替代if else 嵌套分支,使代码更清晰
切片
声明切片
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
用append追加元素,需要扩容,最后赋值给原切片
map
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
fmt.Println(m["unknow"]) // 0
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false
delete(m, "one")
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
多种方式创建
未赋值就是0,ok可以判断有无该键
delete 根据键删除元素,输出的内容顺序完全是随机的
range
快速遍历 若是切片则返回 下标和元素 若书map,则是 k-v对 range是值的拷贝
struct
结构体是带类型的字段的集合
只声明但未赋值就是空值(0,或者空字符串)
函数里面传入结构体指针的话可以修改值并且减少大结构体拷贝的开销
结构体方法
相当于类成员函数,初始化结构体后直接.一下皆可以调用
- 不带指针:一般就是判断一些东西
- 带指针:可以对结构体进行修改
json处理
- 用 json.Marshal 序列化为byte数组
- 用 json.Unmarshal 反序列化到对应空的结构体
数字解析
strconv包下
func main() {
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123")
fmt.Println(n2) // 123
n2, err := strconv.Atoi("AAA")
fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}
进程信息
func main() {
// go run example/20-env/main.go a b c d
fmt.Println(os.Args) // [/var/folders/8p/n34xxfnx38dg8bv_x8l62t_m0000gn/T/go-build3406981276/b001/exe/main a b c d]
fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
fmt.Println(os.Setenv("AA", "BB"))
buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
if err != nil {
panic(err)
}
fmt.Println(string(buf)) // 127.0.0.1 localhost
}
实战笔记
- rand.seed(当前时间戳)生成随机数种子
- 快速设置请求头,复制后到 curlconverter.com 里面转换
- json转结构体 oktools.net/json2go
ppt的链接
基础语言ppt:bytedance.feishu.cn/file/boxcnQ…