在Go语言中,复合数据类型是由基本数据类型组合而成的更复杂的数据结构。常见的复合数据类型包括数组(Array)、切片(Slice)、映射(Map)、结构体(Struct)和接口(Interface)。以下是这些复合数据类型的常见用法总结:
1. 数组(Array)
数组是固定长度的序列,包含相同类型的元素。
声明和初始化
var arr [5]int // 声明一个包含5个整数的数组
arr := [5]int{1, 2, 3, 4, 5} // 声明并初始化
访问和修改元素
arr[0] = 10 // 修改第一个元素
fmt.Println(arr[0]) // 输出第一个元素
遍历数组
for i := 0; i < len(arr); i++ {fmt.Println(arr[i])
}
2. 切片(Slice)
切片是动态数组,可以动态增长和缩减,类似于Java的ArrayList。
声明和初始化
var slice []int // 声明一个空切片
slice := []int{1, 2, 3, 4, 5} // 声明并初始化
slice := make([]int, 5) // 使用make函数创建切片
访问和修改元素
slice[0] = 10 // 修改第一个元素
fmt.Println(slice[0]) // 输出第一个元素
追加元素
slice = append(slice, 6) // 追加元素
遍历切片
for i, v := range slice {fmt.Printf("下标: %d, 值: %d\n", i, v)
}
3. 映射(Map)
映射是一种无序的键值对集合。类似于Java的HashMap。
声明和初始化
var m map[string]int // 声明一个空映射
m := make(map[string]int) // 使用make函数创建映射
m := map[string]int{"a": 1, "b": 2} // 声明并初始化
访问和修改元素
m["a"] = 10 // 修改键为"a"的值
fmt.Println(m["a"]) // 输出键为"a"的值
删除元素
delete(m, "a") // 删除键为"a"的元素
遍历映射
for k, v := range m {fmt.Printf("键: %s, 值: %d\n", k, v)
}
4. 结构体(Struct)
结构体是一种聚合数据类型,可以包含多个不同类型的字段。
声明和初始化
type Person struct {Name stringAge int
}var p Person // 声明一个结构体变量(注意,我们这里称之为变量,而不是对象)
p := Person{Name: "张三", Age: 30} // 声明并初始化
访问和修改字段
p.Name = "李四" // 修改Name字段
fmt.Println(p.Name) // 输出Name字段
方法
func (p Person) SayHello() {fmt.Printf("你好,我是 %s\n", p.Name)
}p.SayHello() // 调用方法
5. 接口(Interface)
接口定义了一组方法的集合,任何实现了这些方法的类型都实现了该接口。
声明接口
上一篇讲过,不再赘述
type Speaker interface {Speak() string
}
实现接口
上一篇讲过,不再赘述
type Dog struct {Name string
}func (d Dog) Speak() string {return d.Name + ":旺!"
}
使用接口
这里的机制和Java和C#差不多,即接口变量可以承载实现了它的对象,也称之为上转型机制。
func main() {var s Speaker = Dog{Name: "旺财"}fmt.Println(s.Speak()) // 输出 "旺财:旺!"
}