golang中结构体初始化的语法格式


在Go语言中,结构体(struct)的初始化可以通过以下几种方式来进行:

  1. 键值对初始化(字段名明确指定):
    当结构体字段很多或者你需要只初始化部分字段时,可以采用键值对的方式来初始化结构体。每个字段名后面跟一个冒号和它的值。

    type Person struct {
        Name string
        Age  int
        City string
    }
    
    // 键值对初始化
    person := Person{
        Name: "Alice",
        Age:  25,
        // City 字段在这里未初始化,其值将是零值(对于字符串则是 "")
    }
    
    // 全部字段初始化
    person2 := Person{
        Name: "Bob",
        Age:  30,
        City: "New York",
    }
    
  2. 值列表初始化(按顺序初始化):
    如果结构体字段数量不多,并且你希望按顺序初始化所有字段,可以不使用字段名而直接列出值。

    type Point struct {
        X int
        Y int
    }
    
    // 值列表初始化
    point := Point{10, 20}
    
  3. 隐式字段名初始化(如果字段名与变量名相同):
    当外部变量名与结构体字段名相同时,可以在初始化时省略字段名。

    type User struct {
        Username string
        Password string
    }
    
    username := "user1"
    password := "password1"
    
    user := User{username, password}
    
  4. 结构体字面量与复合字面量:
    从Go 1.17开始,还可以使用结构体字面量(Composite Literals)特性,即使结构体字段名与外部变量名不同,也可以通过=:来指定字段名。

    user := User{
        Username: = username,
        Password: = password,
    }
    
  5. new() 函数初始化:
    使用 new() 函数分配内存并返回指向结构体类型的指针,此时结构体的所有字段都是它们各自的零值。

    u := new(User) // u 是 *User 类型,所有字段都为零值
    
  6. 匿名结构体初始化:
    可以在声明时直接初始化匿名结构体。

    anonymous := struct {
        Field1 string
        Field2 int
    }{"Value1", 42}
    
  7. 嵌套结构体初始化:
    如果结构体包含嵌套结构体,也可以递归地初始化它们。

    type Address struct {
        Street string
        Zip    string
    }
    
    type Person struct {
        Name    string
        Address Address
    }
    
    person := Person{
        Name: "Charlie",
        Address: Address{
            Street: "123 Main St.",
            Zip:    "12345",
        },
    }
    
posted @   guanyubo  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示