golang中struct和interface的基础使用教程
前言
本文主要给大家介绍了关于golang中struct和interface的相关内容,是属于golang的基本知识,下面话不多说了,来一起看看详细的介绍吧。
struct
struct用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套;go中的struct类型理解为类,可以定义方法,和函数定义有些许区别;struct类型是值类型。
struct定义
typeUserstruct{
Namestring
Ageint32
messstring
}
varuserUser
varuser1*User=&User{}
varuser2*User=new(User)
struct的方法
在go语言中,我们可以为自定义类型定义类型相关的方法,比如:
func(p*player)Name()string{
returnp.name
}
上面的代码为player这个自定义类型声明了一个名为Name的方法,该方法返回一个string。值得注意的是(p*player)这段代码指定了我们是为player创建方法,并将调用该方法的实例指针当作变量p传入该函数,如果没有(p*player)这段代码,这个方法就变成了一个普通的全局函数。
struct的嵌入(Embedding)
go语言中的“继承”和其他语言中的继承有很大区别,比如:
typeplayerstruct{
User
}
这是一种“继承”的写法,在go语言中这种方式叫做“嵌入”(embed),此时player类型就拥有了User类型的Name等变量
struct的tag
这种方式主要是用在xml,json和struct间相互转换,非常方便直观,比如接口给的参数一般是json传过来,但是内部我们要转为struct再进行处理。
例子:
import"encoding/json"
typeUserstruct{
Namestring`json:"userName"`
Ageint`json:"userAge"`
}
funcmain(){
varuserUser
user.Name="nick"
user.Age=18
conJson,_:=json.Marshal(user)
fmt.Println(string(conJson))//{"userName":"nick","userAge":0}
}
interface
golang不支持完整的面向对象思想,它没有继承,多态则完全依赖接口实现。golang只能模拟继承,其本质是组合,只不过golang语言为我们提供了一些语法糖使其看起来达到了继承的效果。Golang中的接口,不需要显示的实现。Interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,golang中没有implement类似的关键字;如果一个变量含有了一个interface类型的多个方法,那么这个变量就实现了多个接口;如果一个变量只含有了一个interface的方部分方法,那么这个变量没有实现这个接口。
interface的定义
interface类型默认是一个指针。
例子:
Interface定义
typeCarinterface{
NameGet()string
Run(nint)
Stop()
}
空接口Interface{}:空接口没有任何方法,所以所有类型都实现了空接口。
varaint
varbinterface{}//空接口
b=a
interface的多态
一种事物的多种形态,都可以按照统一的接口进行操作。这种方式是用的最多的,有点像c++中的类继承。
例子:
typeIteminterface{
Name()string
Price()float64
}
typeVegBurgerstruct{
}
func(r*VegBurger)Name()string{
return"vegburger"
}
func(r*VegBurger)Price()float64{
return1.5
}
typeChickenBurgerstruct{
}
func(r*ChickenBurger)Name()string{
return"chickenburger"
}
func(r*ChickenBurger)Price()float64{
return5.5
}
Interface嵌套
一个接口可以嵌套在另外的接口。即需要实现2个接口的方法。在下面的例子中Used就包含了Car这个接口的所有方法。
例子:
typeCarinterface{
NameGet()string
Run(nint)
Stop()
}
typeUsedinterface{
Car
Cheap()
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。