指针与结构体

Go 教程 · 第 5 章 · 9 次浏览

Go 有指针,但没有指针运算,比 C 安全得多。结构体(struct)是组织数据的核心,配合方法实现"类"的效果。

结构体

type Student struct { Name string; Age int }。零值初始化、字面量初始化。

方法与指针接收者

func (s Student) Intro() string 是方法。指针接收者 func (s *Student) Birthday() 可以修改原值。

指针

& 取地址,* 解引用。大多数场景 Go 自动处理,传 slice/map 本身就是引用。

代码示例

package main

import "fmt"

type Student struct {
    Name string
    Age  int
}

// 值接收者:只读
func (s Student) Intro() string {
    return fmt.Sprintf("我是%s,%d岁", s.Name, s.Age)
}

// 指针接收者:可修改
func (s *Student) Birthday() {
    s.Age++
}

func main() {
    s := Student{Name: "张三", Age: 20}
    fmt.Println(s.Intro())

    s.Birthday()
    fmt.Println("过生日后:", s.Age)

    // 指针
    p := &s
    p.Age = 30
    fmt.Println("修改后:", s.Age)
}