这是我参与「第五届青训营」伴学笔记创作活动的第 1 天。
课堂笔记
- 课程源码:github.com/wangkechun/…
- 短链接:hi-hi.cn/go
重点内容
- Go语言简介
- Go语言开发环境配置
- Go语言基础语法和标准库
- Go语言开发实战
Go语言简介
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
举例:HTTP服务器
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir(".")))
http.ListenAndServe(":8080", nil)
}
哪些公司在使用Go语言
字节跳动为什么全面拥抱Go语言
- 最初使用的Python,由于性能问题换成了Go
- C++不太适合在线Web业务
- 早期团队非Java背景
- 性能比较好
- 部署简单、学习成本低
- 内部RPC和HTTP框架的推广
配置Go语言开发环境
安装Golang
配置集成开发环境
- VSCode:code.visualstudio.com/
- GoLand:www.jetbrains.com/go/
基于云的开发环境
基础语法
运行方法
在终端中输入
go run example/01-hello/main.go
go build example/01-hello/main.go
./main
也可以在IDE中点击按钮运行。
1. Hello world
IDE中鼠标悬浮在函数上查看函数文档及链接到包的在线文档。
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
2. 变量
字符串可以通过加号拼接。符号优先级类似于C++。
声明方式:
- 自动推导变量类型 var a = 1
- 显示指定变量类型 var b int = 1
- 变量名:=值 f := a+1
常量:
- 将var改为const
3. if else
没有括号。必须直接接大括号。
可以使用类似C++11标准的方法,在if内声明变量。
4. for
只有for循环。
5. switch
类似于C++,但是不需要添加break语句。
可以使用任意的变量类型。可以不提供变量。
6. 数组
数组长度不可变,业务上常用切片。
7. 切片
可变长度的数组。创建时可以指定长度
使用append追加元素,赋值回原切片。
8. map
语法上类似于C++ STL中的map。内部无序。
9. range
辅助for循环使用。对于map提供返回两个值的语法。
10. 函数
后置返回类型。可以返回多个值。
11. 指针
操作相比C++来说比较有限。
12. 结构体
结构体指针同样使用.符号。
13. 结构体方法
类似于类成员函数
14. 错误处理
使用一个单独的返回值处理错误信息。
15. 字符串操作
有多种内置函数供使用。
16. 字符串格式化
Printf函数类似于C语言语法。%v可以作为多种数据类型的占位符。
17. JSON处理
结构体中每个字段第一个字母大写,使用json.Marshal序列化。
打印时使用string()反序列化。
使用json.Unmarshal反序列化。
18. 事件处理
time包中可以使用具体的字符串指定时间格式。
19. 数字解析
使用strconv包解析字符串。
20. 进程信息
使用os包获取进程信息、启动子进程等。