Go语言基础 | 青训营笔记

49 阅读4分钟

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

今天的课程主要学习了Go语言的基础语法知识,在学习过程中我将Go语言与先前学习过的C/C++,java进行对照,以便于更好地理解学习Go语言。

重点内容

Go语言的语法基础

详细知识点

一.变量

Go语言中,声明变量有以下几种方法

var a string
var a = “Hello World”
d := 0.123

其中1方法是常规变量声明方法,2方法进行了变量初始化,而通过这种方法中Go编译器能够自动推导变量的类型,3方法则是通过 := 对变量进行赋值,同时根据等号后的内容推导变量的类型。

而声明常量的方法也很简单,将上面的var换为const即可。Golang中常量没有固定类型,其类型会根据上下文内容确定。

二.基础语法

1.if … else …

相比C语言,Go语言中的if语句十分类似,去掉括号即可。但有一点需要注意,Go编译时将换行符作为类似C中的‘;‘,因此if与左花括号必须在同一行之中,写语句是必须换行。例子如下

if a>0 {
    fmt.println(a);
}
else {
    fmt.println(b);
}`

2.for循环

Go语言中for循环是唯一一种循环写法,基本格式为

for initialization; condition; post {
// zero or more statements
}

其中zation为初始化语句,condition为跳出条件,post为每次循环末执行操作,与C语言类似。

3.switch … case …

Switch语句的写法与C/C++基本一致,不同的点在于,Go允许case后跟条件判断语句,即、

Switch {
case a>b:
    fmt.println(a);
case b>a
    fmt.println(b);
}

这使得switch语句逻辑更清晰。

4.数组,切片,map

数组的声明方法

Var a [5]int

切片的声明方法

S := make([]string 3)

map的声明方法

m := make(map[string]int)

数组与切片的区别在于数组是定长的,而切片的长度可以变化,可以利用append添加元素,map则是类似java里的Hashmap,是一种键-值数据结构。

三.range

range可以帮助程序员实现快速遍历,写法如下

for i, num := range nums{
    code
}

示例中range用于遍历数组,其中i为数组索引,num为数组所存的数字。

四.函数

Go定义的函数方法示例如下

func myfun(m map[string], k string) (v string, ok bool) {
    v, ok = m[k]
    return v,ok
}

可以看出,Go的函数除了变量类型后置以外,还支持多返回值,这是与C/C++不同的地方。

五.指针

Go支持指针,但对指针可执行的操作进行了限制,Go中指针主要用于在函数中对传入的参数进行修改。

六.结构体,结构体方法

结构体的定义示例

Type user struct {
    name string
    password sting
}

结构体获取元素的方式与C语言一致,即对user u,可以利用u.name去除name的值。而在go中还有专用于某种结构体方法,结构体方法十分类似于类成员函数,可用u.myfun()的格式进行调用。定义示例如下

func (u user) printUsername {
    fmt.println(u.username)
}

七.错误处理

Go中错误处理采用一个特殊的返回值err返回错误,程序员只需对err进行判断,若err!=nil,则程序发生错误,而程序员也能通过if else语句处理错误。

if(err!=nil){
    fmt.println(err) //这里的处理办法为输出错误信息
    return
}

八.字符串操作

Go的标准库中为字符串操作提供了许多方法,具体的不在此赘述。

九.JSON处理

在Go中只要满足了每个字段的第一个字符是大写的结构体,就可以通过json.marshal将其转化为一个byte数组。同时程序员也可以通过json.Unmarshal将该byte数组转化为结构体。

十.时间处理

利用time.Now可以获取时间。Time.Unix可以获取时间戳。

now := time.Now()
fmt.Println(now) //2023-01-15 15:25:37.7048196 +0800 CST m=+0.007463301
fmt.Println(now.Unix()) //1673767537

课后总结

这堂课中,在老师的讲解下我学习了Go的基础语法。Go与C语言的编程逻辑类似,但是在具体的操作及语法规则上与C语言有一定差别,尤其是Go定义变量时的类型后置写法需要我利用一定时间习惯,总之还是需要多加练习,在实际编写Go程序的过程中学习Go。