1. 程式人生 > >Go中的方法集

Go中的方法集

n) per eth code byte pointer 指針 amp struct

類型*T方法集

// code_018_struct_method_set project main.go
package main

import (
    "fmt"
)

//類型*T方法集
type Person struct {
    name string
    sex  byte
    age  int
}

//指針作為接收者,引用語義
func (p *Person) SetInfoPointer() {
    (*p).name = "yoyo"
    p.sex = ‘f‘
    p.age = 22
}

//值作為接收者,值語義
func (p Person) SetInfoValue() {
    p.name = "xxx"
    p.sex = ‘m‘
    p.age = 33
}

func main() {
    //p 為指針類型
    var p *Person = &Person{"mike", ‘m‘, 18}
    p.SetInfoPointer() //func (p) SetInfoPointer()
    fmt.Println(p)

    p.SetInfoValue() //func (*p) SetInfoValue()
    fmt.Println(p)
    (*p).SetInfoValue() //func (*p) SetInfoValue()
    fmt.Println(p)
}

類型T的方法集

// code_018_struct_method_set2 project main.go
package main

import (
    "fmt"
)

//類型T方法集
type Person struct {
    name string
    sex  byte
    age  int
}

func (p *Person) SetInfoPointer() {
    (*p).name = "yoyo"
    p.sex = ‘f‘
    p.age = 22
}

func (p Person) SetInfoValue() {
    p.name = "xxx"
    p.sex = ‘m‘
    p.age = 33
}

func main() {
    //p為普通類型
    var p Person = Person{"ck_go", ‘m‘, 18}
    (&p).SetInfoPointer()
    p.SetInfoPointer()

    p.SetInfoValue()
    (&p).SetInfoValue()
    fmt.Println(p)
}

Go中的方法集