分享golang的一个丑陋实现
时间:2021-04-30
来源:互联网
标签:
今天PHP爱好者给大家带来下面由golang教程栏目给大家分享golang的一个丑陋实现 ,希望对需要的朋友有所帮助!

golang的一个丑陋实现
好多些天前,我在golang实践群里问了下面代码的问题:
package main
import "fmt"
type Aer interface{
Name()string
PrintName()
}
type A struct {
}
func (a *A) Name() string {
return "a"
}
func (a *A) PrintName() {
fmt.Println(a.Name())
}
type B struct {
A
}
func (b *B) Name() string {
return "b"
}
func getAer() Aer {
return &B{}
}
func main() {
a := getAer()
a.printName()
}
这个实现中,golang输出的是a,这个实现违反了通常C++,Java,Python中会输出b的实现,由于上述几个语言的思维习惯已经形成,那么这个实现就会导致很多意想不到的事情。
昨儿个在golang实践群中,有赞的兄弟(这位兄弟知道我提的上面的问题,并说这个是golang的实现方式)就问到了,在UnmarshalJSON的时候,为何Test字段没有被赋值,并在golang中提了issue
他的代码如下:
package main
import (
"encoding/json"
"fmt"
)
type request struct {
Operations map[string]op `json:"operations"`
}
type op struct {
operation
Test string `json:"test"`
}
type operation struct {
Width int `json:"width"`
Height int `json:"height"`
}
func (o *operation) UnmarshalJSON(b []byte) error {
type xoperation operation
xo := &xoperation{Width: 500, Height: 500}
if err := json.Unmarshal(b, xo); err != nil {
return err
}
*o = operation(*xo)
return nil
}
func main() {
jsonStr := `{
"operations": {
"001": {
"test":"test",
"width": 100
}
}
}`
req := request{}
json.Unmarshal([]byte(jsonStr), &req)
fmt.Println(req)
}
这个问题的本质和我提出的那个问题一样,因为op中嵌入了operation,所以有了UnmarshalJSON,符合了json包中Unmarshaler接口,所以内部用接口去处理的时候,op是满足的,但实际处理的是operation,也就是以operation作为实体来进行UnmarshalJSON,导致了诡异的错误信息。
我以为,这是golang实现中非常丑陋的一个地方。
按照耗子哥说的,如果语言实现规则是知道的,还是容易犯错误的,那就是一个坑。
这个golang的坑,估计以后还得填。
以上就是分享golang的一个丑陋实现的详细内容,更多请关注php爱好者其它相关文章!
-
什么是无理数 常见的无理数有哪些 无理数和有理数的区别 时间:2025-11-19 -
Linux中软连接和硬链接的区别、优缺点和应用场景等 时间:2025-11-19 -
什么是Hypervisor Hypervisor虚拟机监控程序详解 时间:2025-11-19 -
numeric是什么数据类型 decimal和numeric的区别 时间:2025-11-19 -
Java中public class和class的区别 时间:2025-11-19 -
Android中Activity跳转的两种实现方法 时间:2025-11-19
今日更新
-
上单行为是什么梗梗姐姐 揭秘游戏圈爆笑名场面真相
阅读:18
-
yy歪歪漫画官方主入口-yy漫画最新首页地址
阅读:18
-
币安风控Meme币交易原因解析及应对策略
阅读:18
-
yy漫画首页入口-热门章节一键畅读
阅读:18
-
超星网络学生登录入口 超星学生通官网网页版快速登录
阅读:18
-
币安风控申诉被拒的5大关键原因及解决方案
阅读:18
-
揭秘上等马梗出处:职场人秒懂的暗号文化,3秒get社畜生存法则
阅读:18
-
《龙骑士学园》官方入口地址
阅读:18
-
126邮箱登录入口-126邮箱网页版快速登录
阅读:18
-
币安风控机制是否受交易量阈值影响解析
阅读:18










