我有一个简单的代码: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为什么最后一行打印:“名称”而不是“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 关注
- 181 浏览
添加回答
举报
0/150
提交
取消