【青训营】第一节课笔记|青训营笔记
字节、美团、滴滴、百度、腾讯、七牛云、paypal、Facebook、google、bilibili都在用go
字节跳动用go: 早期业务团队没有java背景,用python 2014python开始出现性能问题 用golang重写了python服务,并且得到推广
var定义
:=会根据上下文自动确定类型
if else
和python一样,没有括号(也可以写括号)
循环
只有一种for循环,初始化;结束条件;自增
如果只有condition(结束条件)那就是while循环
如果什么都没有那就是while true
for initialization; condition; post {
// zero or more statements
}
switch
golang里面switch是不需要每一个都break的
golang的switch可以不写输入变量的语句,直接写条件分枝,还可以写判断
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
数组
很少用数组,因为他的长度是固定的
切片 slice
用make创造切片
append添加元素,但是必须赋值回去 copy拷贝且表
map 哈希或者字典
用make创建新的map
可以用方括号写入,也可以用方括号读取
用方括号读取的时候,r, err = mode['key'],可以判断读取是否正确
range
对于数组/slice,返回“索引,值” 对于字典,返回“key,value”
函数
变量类型后置
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
}
指针
和c++的差不多,都是函数里用的 函数传入参数的时候,用*来表示该变量是指针
结构体
带类型的字段的集合
用结构体名称初始化,后面跟着大括号
type user struct {
name string
password string
}
a := user{name: "wang", password: "1024"}
c := user{name: "wang"}
没有初始化的话就初始化为空值
这里有个问题,如果我已经复制了一段代码,想再复制一段代码在这个代码段中,就被自动再次判断一次,我觉得没必要
会进行一次这种文档解析
然后变成下面这样
type user struct { name stringa := user{name: "wang", password: "1024"}
password string }
用指针传入结构体
结构体方法
不带指针就是直接调用 带指针就是修改
错误处理
喜欢在函数return的时候第二个值放错误处理
字符串操作
直接查表就行
字符串格式化
在“”里面放%
一般用%v,表示任何类型
%+v,%#v都是更加详细的输出
%.2f
json操作
最简单的方法不用操作,直接对于结构体字段的第一个字母大写
- 对于结构体字段的第一个字母大写
- 使用
json.Marshal(a)序列化成byte数组(强制类型转换可以打印出字符串) json.Unmarshal(a)返序列化到一个空的变量
时间处理
查表即可 主要是这个不太好理解
time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")
时间戳是最常用的
字符串和数字的转换:strconv
也是查表
进程信息
标题:「Go 语言上手-基础语言」第三届字节跳动青训营 - 后端专场