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

第一次记录笔记,该篇文章主要介绍了go的基础知识,记录了自己觉得重要的内容、老师上课没讲到的内容、容易出错的内容以及自己不懂的地方,如有出错,请指出。

1.1 变量

变量与大多数语言含有的变量相同,而且go语言是一门强类型语言。

有趣的时,go不像其他语言是变量类型在前、变量名在后,而是恰好反过来了。

变量定义方式有多种:

//变量为赋值时,默认为该类型的零值
var a int 

var a = 1

//简短声明
a := 1

//声明多个变量
a,b :=1,2

值得注意的时,go中字符串内容是不可以改变的,比如说这条语句str[0]='a'是不允许的。

1.2 if else

和其他语言差不多,else必须跟在上一个if大括号的后面。

1.3 循环

go语言中没有while循环,只有for循环,for也能实现while循环的功能,变得更加简单、方便,但是好像没有办法实现do while的功能,虽然可以写在循环前,但是这不是我们想要的。

1.4 switch 和 select

switch和其他语言差不多,但我这里想介绍一下select,它和switch类似,只不过它是用来选择信道的。

//ch1和ch2两个信道中,谁的数据先到达就选择哪个数据,否则一直阻塞,直到有数据到达,当然也可以加一个default,避免阻塞。
    select {
    case re := <-ch1:
        println(re)
    case re := <-ch2:
        println(re)
    }

1.5 数组和切片

数组var a [n]Type,切片var a []Type,常用定义切片的方式是使用make函数。

数组不用过多介绍,和C语言类似,更常用的是切片,切片本身不拥有任何数据,它们只是对现有数组的引用。

最常用的函数就是append函数,不过老师好像没有介绍拼接两个切片的操作。

如下:

a := []int{1,2,3}
b := []int{4,5,6}
c := append(a,b...) //c = {1,2,3,4,5,6}

1.6 map

和python中的字典类似,由键值组成,通常使用make函数构造make(map[key]value),可以通过key去获得值,键不存在返回零值,所以也可以判断键是否存在v,ok := map[key],ok==false则不存在。使用range遍历时,输出的结果是无序的。

1.7 函数

令我感到go语言方便的是其可以支持一个函数有多个返回值。

1.8 指针

不像C语言一样支持指针运算,比如说p := &a ,则p++是不行的。

1.9 结构体

go语言中没有类,但是可以通过结构体和接口来实现类似类的操作,比如说结构体实现方法。

2.0 接口

老师好像没有介绍接口,我感觉接口还是蛮重要的。

//接口定义
type test interface {
    one() int
    two(a int) string
}

如果一个结构体实现了一个接口中的所有函数,则表示其实现了该接口,于是该结构体类型可以转化成接口的类型。

type any interface{}空接口表示任何类型

2.1 JSON处理

MarshalIndent 类似于 Marshal,但应用缩进来格式化输出。根据缩进嵌套,输出中的每个 JSON 元素都将在以前缀开头的新行开始,后跟一个或多个缩进副本。

用法:

b, err := json.MarshalIndent(data, "<prefix>", "<indent>")

输出:

{
<prefix><indent>"a": 1,
<prefix><indent>"b": 2
<prefix>}

参考链接:

https://vimsky.com/examples/usage/golang_encoding_json_MarshalIndent.html

最后修改:2023 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏