我有一個簡單的代碼:type Namer interface { PrintName()}type P struct { Name string}func (p *P) PrintName() { fmt.Printf("%s\n", p.Name)}func main() { p := P{Name: "Name"} var namers []Namer namers = append(namers, &p) fmt.Println(reflect.TypeOf(namers[0])) on := &namers[0] fmt.Println(reflect.TypeOf(on)) (*on).PrintName() (**on).Name = "EEEE" (*on).PrintName()}和一堆問題:)為什么我不能寫:append(namers, p)?&p 是指向 P 的指針,數組名稱不是指針數組為什么 TypeOf(namers[0]) 是 *P 而 TypeOf(on) 是 *Namer?沒有意義,TypeOf(&(*P))應該是**P為什么最后一行打?。骸懊Q”而不是“EEE”?感謝幫助!
3 回答

慕慕森
TA貢獻1856條經驗 獲得超17個贊
斷言*on類型為*P。例如,
package main
import (
"fmt"
"reflect"
)
type Namer interface {
PrintName()
}
type P struct {
Name string
}
func (p *P) PrintName() {
fmt.Printf("%s\n", p.Name)
}
func main() {
p := P{Name: "Name"}
var namers []Namer
namers = append(namers, &p)
fmt.Println(reflect.TypeOf(namers[0]))
on := &namers[0]
fmt.Println(reflect.TypeOf(on))
(*on).PrintName()
(*on).(*P).Name = "EEEE"
(*on).PrintName()
}
輸出:
*主.P
*main.Namer
姓名
電子電氣設備
- 3 回答
- 0 關注
- 208 瀏覽
添加回答
舉報
0/150
提交
取消