这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
(内容根据字节跳动青训营课程内容以及自己的理解编写)
近期将日更这几个主题的文章,欢迎关注!
- 全面理解go协程
- channel通信
- Kitex
- Hertx
- Gorm
- go的测试环节
这篇文章主要是我刚接触go语言,新接触的一些写法
一些约定
在一开始的时候,我们在安装go的时候,定义了GOPATH
我定义的GOPATH是"D:\Programming\Go"
一般的约定是,在GOPATH底下新建src目录,然后在里面存储go项目,比如:
后面我们在安装包的时候,或者打包的时候会自己生成以下的目录结构
pkg,bin,src
Sprintf
func main() {
fmt.Println("hello world")
var str = fmt.Sprintf("%s这是个打印的字符串%s", "字符串1","字符串2")
fmt.Println(str)
}
运行结果:
这两个的区别就是Print一个是写入输出流,Sprintf一个是返回字符串(Sprintf相当于python里面的模板字符串)
函数返回值类型可以不止一个
这里拿一个将字符串转换为数字的方法Atoi作为例子
func main() {
// 转换正确
num, err := strconv.Atoi("123")
if err != nil {
fmt.Println(err)
}else {
fmt.Println(num)
}
// 转换错误
waNum, err := strconv.Atoi("java")
if err != nil {
fmt.Println(err)
}else {
fmt.Println(waNum)
}
}
运行结果:
可以看到我们接受了两个返回值!
空白标识符- 也被用于抛弃值,如值5 在:_, b = 5, 7 中被抛弃。
-实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
-可以在一个函数里面多次调用,不会报错的
(-后面就不可以跟:=了,因为:=相当于先初始化再赋值,_不能初始化)
分号
go在编译的时候是会自己帮你加分号的,你也可以自己加,于是有一种不推荐的写法,看得懂就行
上面字符串转换函数Atoi也可以简写成:
func main() {
// 转换正确
if num, err := strconv.Atoi("123"); err != nil {
fmt.Println(err)
}else {
fmt.Println(num)
}
}
随机数写法
这里要比平时多加一个种子条件
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
json序列化
go进行序列化和反序列化也十分简单:
answer, err := json.Marshal(request)
如果要在序列化和反序列化的时候想让他自动类型转换的话,我们就需要在定义结构体的时候加上tag
(结构体就类似java的类)
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
一些有用网站
1.开启代理
SwitchyOmega插件
比如开启127.0.0.1的话,你访问网页流量就会用的是127.0.0.1的了
2.根据curl生成请求代码的网站: