Go初始化结构体数组/切片

本文详细介绍了Go语言中结构体数组和切片的声明与初始化过程,包括使用结构体类型创建数组和切片,并展示如何初始化这些数据结构。

go语言结构体数组/切片声明和初始化


package main
 
import "fmt"
 
func main() {
 
    var s []student
    fmt.Printf("%T\n", s) //[]main.student
    fmt.Println(s) //[]
    //初始化结构体切片
    s = []student{
        {
            name: "yang",
            age:  18,
        },
    }
    fmt.Println(s) //[{yang 18}]
 
    var s2 [5]student
    fmt.Printf("%T\n", s) //[]main.student
    fmt.Println(s2) //[{ 0} { 0} { 0} { 0} { 0}] //默认值空和零
    //初始化结构体数组
    s2 = [5]student{
        {
            name: "yang",
            age:  18,
        },
    }
    fmt.Println(s2) //[{yang 18} { 0} { 0} { 0} { 0}]
 
}
 
type student struct {
    name string
    age  int
}

### 关于结构体数组切片操作与初始化Go 中,结构体数组可以通过切片操作来获取部分元素集合。以下是关于如何对结构体数组执行切片操作以及初始化的相关说明。 #### 结构体数组定义与初始化 当定义一个结构体数组时,可以直接使用复合字面量的方式进行初始化[^3]。例如: ```go type Player struct { Name string Age int Height float64 } var players = [...]Player{ {"Alice", 25, 170.5}, {"Bob", 30, 180.0}, } ``` 上述代码中,`players` 是一个固定大小的结构体数组,其中每个 `Player` 对象都已初始化完毕。 --- #### 切片操作 对于已经定义好的结构体数组,可以对其进行切片操作以提取子集。切片语法为 `a[low:high]` 或者更简单的形式如 `a[:n]` 和 `a[n:]`。下面展示了一个具体的例子: ```go package main import ( "fmt" ) type Player struct { Name string Age int Height float64 } func main() { var players = [...]Player{ {"Alice", 25, 170.5}, {"Bob", 30, 180.0}, {"Charlie", 22, 175.0}, } // 获取从索引 0 开始到索引 1 (不包括) 的切片 slice := players[:1] fmt.Printf("Slice result: %+v\n", slice) for _, player := range slice { fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", player.Name, player.Age, player.Height) } } ``` 运行以上程序会输出: ``` Slice result: [{Name:Alice Age:25 Height:170.5}] Name: Alice, Age: 25, Height: 170.50 ``` 此示例展示了如何通过 `players[:1]` 提取原数组中的第一个元素作为新的切片[^1]。 需要注意的是,切片并不复制原始数据,而只是共享同一个底层数组。因此修改切片的内容会影响原始数组的数据[^2]。 --- #### 动态创建切片 如果希望动态分配内存并初始化一个新的切片,则可以使用内置函数 `make()` 来完成这一过程。例如: ```go sliceOfPlayers := make([]Player, 2) sliceOfPlayers[0] = Player{Name: "David", Age: 28, Height: 190.0} sliceOfPlayers[1] = Player{Name: "Eve", Age: 24, Height: 165.0} fmt.Printf("Dynamically created slice: %+v\n", sliceOfPlayers) ``` 这里我们利用了 `make` 函数创建了一个长度为 2 的切片,并对其进行了赋值。 --- #### 总结 - **结构体数组** 可以像普通数组一样被定义和初始化。 - **切片操作** 能够灵活地选取所需的部分数据,其本质是对底层数组的引用。 - 如果需要动态管理数据集合,推荐使用 `make` 方法生成切片。 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值