golang疑问

func main() {
    var a int =1
    var v interface{} =&a

    t:=4
    p:=v.(*int)
    p=&t
    //_=p

    //v.(*int)=&t
    fmt.Println(a)
}

疑问:

1._=p注释掉时报”p declared and not used, p不是在p=&t中使用了吗?
2.v.(*int)=&t为什么报错?

共 2 个回复


jimmykuu

  1. 这里只是给 p 赋了值,不算使用,真正的算使用要在 = 右侧,或者作为参数传入方法里面。
  2. v.(*int) 这是类型断言,不能赋值。
# 0

David

  1. 存在p里面的值或者p变量所占的空间没有被别人使用,就算是 not used。你的p = &t,如果把赋值部分去掉(同时,右边的&t没有副作用,其实也可以去掉)整个程序逻辑没有任何变化,所以p被判断为没有被使用。简单的,就如@jimmykuu 说的判断也可以。
  2. v = &t就好了,就像你之前的= &a一样
# 1