4. go基础:结构体和接口

接口是一种聚合类型,结构体是和调用方的一种约定,有点抽象类的意思。:) 结构体 结构体定义 结构体是一种聚合类型,里面可以包含任意类型的值,这些值就是我们定义的结构体成员,也称为字段 在go语言中,要定义一个结构体,需要使用 type+struct 关键字组合。 // 定义一个代表【人】的结构体 type person struct { name string // 名称 age uint // 年龄 } 结构体的成员字段并不是必需的,也可以一个字段都没有,这种结构体成为空结构体。 type s struct {} 结构体声明使用 // 使用var声明一个person变量,未初始化,里面的值为各自变量的零值 var p person // 可以使用结构体字面量初始化的方式 p2 := person{"Mike", 10} // 第一个值为 name,第二个值为age,与结构体字段定义顺序有关 // 可以指定字段名初始化,不按定义顺序 p3 := person{age: 10, name: "Mike"} 字段结构体 type address struct { province string city string } // 结构体的字段可以是任意类型,也可以是自定义的结构体 type person struct { name string age uint addr address } // 初始化 p := person{ name: "Mike", age: 10, addr: address{ province: "Guandong", city: "Maoming", }, } fmt.Println(p.addr.province) 接口 接口的定义 接口是和调用方的一种约定,是一个高度抽象的类型,不需要和具体的实现细节绑定在一起。 接口要做的就是定义好约定,告诉调用方,自己可以做什么,但是不需要知道它的内部是如何实现的 我们通过 type + interface关键字定义一个接口 ...

<span title='2022-02-15 00:00:00 +0000 UTC'>February 15, 2022</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;LingZihuan

2. go基础:使用array/slice/map

数组,大概是每个变成语言都有基础数据结构。 Go的切片类型(slice)提供了一种方便和有效的方法来处理类型化数据序列(数组)。slice类似于其他语言中的数组,但有一些不同寻常的属性。 map可以理解为一个字典。 数组声明 可以使用 [长度]类型{} 来定义,比如 [2]string{}定义一个长度为2的字符串数组 这里的长度必须是一个常量,如果要使用变量去动态生成数组的话,需要使用make,如 make([]string, size) 这里的size是一个变变量,生成size长度的字符串数组 另外需要注意的是, [1]string 和 [2]string 不是用一种类型,长度也是数组类型的一部分 定义数组时可以省略数组的长度,此时会根据大括号{}里面的元素个数推到出数组的长度: arr := []string{"a", "b", "c", "d", "e"} 这里会自动生成长度为5的字符串数组,适用于所有元素都被初始化的数据 但是如果只有特定元素被初始化的数组,就不合适了: arr := [5]string{1: "a", 3: "c"} 上述表示数组初始化索引为1的值为a,索引为3的值为c,其他未初始化的为空值(字符串的空值为"") 如果我们不指定 [5]string,那么go就会根据我们定义的最大索引值3 来确定数组的长度为4 数组循环 使用传统的数组循环: for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } 使用 for range 数组遍历,写法更加简洁 for index, value := range arr { fmt.Printf("index = %v, value = %v\n", index, value) } 切片 Slice 切片的区间是左闭右开,如arr[2:5],选取的索引取数是[2,3,4] 切片的底层是(原)数组,将切片内容修改之后,原数组也会改变 arr := []int{1,2,3,4,5} sliced := arr[1:3] // sliced = {2,3} sliced[0] = 0 // 切片修改后,原数组内容有会改变 // arr = {1, 0, 3, 4, 5} 使用make声明切片 声明一个元素类型为string的切片,长度为5:slice1 := make([]string, 5) 还可以传入一个容量参数:slice2 := make([]string, 4, 8) 这里声明了一个长度为4,容量为8的字符串数组 长度是切片内元素的个数,容量是切片的空间 ...

<span title='2022-02-10 00:00:00 +0000 UTC'>February 10, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;LingZihuan

1. go基础:数据类型,以及控制结构

go最近很火啊,自带高并发,内置网络模块强大,作为后端工程师一枚,自然也要学起来! go 的基础部分跟我们之前学过的大部分语言是都是十分相似的,上手十分简单。 第一个go程序 第一个程序大都是hello嘛,向新世界打个招呼 :) import fmt func main(){ fmt.Println("hello golang!") } 数据类型以及变量声明的方式 变量声明的方式 // var 变量名 类型 = 表达式 var num int = 1 // 也可以声明变量,但是不赋值 var num int // 这样的默认值就是int的默认值 0 // 可以直接赋值并且声明类型 num := 1 // 可以实现多值定义 a, b, c := 1, 2, "hello" var ( a = 1 b = 2 c = "hello" ) 常量声明 常量声明,我们可以直接使用 const 关键字,不需要指定数据的类型,通常,常量我们用大写进行命名 我们指定变量的值,会自定将变量转为对应的类型 const MAX_SIZE = 10 基础类型 整型 有符号:int, int8, int16, int32, int64 无符号:uint,uint8,uint16,uint32,uint64 浮点数:float,float32, float64 布尔型:bool 字符串:string 指针 常量:使用const声明 const name = "Mike" 字符串转换 字符串转数字: strconv.Atoi("123") 数字转字符串:strconv.Itoa(123) 数字类型的强制转换: ...

<span title='2022-01-07 00:00:00 +0000 UTC'>January 7, 2022</span>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;LingZihuan