Go面试题54

Posted by     "" on Sunday, January 19, 2020

Go面试题54

1: 下面代码有什么问题?

func (n N) value {
    n++
    fmt.Printf("v:%p, %v\n", &n, n)
}

func (n *N) pointer {
    *n++
    fmt.Printf("v:%p, %v\n",n,*n)
}
func main() {
    var a N = 25
    p := &a
    p1 := &p
    p1.value()
    p1.pointer()
}

2: 下面代码输出什么?

type N int

func (n N) test() {
    fmt.Println(n)
}

func main() {
    var n N = 10
    fmt.Println(n)

    n++
    f1 := N.test
    f1(n)

    n++

    f2 := (*N).test
    f2(&n)

}

参考答案及解析

1: 答案及解析: 编译错误:

calling method value with receiver p1 (type **N) requires explicit dereference
calling method pointer with receiver p1 (type **N) requires explicit dereference

不能使用多级指针调用方法.

2: 答案及解析: 10 11 12. 知识点: 方法表达式. 通过类型引用的方法表达式会被还原成普通函数样式,接受者是第一个参数,调用显示传参. 类型可以是T或者*T,只要目标方法存在于该类型的的方法其中就可以.
还可以直接使用方法表达式调用:

func main() {
    var n N = 10

    fmt.Println(n)

    n++
    N.test(n)

    n++
    (*N).test(&n)
}

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付