Go 语言入门指南:基础语法和常用特性解析(二)| 青训营

73 阅读3分钟

复合数据类型

前面介绍了基础数据类型,接下来我将介绍以下四种复合数据类型。

数组

1、指定元素长度并初始化

var arr1 [3]int  //长度为3,初始值为0
arr2 := [3]int{1,2,3} //长度为3

2、自动推导长度

arr3 := [...]int{1,2,3,4} //根据初始化元素数量推导

3、指定索引位置初始化

arr4 := [4]int{1 : 5, 2 : 9} //第2个元素为5,第三个为9

4、部分元素初始化

arr5 := [5]int{2,4} //前两个位置为2和4,其余位置为0

slice

slice和数组的区别

一开始这两个我一直搞不明白,后来查了一下它们的区别才知道两者的用途。

  1. 长度区别:数组是具有固定长度的数据结构,一旦创建,其长度不能改变,而切片可以根据需要动态增长或缩小。
  2. 语义区别:数组在赋值操作中传递的是整个数据副本。切片是对数组的引用,赋值或传递切片时只传递指向底层数组的引用,并不进行数据复制。
  3. 长度和容量:数组的长度在创建时被指定,不可更改。切片有长度和容量两个概念,长度是切片当前包含的元素个数,容量是从切片的开始位置到底层数组末尾的元素个数,切片长度可以小于容量。
  4. 声明:数组声明需要指明长度,而切片不需要指明长度。

slice的创建

//slice可以用切片表达式来创建,也可以用make函数创建
arr := [5]int{1, 2, 3, 4, 5}
slice1 := arr[1:4]   // 创建一个从索引1到3的切片,包含元素[2, 3, 4]
slice2 := make([]int, 3, 5) // 创建一个长度为3、容量为5的切片

slice的遍历

slice := []int{1, 2, 3}
for index, value := range slice {
    fmt.Printf("Index: %d, Value: %d\n", index, value)
}

常与slice一起使用的函数

  1. append:将元素追加到切片的末尾,如果切片容量不足,会创建一个新的底层数组并复制数据。slice = append(slice, 4, 5)
  2. len:返回切片中元素的个数。length := len(slice)
  3. cap: 返回切片的容量,即从切片的开始位置到底层数组末尾的元素个数。 capacity := cap(slice)
  4. make:创建一个指定类型、长度和容量的切片。slice := make([]int, 3, 5)

map

map是一种用于存储键值对的集合型数据结构,类似于python的字典。这里介绍一下基本内容

创建和初始化 map

// 使用 make 函数创建
map map1 := make(map[string]int) 
// 使用字面值初始化 
map ages := map[string]int{ "AA": 25, "BB": 30, }、

map操作

// 增加键值对
map1["CC"] = 28
// 修改值
ages["AA"] = 26 
// 删除键值对
delete(ages, "BB") 
// 查询值,检查键是否存在 
age, exists := ages["AA"]

结构体

定义结构体

type Person struct {
    Name string
    Age int
}

创建结构体实例

person := Person{
//记得后面有', '
    Name: "John", 
    Age: 30, 
}

函数

函数声明

在Go语言中,函数的定义遵循以下模板:

func 函数名(参数列表) 返回值类型 {
    // 函数体
    // 可以包含一系列语句和操作
    return returnValue // 如果有返回值,使用 return 语句返回
}

多返回值函数

go语言中函数返回值可以为多个,其他语言函数只能返回一个值,有的时候需要返回多个值就很不方便,go语言很好的解决了这个问题

func d(a int, b int) (int, int) { 
    return a , b
}

匿名函数

func main() { 
    add := func(a, b int) int {
        return a + b 
    } 
    result := add(3, 5)
    // 调用匿名函数 
}

函数作为参数

go语言函数也可以作为参数
func operate(a int, b int, operation func(int, int) int) int {
    return operation(a, b) 
} 
func add(a int, b int) int { 
    return a + b 
} 
result := operate(3, 5, add)
// 调用 operate 函数,并将 add 函数作为参数传递