繁体   English   中英

golang类型断言,interface {}(指针)和interface {}(对象)之间有什么区别?

[英]golang type assertion, what the different between interface{}(pointer) and interface{}(object)?

为什么在为由指针分配接口的类型声明结果中分配一个值,并在将其分配给由struct对象分配的接口时出现“无法分配”错误?

这是我的代码:

package main

import (
    "fmt"
)

type Person interface {
    SayHi()
}

type Student struct {
    id int
    name string
}

func (s Student) SayHi() {
    fmt.Println("hi, i am", s.name, " my id is:", s.id)
}

func main() {
    p1 := Person(&Student{id: 123, name: "William"})
    p1.SayHi()      // ok
    p1.(*Student).SayHi()  // ok here
    p1.(*Student).id = 456 // ok here
    p2 := Person(Student{id: 123, name: "William"})
    p2.SayHi()         //ok 
    p2.(Student).SayHi()  // ok here
    p2.(Student).id = 456 // error here and why?
    fmt.Println("p1:", p1, " p2:", p2)
}

https://play.golang.org/p/dwkvLzng_n

value.(typeName)的结果是具有静态类型typeName的新(副本)值。

p2.(Student).id=456将创建一个临时的Student值,对该值的任何修改都将被丢弃。 因此,该语言不允许出现此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM