go语言中struct用法

2024-09-26 09:11:12 浏览数 (2)

在 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
}
go

0 人点赞