Go语言基础 |青训营笔记

117 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

Let's GO的第一天

Go语言基础学习重点

    1. 配置本地go环境
    1. 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的一些常用库,文章如有错误请大家批评指正