Go语言零到一:结构体(go 结构体实现接口)

引言

结构体是 Go 语言中用于组合不同类型字段的复合数据类型。通过结构体,你可以定义具有相关属性的对象,从而更好地组织和管理数据。

1. 结构体定义

  • 定义结构体
    • 使用 struct 关键字来定义结构体类型。
    • 示例:
type Person struct { 
 Name string 
 Age int 
}
  • 匿名字段
    • 结构体可以包含没有名字的字段,默认使用类型名作为字段名,同一个结构体内的类型名不可重复。
    • 示例:
type Circle struct { 
 string
 float64 
}
  • 嵌入字段
    • 结构体可以嵌入其他结构体作为其字段。
    • 示例:
type Address struct { 
 Street string 
 City string 
} 

type Employee struct { 
 Person 
 Address 
}

2. 结构体实例化

  • 初始化结构体
    • 使用字面量语法来初始化结构体。
    • 示例:
p := Person{Name: "Alice", Age: 30}
  • 构造函数
    • 可以定义构造函数来创建结构体实例。
    • 示例:
func NewPerson(name string, age int) Person { 
 return Person{Name: name, Age: age} 
}

3. 访问结构体字段

  • 字段访问
    • 结构体字段可以通过点运算符来访问。
    • 示例:
fmt.Println(p.Name) // 输出 "Alice"
  • 匿名字段访问
    • 匿名字段也可以通过点运算符来访问。
    • 示例:
 c := Circle{float64: 5.0}
 c.string = "Hello world!"
 fmt.Println(c.string, c.float64) // 输出:Hello world! 5
  • 嵌入字段访问
    • 嵌入字段可以像普通字段一样访问。
    • 示例:
emp := Employee{
 Person: Person{Name: "Bob", Age: 25},
 Address: Address{
 	Street: "123 Main St",
 	City: "New York",
 },
}
fmt.Println(emp.Address.City) // 输出 "New York"

4. 方法绑定

  • 方法绑定
    • 为结构体定义方法。
    • 示例:
func (p Person) SayHello() string { 
 return "Hello, my name is " + p.Name 
}
    • 为结构体指针定义方法。
    • 示例:
func (p *Person) GetAge() int {
 return p.Age
}
  • 方法调用
    • 结构体实例可以调用其方法。
    • 示例:
fmt.Println(p.SayHello()) // 输出 "Hello, my name is Alice"

5. 示例代码

package main

import (
  "fmt"
)

type Person struct {
  Name string
  Age  int
}

func (p Person) SayHello() string {
  return "Hello, my name is " + p.Name
}

func (p *Person) GetAge() int {
  return p.Age
}

func NewPerson(name string, age int) Person {
  return Person{Name: name, Age: age}
}

func main() {
  p := Person{Name: "Alice", Age: 30}
  fmt.Println(p.Name)       // 输出 "Alice"
  fmt.Println(p.SayHello()) // 输出 "Hello, my name is Alice"
  fmt.Println(p.GetAge())   // 输出30
  
  p2 := NewPerson("Bob", 25)
  fmt.Println(p2.Name) // 输出 "Bob"
}
原文链接:,转发请注明来源!