• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang中struct和interface的基础使用教程

    前言

    本文主要给大家介绍了关于golang中struct和interface的相关内容,是属于golang的基本知识,下面话不多说了,来一起看看详细的介绍吧。

    struct

    struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套;go中的struct类型理解为类,可以定义方法,和函数定义有些许区别;struct类型是值类型。

    struct定义

    type User struct {
     Name string
     Age int32
     mess string
    }
    var user User
    var user1 *User = User{}
    var user2 *User = new(User)

    struct的方法

    在go语言中,我们可以为自定义类型定义类型相关的方法,比如:

    func (p *player) Name() string{
     return p.name
    }

    上面的代码为player这个自定义类型声明了一个名为Name的方法,该方法返回一个string。值得注意的是(p *player)这段代码指定了我们是为player创建方法,并将调用该方法的实例指针当作变量p传入该函数,如果没有(p *player)这段代码,这个方法就变成了一个普通的全局函数。

    struct的嵌入(Embedding)

    go语言中的“继承”和其他语言中的继承有很大区别,比如:

    type player struct{
     User
    }

    这是一种“继承”的写法,在go语言中这种方式叫做“嵌入”(embed),此时player类型就拥有了User类型的Name等变量

    struct的tag

    这种方式主要是用在xml,json和struct间相互转换,非常方便直观,比如接口给的参数一般是json传过来,但是内部我们要转为struct再进行处理。

    例子:

    import "encoding/json"
    type User struct {
     Name string `json:"userName"`
     Age int `json:"userAge"`
    }
    func main() {
     var user User
     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定义

    type Car interface {
     NameGet() string
     Run(n int)
     Stop()
    }

    空接口 Interface{}:空接口没有任何方法,所以所有类型都实现了空接口。

    var a int
    var b interface{} //空接口
    b = a

    interface的多态

    一种事物的多种形态,都可以按照统一的接口进行操作。这种方式是用的最多的,有点像c++中的类继承。

    例子:

    type Item interface {
     Name() string
     Price() float64
    }
     
    type VegBurger struct {
    }
     
    func (r *VegBurger) Name() string{
     return "vegburger"
    }
     
    func (r *VegBurger) Price() float64{
     return 1.5
    }
     
    type ChickenBurger struct {
    }
     
    func (r *ChickenBurger) Name() string{
     return "chickenburger"
    }
     
    func (r *ChickenBurger) Price() float64{
     return 5.5
    }

    Interface嵌套

    一个接口可以嵌套在另外的接口。即需要实现2个接口的方法。在下面的例子中Used就包含了Car这个接口的所有方法。
    例子:

    type Car interface {
     NameGet() string
     Run(n int)
     Stop()
    }
    type Used interface {
     Car
     Cheap()
    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • 使用go的interface案例实现多态范式操作
    • Go语言实现类似c++中的多态功能实例
    • golang语言如何将interface转为int, string,slice,struct等类型
    • golang基础之Interface接口的使用
    • golang struct 实现 interface的方法
    • Go之interface的具体使用
    • Go语言中你不知道的Interface详解
    • golang中interface接口的深度解析
    • 浅谈Go语言多态的实现与interface使用
    上一篇:深入Golang之context的用法详解
    下一篇:golang的httpserver优雅重启方法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang中struct和interface的基础使用教程 golang,中,struct,和,interface,