首页 > 作文

互联网常识:分享golang的一个丑陋实现

更新时间:2023-02-24 07:40:11 阅读: 评论:0

导读跟大家讲解下有关分享golang的一个丑陋实现,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说分享golang的一个丑陋实现,

跟大家讲解下有关分享golang的一个丑陋实现,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说分享golang的一个丑陋实现,小编也收集到了有关分享golang的一个丑陋实现的相关资料,希望大家看到了会喜欢。

下面由golang教程栏目给大家分享golang的一个丑陋实现 希望对需要的朋友有所帮助!

golang的一个丑陋实现

好多些天前我在golang实践群里问了下面代码的问题:

package mainimport "fmt"type Aer interface{ Namestring 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++JavaPython中会输出b的实现由于上述几个语言的思维习惯已经形成那么这个实现就会导致很多意想不到的事情。

昨儿个在golang实践群中有赞的兄弟(这位兄弟知道我提的上面的问题并说这个是golang的实现方式)就问到了在UnmarshalJSON的时候为何Test字段没有被赋值并在golang中提了issue

他的代码如下:

package mainimport ( "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"`}f政治大题答题技巧unc (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":"te园林工程技术st", "width": 100 } } }` req := request{} json.Unmarshal([]byte(jsonStr), &req) fmt.Println(req)}

这个问题的本质和我提出的那个问班级管理案例题一样因为op中嵌入了operation所以有了UnmarshalJSON,符合了json包中Unmarshaler接口所以内部用接口去处理的时候op是满足的但实际处理的是operation也就是以operation作为实体来进行UnmarshalJSON导致了诡异的错误信息。

我以为这是golang实现中非常丑陋的一个地方。

按照耗子哥说的如果语言实现规则是知道的空间日志伤感还是容易犯错误的那就是一个坑。

这个golang的坑估计以后还得填。

本文发布于:2023-02-24 07:40:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/167719561124439.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:互联网常识:分享golang的一个丑陋实现.doc

本文 PDF 下载地址:互联网常识:分享golang的一个丑陋实现.pdf

标签:丑陋   的是   小伙伴们   也很
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26 专利检索|