go - 接口类型和值可以是不实现接口及其值的类型吗?
问题描述
这是我正在查看的代码和描述的链接:https ://tour.golang.org/methods/11
我将 *T 类型的方法 M 更改为 T,即从指针接收器更改为值接收器,如下所示。
package main
import (
"fmt"
"math"
)
type I interface {
M()
}
type T struct {
S string
}
func (t T) M() {
fmt.Println(t.S)
}
type F float64
func (f F) M() {
fmt.Println(f)
}
func main() {
var i I
i = &T{"Hello"}
describe(i)
i.M()
i = F(math.Pi)
describe(i)
i.M()
}
func describe(i I) {
fmt.Printf("(%v, %T)\n", i, i)
}
但是,上面的更改给了我相同的结果,因为它仍然是一个指针接收器。
(&{Hello}, *main.T)
Hello
(3.141592653589793, main.F)
3.141592653589793
我不确定我是否理解了这个概念。根据我的理解,由于接口变量我得到了一个指向 struct T 实例的指针,该接口变量的类型应该是指向 struct T 的指针,并且由于指向 struct T 的指针没有实现方法 M,它会导致恐慌。
解决方案
推荐阅读
- python - Scrapy Request 以某种方式切断 URL
- electron - 电子 - 未在渲染器上注册的事件
- c++ - 文字双精度到浮点转换是否等于浮点文字?
- php - 将两个 eloquent 集合合并为一个集合并分页
- amazon-web-services - 适用于 Kafka 的 Amazon Managed Streaming - MSK 功能和性能
- go - 如何仅使用 4 位表示 Go 中的数字?
- javascript - 数据表中的复杂计算列总和
- ruby-on-rails - 如何为以下代码编写 RSpec 测试
- python - 将字符串数据移动到值的数量是任意的新列中
- odoo - 在 Odoo 中有一种方法可以控制在树视图中单击一行时显示的表单视图