这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Let's GO的第一天
Go语言基础学习重点
-
- 配置本地go环境
-
- go语言基本语法
配置Go环境
根据os配置相应的go版本
Golang官网:go.dev/
安装完成后配置本地的go语言环境,配置完环境后,根据实例代码打印hello world,在vscode的终端输入 go run 文件路径/文件路径 main.go,如果能正确打印则配置成功,教程如下:
练习 - 安装 Go - Training | Microsoft Learn
练习 - 安装 Visual Studio Code 和 Go 扩展 - Training | Microsoft Learn
go语言基本语法
相信学习过其他语言的同学在学习go时压力不会特别大,因为语言的发展肯定是更加“人性化”的,只会越来越容易去学习,此处列举go语言相对于python和c++的特殊地方
1、声明变量
C++:变量类型 变量名
python:变量名 = 变量值
GO:
- var 变量名 变量类型
- 变量名 := 变量值
GO可以说是集两者的优点,合二为一,是一种强类型的语言
2、if-else语句
只有一些细节的地方需要注意
a := 10
if a == 10 {//和python一样条件不用括号
fmt.Println("go")
} else if a == 20 {//else语句只能贴着大括号写,奇怪的设计
fmt.Println("gogo")
} else {
fmt.Println("no")
}
if a:= 10; a == 10 {//可以在if语句内做变量初始化,用分号隔开
fmt.Println("go")
} else {
fmt.Println("no")
}
3、循环语句
只有for循环
for initialization; condition; post { // 循环体 }
4、数组
var arr1 [3]int //定长数组长度为3
arr2 := make([]int,3) //不定长数组,初始长度为3
arr2.append(value) //make出来的数组用append添加内容,和python很像
fmt.Println(arr2[1:3]) //切片内容和python一致 [start:end)
5、map
键值对存储结构,与C++中的unordered_map类似,用哈希表实现,是无序存储
//1、用make创建,因为map是一个引用类型
m1 := make(map[string]int) //框框里是key,外面是value
//2、直接创建
m2 := map[string]int{"my":1,"you":2}
6、range
range关键字的作用:返回作用序列的下标和对应值 用法:
arr := [3]int{1, 2, 3}
for i, v := range arr { fmt.Println(i, v) }
// 输出
// 0 1
// 1 2
// 2 3
7、函数
细节:参数的变量类型要后置,一个函数可以返回多个值
func isTrue(m map[string]int, k string) (v int, flag bool) {
//变量类型后置,返回两个值,一个是结果,另一个是错误判断
x, y := m[k]
return x, y
}
func main() {
m := map[string]int{"me": 1, "you": 3}
fmt.Println(isTrue(m, "t"))
}
8、指针
Go语言中的指针是一种指向内存地址的变量,它允许程序通过指针访问内存中的值。 声明指针变量时,在变量类型前面加上*号,如:var ptr *int。可以使用&符号取得变量的内存地址
和其他语言一致,当我们需要传引用修改数据本身时,就要用到指针,用例:
func addptr(a *int) int {
return *a + 2
}
func addptr2(a *int) {
*a += 3 //注意加星号
}
func main() {
var a = 10
a = addptr(&a) //注意地址符
fmt.Println(a)
b := 20
addptr2(&b)
fmt.Println(b)
}
9、结构体
Go语言中的结构体(struct)是一种自定义类型,它可以用来表示一组数据的集合,用例:
type user struct {
name string
id int
}
func main() {
a := user{name: "Wa", id: 5}
fmt.Println(a)
b := user{"wa", 7}
fmt.Println(b)
c := user{}
c.name = "jack"
c.id = 135
fmt.Println(c)
fmt.Println(checkId(&c, 5))
fmt.Println(c.checkID2(135))
}
//先写函数名,是普通函数
func checkId(u *user, check int) (flag bool) { //减少对大结构体复制的开销,使用指针去做
return u.id == check
}
//先写参数列表,是结构体方法
func (u *user) checkID2(check int) (flag bool) {
return u.id == check
}
小结:
1、go语言的语言基础比较简单易学,集合了很多语言的优点
2、青训营老师讲课的效率很高,挑了重点讲,还有很多细枝末节的内容自己去试一试就明白了
3、下一篇文章将介绍go的一些常用库,文章如有错误请大家批评指正