浅谈Golang 嵌套 interface 的赋值问题
来源:脚本之家
时间:2023-01-26 10:48:53 400浏览 收藏
本篇文章向大家介绍《浅谈Golang 嵌套 interface 的赋值问题》,主要包括interface、嵌套、赋值,具有一定的参考价值,需要的朋友可以参考一下。
大家还是直接看代码吧~
package main import ( "fmt" ) func main() { s := map[string]interface{}{ "code":0, "msg":"", "data":map[string]interface{}{ "src":"", }, } s["data"].(map[string]interface{})["src"] = "abc" // 修改一个属性,类型转换为map[string]interface{} s["data"].(map[string]interface{})["new"] = "bbb" // 新增一个属性 fmt.Println(s) }
补充:Golang interface赋值与取值的实例
大家还是直接看代码吧~
bs := make(map[string]string) bs["name"] = "张三" bs["age"] = "12" var student interface{} student = bs a := student.(map[string]string) //将interface转换为map类型,如果不确定数据类型的时候可以使用类型断言,确定其类型之后再转换为相对应的类型,然后取值 fmt.Printf("学生的姓名是: \n %v", a["name"]) //结果: 张三 fmt.Printf("学生的数据是: \n %v", student)
补充:go语言学习-接口赋值的两种类型
接口赋值在go语言中分为下面两种情况:
1、将对象实例赋值给接口
在我看来go语言的接口就是c++中虚函数的声明,使用者可以根据自身使用的需要声明一个函数的集合,将需要的方法都在接口中声明,有点像c++中,子类继承父类之后,通过子类对象给父类赋值,因为父类有的方法(除私有方法)子类肯定都有,尤其是虚函数,这样比C++好的地方是go语言中不需要通过继承的方式来实现多态,不同的对象只需要将接口中的所有方法都实现即可,本质上和c++一样,实现这些接口的对象相当于子类,这个接口相当于父类,不同的地方go语言中少了继承的过程,耦合度更低。
将一个接口赋值给另一个接口(同理)
2、将对象实例赋值给接口
这要求该对象实例实现了所有该接口提供的方法,下面是代码实例:
package main import ( "fmt" ) type Integer int func (a Integer)Less(b Integer) bool{ return a第二种方法通过一个接口给另一个接口赋值,在go语言中只要两个接口拥有同样的方法列表(次序不同不要紧),那么他们就是等同的,可以相互赋值
package one type ReadWriter interface{ Read(buf []byte)(n int,err error) Write(buf []byte)(n int,err error) } package two type Istream interface{ Read(buf []byte)(n int,err error) Write(buf []byte)(n int,err error) } var file1 one.ReadWriter = new(file) var file2 two.Istream = file1 var file3 one.ReadWriter = file2在go语言中,这两个接口是等价的,因为:
1、任何实现了one.ReadWriter接口的类,均实现了two.ReadWriter
2、任何one.ReadWriter的接口可以赋值给two.ReadWriter,反之亦然
3、在任何地方使用two.ReadWriter的接口和使用one.ReadWriter的接口没有差别
接口赋值并不是要求两个接口是等价的,如果A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A,但是反过来就不成立
以上为个人经验,希望能给大家一个参考,也希望大家多多支持golang学习网。如有错误或未考虑完全的地方,望不吝赐教。
今天带大家了解了interface、嵌套、赋值的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
-
230 收藏
-
288 收藏
-
394 收藏
-
401 收藏
-
406 收藏
-
233 收藏
-
322 收藏
-
181 收藏
-
316 收藏
-
244 收藏
-
300 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习