golang中定義的某個(gè)interface作為函數(shù)的入?yún)r(shí)

函數(shù)的入?yún)⑹悄硞€(gè)interface,那么函數(shù)里調(diào)用interface里的方法時(shí),如果方法里有修改結(jié)構(gòu)體變量,會(huì)修改原有的變量么?

1.方法的接收器是指針,結(jié)構(gòu)體的成員變量是指針變量。變量被修改了。
2.方法的接收器是指針,結(jié)構(gòu)體的成員變量不是指針變量。變量被修改了。
3.方法的接收器不是指針,結(jié)構(gòu)體的成員變量不是指針變量。變量沒有被修改了。
4.方法的接收器不是指針,結(jié)構(gòu)體的成員變量是指針變量。變量被修改了。

也就是方法的接收器或者成員變量有一方是指針,那么原來(lái)結(jié)構(gòu)體的成員變量就會(huì)被修改。

package main

import "fmt"

type Reader interface {
    Read() int
}

type MyStruct struct {
    X, Y *int
}

func (m *MyStruct) Read() int {
    res := *m.X + *m.Y
    *m.X ++
    *m.Y ++
    return res
}

type MyStruct2 struct {
    X, Y int
}

func (m *MyStruct2) Read() int {
    res := m.X + m.Y
    m.X++
    m.Y++
    return res
}

type MyStruct3 struct {
    X, Y int
}

func (m MyStruct3) Read() int {
    res := m.X + m.Y
    m.X++
    m.Y++
    return res
}

type MyStruct4 struct {
    X, Y *int
}

func (m MyStruct4) Read() int {
    res := *m.X + *m.Y
    *m.X ++
    *m.Y ++
    return res
}

func run(r Reader) {
    fmt.Println(r.Read())
}

func main() {
    // 函數(shù)的入?yún)⑹悄硞€(gè)interface,那么函數(shù)里調(diào)用interface里的方法時(shí),如果方法里有修改結(jié)構(gòu)體變量,會(huì)修改原有的變量么?
    
    // 1.方法的接收器是指針,結(jié)構(gòu)體的成員變量是指針變量。變量被修改了。
    x, y := 3, 4
    s := &MyStruct{&x, &y}
    run(s)
    fmt.Printf("1. x:%v,y:%v\n", *s.X, *s.Y)

    // 2.方法的接收器是指針,結(jié)構(gòu)體的成員變量不是指針變量。變量被修改了。
    s2 := &MyStruct2{3, 4}
    run(s2)
    fmt.Printf("2. x:%v,y:%v\n", s2.X, s2.Y)

    // 3.方法的接收器不是指針,結(jié)構(gòu)體的成員變量不是指針變量。變量沒有被修改了。
    s3 := &MyStruct3{3, 4}
    run(s3)
    fmt.Printf("3. x:%v,y:%v\n", s3.X, s3.Y)

    // 4.方法的接收器不是指針,結(jié)構(gòu)體的成員變量是指針變量。變量被修改了。
    x1, y1 := 3, 4
    s4 := MyStruct4{&x1, &y1}
    run(s4)
    fmt.Printf("4. x:%v,y:%v\n", *s4.X, *s4.Y)

}

/**
output:

7
1. x:4,y:5
7
2. x:4,y:5
7
3. x:3,y:4
7
4. x:4,y:5


*/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容