前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言中struct用法

go语言中struct用法

原创
作者头像
周辰晨
发布2024-09-26 09:11:12
1100
发布2024-09-26 09:11:12
举报
文章被收录于专栏:go语言小册

在 Go 语言中,struct 是一种复合数据类型,用于将多个相关的变量组合成一个单一的类型。以下是一些 struct 的用法案例:

基础用法

定义一个 struct 并创建实例:

代码语言:javascript
复制
gopackage main

import "fmt"

// 定义一个 Person 结构体
type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    // 创建一个 Person 实例
    person := Person{
        Name: "Alice",
        Age:  28,
        City: "Shanghai",
    }

    // 访问结构体的字段
    fmt.Println(person.Name) // 输出: Alice
    fmt.Println(person.Age)  // 输出: 28
    fmt.Println(person.City) // 输出: Shanghai
}

使用字段名初始化

在创建 struct 实例时,可以通过字段名来初始化:

代码语言:javascript
复制
gopackage main

import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    // 使用字段名初始化
    person := Person{
        Name: "Bob",
        Age:  25,
    }

    fmt.Println(person.Name) // 输出: Bob
    fmt.Println(person.Age)  // 输出: 25
    // City 将被初始化为其类型的零值,对于字符串类型是 ""
    fmt.Println(person.City) // 输出: (空字符串)
}

嵌入结构体

一个 struct 可以嵌入另一个 struct

代码语言:javascript
复制
gopackage main

import "fmt"

type Person struct {
    Name string
    Age  int
}

type Employee struct {
    Person  // 嵌入 Person 结构体
    JobTitle string
}

func main() {
    emp := Employee{
        Person: Person{
            Name: "Carol",
            Age:  35,
        },
        JobTitle: "Engineer",
    }

    fmt.Println(emp.Name)     // 输出: Carol
    fmt.Println(emp.Age)      // 输出: 35
    fmt.Println(emp.JobTitle) // 输出: Engineer
}

方法绑定

struct 类型定义方法:

代码语言:javascript
复制
gopackage main

import "fmt"

type Person struct {
    Name string
    Age  int
}

// 为 Person 类型定义一个方法
func (p Person) Introduce() string {
    return "Hello, my name is " + p.Name + " and I am " + fmt.Sprint(p.Age) + " years old."
}

func main() {
    person := Person{
        Name: "Dave",
        Age:  40,
    }

    fmt.Println(person.Introduce()) // 输出: Hello, my name is Dave and I am 40 years old.
}

使用指针接收者

定义方法时,可以使用指针作为接收者,这样可以修改原始数据:

代码语言:javascript
复制
gopackage main

import "fmt"

type Person struct {
    Name string
    Age  int
}

// 使用指针作为接收者
func (p *Person)庆生() {
    p.Age++ // 增加 Age 字段的值
}

func main() {
    person := Person{
        Name: "Eve",
        Age:  30,
    }

    fmt.Println(person.Age) // 输出: 30
    person.庆生()          // 调用方法增加年龄
    fmt.Println(person.Age) // 输出: 31
}

匿名字段

struct 中使用匿名字段:

代码语言:javascript
复制
gopackage main

import "fmt"

type Person struct {
    Name string
    Age  int
}

type Student struct {
    Person // 匿名字段
    Grade  string
}

func main() {
    student := Student{
        Person: Person{
            Name: "Frank",
            Age:  20,
        },
        Grade: "A",
    }

    fmt.Println(student.Name) // 输出: Frank
    fmt.Println(student.Age)  // 输出: 20
    fmt.Println(student.Grade) // 输出: A
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础用法
  • 使用字段名初始化
  • 嵌入结构体
  • 方法绑定
  • 使用指针接收者
  • 匿名字段
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档