Golang Go语言中 []*Struct 类型的变量应该使用哪种方式初始化?

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中 []*Struct 类型的变量应该使用哪种方式初始化?

特意去掉了 omitempty tag

为了防止出现

{
    "apps": null
}

最推荐的声明方式应该是哪一种?

package main

type App struct { Id int json:"id" Name string json:"name" }

type Apps []*App

type Domain struct { Apps Apps }

const CustomCapacity = 3

func main() { apps1 := make([]*App, 0, CustomCapacity) apps2 := make([]App, 0, CustomCapacity) apps3 := make(Apps, 0, CustomCapacity) apps4 := Apps{} apps5 := &Apps{} }


更多关于Golang Go语言中 []*Struct 类型的变量应该使用哪种方式初始化?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

type Domain struct {
Apps Apps json:"apps,omitempty"
}

更多关于Golang Go语言中 []*Struct 类型的变量应该使用哪种方式初始化?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


var domain Domain
app := APP{Id:0, Name:""}
domain.Apps := []*APP{&app} // 如果要 3 个 []*APP{&app, &app, &app}

我猜你的需求是因为前端说:空数据也要返回字段。

Projects: []ConfigK8SProject{
{Project: "dev/
", AutoUpdate: true, Cluster: “local2180”, Namespace: “dev”},
{Project: “test/esb-*”, AutoUpdate: true, Cluster: “local2180”, Namespace: “test”},
}

前三种都不会出现 { “apps”: null}

在Golang(Go语言)中,[]*Struct 类型表示一个指向结构体指针的切片。初始化这种类型的变量有几种常见的方法,具体选择哪种方式通常取决于你的具体需求和代码风格。

  1. 直接声明并初始化

    var s []*MyStruct
    s = append(s, &MyStruct{Field1: "value1", Field2: 123})
    

    这种方法首先声明一个空切片,然后使用 append 函数向切片中添加元素。

  2. 使用 make 函数

    s := make([]*MyStruct, 0) // 创建一个空的切片
    s = append(s, &MyStruct{Field1: "value1", Field2: 123})
    

    make 函数用于分配并初始化一个切片,这里指定了切片的长度(容量为0,表示动态增长)。

  3. 使用字面量初始化并赋值

    s := []*MyStruct{
        &MyStruct{Field1: "value1", Field2: 123},
        &MyStruct{Field1: "value2", Field2: 456},
    }
    

    如果初始化时已知具体元素,可以直接使用切片字面量语法。

  4. 预先分配容量的方法

    s := make([]*MyStruct, 0, 10) // 预留容量为10
    s = append(s, &MyStruct{Field1: "value1", Field2: 123})
    

    这种方式在已知大概元素数量时可以提高性能,减少内存重新分配的次数。

选择哪种方式取决于你的具体场景,但通常 make 和切片字面量是最常用的两种初始化方法。

回到顶部