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
나는 골란에서 새로운 꿀벌이에요, 언어에 대해 더 잘 알고 싶습니다. –
Go에서 통찰력을 얻고 싶다면 상속 형 디자인을 시도하지 마십시오. 이동은 이것을 지원하지 않으므로 스스로 상처를줍니다. – Volker