今天就跟大家聊聊有关如何在Golang中嵌套 interface,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
什么是golang
golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,其语法与 C语言相近,但并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能。
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 = bsa := 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 mainimport ( "fmt")type Integer intfunc (a Integer)Less(b Integer) bool{ return a<b}func (a *Integer)Add(b Integer) { *a += b}type Lesser interface { Less(b Integer) bool}type LessAdder interface { Less(b Integer) bool Add(b Integer)}func main(){ fmt.Println("start ...") var inter Integer = 1 var lesser Lesser = inter isLess := lesser.Less(3) fmt.Println(lesser,"less 3 is ",isLess) var lessAdder LessAdder = &inter lessAdder.Add(3) fmt.Println("lessAdder add 3 is ",inter) //fmt.Println("lessAdder is ",*lessAdder) //该条语句不能通过编译}
第二种方法通过一个接口给另一个接口赋值,在go语言中只要两个接口拥有同样的方法列表(次序不同不要紧),那么他们就是等同的,可以相互赋值
package onetype ReadWriter interface{ Read(buf []byte)(n int,err error) Write(buf []byte)(n int,err error)}package twotype 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 = file1var file3 one.ReadWriter = file2
在go语言中,这两个接口是等价的,因为:
任何实现了one.ReadWriter接口的类,均实现了two.ReadWriter
任何one.ReadWriter的接口可以赋值给two.ReadWriter,反之亦然
在任何地方使用two.ReadWriter的接口和使用one.ReadWriter的接口没有差别
接口赋值并不是要求两个接口是等价的,如果A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A,但是反过来就不成立
看完上述内容,你们对如何在Golang中嵌套 interface有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。