Go 类型、接口和指针
我有一个简单的代码:Go 类型、接口和指针,go,Go,我有一个简单的代码: 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)
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()
}
还有一大堆问题:)
谢谢你的帮助 我想——请记住,我对围棋并不十分精通——你所有问题的主要原因都与你实现
PrintName
的方式有关,即接收者(实现者)对象是指针。断言*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()
}
输出:
*main.P
*main.Namer
Name
EEEE
*main.P
*主叫
名称
EEEE
不。将其更改为
func(p)PrintName()后,
rest保持不变。