本文共 3033 字,大约阅读时间需要 10 分钟。
在极早的文章中,我们深入探讨了 Go语言 的基本类型及其常见应用。次文将重点介绍 Go语言 中的复合数据类型,主要包含数组、切片、字典(map)和结构体(struct)的核心特性与使用场景。
数组(Array)是 Go 中一种固定长度的数据序列,成员具有相同的数据类型。由于其固定长度特性,数组在实际编程中使用相对较少。但理解其特性对全面掌握 Go 开发环境至关重要。
[3]int
与 [4]int
是两种不同的数组类型。0
开始,直到 len-1
结束。方式一:显式声明
var a [3]intvar q [3]int = [3]int{1, 2, 3}var r [3]int = [3]int{1, 2} // 会填充未显式指定的元素为 0
方式二:自动长度 declaration
q := [...]int{1, 2, 3}
方式三:指定索引初始化
r := [...]int{ 13: 21, 99: -1,}
切片声明与初始化
切片是 Go 中唯一的变长数组类型,成员元素具有相同的类型。其核心特性包括:
len
和 cap
函数获取。make
函数创建,参数为:make(targetType, length, capacity)
s := [...]int{1, 2, 3, 4, 5}slice1 := s[1:3] // 切片 [2, 3]slice2 := make([]int, 2)copy(slice2, slice1)
slice := []int{}slice = slice.append(4)slice = slice.append([]int{5, 6, 7}...)
a := a[1:] // 删除第一个元素a = a[n:] // 删除前n个元素a = a[:len(a)-1] // 删除最后一个元素
copy(t, s)
s := []int{1, 2, 3, 4, 5}for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] = s[j], s[i]}
字典(Map)是 Go 中的哈希表,用于存储键值对。其优势在于支持 O(1) 时间复杂度的增删查改。
make
函数创建字典:map(structName) interfaceName
if exists, ok := map[key]; ok { // 存在,进行操作}
age := make(map[string]int)age["Tony"] = 35
delete(age, "Tony")
keyVal, ok := age["Tony"]if ok { // 处理}
for key, value := range age { fmt.Printf("%s: %d\n", key, value)}
结构体(Struct)是一种将多个数据项聚合成为单个实体的数据类型。结构体的成员可通过字段访问符 (.
) 运算符访问。
type Employee struct { id int name string address string title string}
tony := Employee{ id: 3333, name: "Tony", address: "Beijing", title: "Engineer",}
type Point struct { X, Y int }type Circle struct { Center Point; Radius int }type Wheel struct { Circle; Spokes int }
func AwardAnnualRaise(e *Employee) { e.Salary = e.Salary * 105 / 100}
type Node struct { Value int; Left, Right *Node }
if a == b { // 比较成功}
%+v
格式化显示成员名称和值:type Info struct { Name string; ID int }v := Info{"Nan", 33}fmt.Printf("%+v\n", v)
JSON 是流行的数据交换格式,可通过 encoding/json
包实现编码/解码。
type Team struct { TeamID int `json:"team_id"` }
wallace := &Member{ ID: 1, Name: "Wallace", Teams: &Team{TeamID: 1, TeamName: "Team 1"}, Skills: []string{"go", "mysql", "redis"}, Description: "test",}js, err := json.Marshal(wallace)
member := &Member{}err := json.Unmarshal(data, member)if err != nil { // 处理错误}
type Member struct { Skills []string `json:"skills"`}// 初始化为空member := &Member{Skills: make([]string, 10)}
通过本文的学习,可以全面掌握 Go语言 中的数组、切片、字典和结构体的使用方法。这些复合数据类型是 Go 开发的基础能力,熟练掌握后将极大提升你的编程效率。
转载地址:http://phsyk.baihongyu.com/