前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go基础入门(六)

go基础入门(六)

作者头像
大话swift
发布2019-07-19 16:44:21
3090
发布2019-07-19 16:44:21
举报
文章被收录于专栏:大话swift大话swift

上篇文章我们简易学了struct今天我们来继续深入的理解一下struct,为了更好的学些struct我们今天首选要先了解一下interface。

interface

首先在go的世界中有一个鸭子模型----走起来像鸭子,叫起来像鸭子那么他就是鸭子。接受了这个概念我们再来继续说interface:在interface的世界中有一个空的interface内部没有任何的行为只是声明了我是interface,那么按照鸭子模型理论go的世界中任何变量都天然的实现了这个空interface

在大家都接受了上面的理论之后我们来看看怎么定义一个interface

代码语言:javascript
复制
type A interface {  show()string}

上栗中我们简单的定义了一个A接口和一个函数。我们对比一下struct的声明

1 关键字为interface

2 只声明了函数不实现

3 没有func关键字

下面我们看看怎么实现一个interface

代码语言:javascript
复制
type ASub struct {  Name string}
func (asub ASub) show() string {  return asub.Name}

//实例化var aInterface A  aSub:=ASub{Name: "Jack",}  aInterface = aSub  aInterface.show()

上栗中我们直接给ASub添加两个个方法,这时候根据鸭子模型理论那么ASub就是A的子类啦

那么我们来看一下如何给我们自定的类实现自定义错误。在这个之前我们来看看go中的error是什么么?

代码语言:javascript
复制
type error interface {    Error() string}

很明显它就是今天的讲解内容之一interface,那么根据鸭子模型理论我们怎么来实现自定义struct的error呢?答案是只需要实现Error()string方法

代码语言:javascript
复制
func (aSub *ASub) Error() string {  return aSub.Name + "不能为空"}

我们只需要简单的实现即可,那么我们如何在fmt.Println(aSub)实现自定输出呢?

当然是实现String()string方法啦……

访问控制

在定义行为和成员属性时,我们有些需要内部使用不想在包外被别人访问该如何处理呢?

其实这个在go中有规定的:go规定所有的大写开头的都是公开默认被导出可包外访问的(自定的struct 全局变量 方法 属性都遵循这个规定)

到目前为止我们把go的语法基础基本都掌握啦,下面的章节就是一些理论和特性拔高的部分:Goroutines channel 以及基于共享的并发操作。希望到时候能够用简答的粒子和简短的文章给总结明白……

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档