go 方法接受者 是指標型別和非指標型別的 區別

post200發表於2021-09-09


go 方法接受者 是指標型別和非指標型別的 區別

非指標型別

package main

import "fmt"

// 定義介面

type Car interface {

    GetName() string

    Run()

}

// 定義結構體

type Tesla struct {

    Name string

}

// 實現介面的GetName()方法

func (t Tesla) GetName() string {

    t.Name = "test"

    return t.Name

}

// 實現介面的Run()方法

func (t Tesla) Run() {

    fmt.Printf("%s is runningn", t.Name)

}

func main() {

    var c Car

    var t Tesla = Tesla{"Tesla Model S"}

    c = t  // 上面是用指標*Tesla實現了介面的方法,這裡要傳地址

    fmt.Println(c.GetName())

    c.Run()

}

test

Tesla Model S is running

指標型別

package main

import "fmt"

// 定義介面

type Car interface {

    GetName() string

    Run()

}

// 定義結構體

type Tesla struct {

    Name string

}

// 實現介面的GetName()方法

func (t *Tesla) GetName() string {

    t.Name = "test"

    return t.Name

}

// 實現介面的Run()方法

func (t *Tesla) Run() {

    fmt.Printf("%s is runningn", t.Name)

}

func main() {

    var c Car

    var t Tesla = Tesla{"Tesla Model S"}

    c = &t  // 上面是用指標*Tesla實現了介面的方法,這裡要傳地址

    fmt.Println(c.GetName())

    c.Run()

}

test

test is running

結論

傳遞指標 可以 修改 傳遞的結構體的值,在其他方法中也生效。

原來一直寫python,不瞭解指標有啥用。 用到這裡明白了一點點。

©著作權歸作者所有:來自51CTO部落格作者295631788的原創作品,如需轉載,請註明出處,否則將追究法律責任


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2819531/,如需轉載,請註明出處,否則將追究法律責任。

相關文章