0
インターフェイスがポインタによって割り当てられ、構造体オブジェクトによって割り当てられたインターフェイスに対して「割り当てできません」というエラーが発生した場合、値のアサーション結果に値を割り当てるのはなぜですか?ここでgolang型アサーション、インタフェース{}(ポインタ)とインタフェース{}(オブジェクト)の違いは何ですか?
は私のコードです:
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
'p2。(学生)'はすぐに削除される一時的なオブジェクト(コピー)の種類を生成します。それへの割り当ての目的は何ですか? – myaut
私はgolangの新しい蜂です。私は言語についての本質的ないくつかの固有のことを知らせようとしています –
Goで洞察を得たい場合:継承型の設計をやめてください。 Goはこれをサポートしておらず、あなたは自分自身を傷つけるでしょう。 – Volker