专栏首页Golang语言社区Go语言基础:深入理解 struct 内嵌 inteface

Go语言基础:深入理解 struct 内嵌 inteface

对于 struct 内嵌 inteface 的使用,我是研究好半天才搞懂,这里记录下我疑问: 1. 如何更好的理解匿名接口 // 匿名接口可以被用作变量或者结构属性类型 type Man struct { gender interface { GetGender() string } } 上面Man类可以扩展成 type gender interface { GetGender() string } type Man struct { gender// } 代码这样写是不是好懂多了。 2. 匿名接口对象使用,为什么要采用引用的方式? // 匿名接口对象的使用 varMan := Man{&Employee{ name: "Nobody", age: 20, salary: 10000, gender: "Unknown", }} 原因是匿名接口gender的实现的接收者是一个指针,因此这里要采用引用的方式赋值。 3. 为什么Man类的初始化化可以用Employee来初始化? 我们知道Go里面规定如果我们定义了一个 interface 的变量,那么这个变量里面可以存实现这个 interface 的任意类型的对像。而 Employee 类实现了 gender 接口,而 Man 中成员有一个 gender 接口,因此 Man 可以用 Employee 来初始化。 4. 再补一个特性 内嵌接口的struct同样满足Go语言基础:method 中提到的继承和重写的特性 method继承和重写 继承:如果 struct 中的一个匿名段实现了一个 method,那么包含这个匿名段的 struct 也能调用该 method。 重写:如果 struct 中的一个匿名段实现了一个 method,包含这个匿名段的 struct 是可以重写匿名字段的方法的。

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-07-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • gRPC服务发现&负载均衡

    构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:

    李海彬
  • Golang学习笔记之Golang与Mysql交互

    Go标准库中没有数据库驱动。参见http://golang.org/s/sqldrivers获取第三方驱动。 这里选择了Go-MySQL-Driver这个实现。...

    李海彬
  • 棋牌游戏服务器架构: 详细设计(一) 内核设计

    内核的几个组件被设计成Service,也就是说这几个模块都要实现如下接口: ? 图1 IService接口 Start方法用来启动服务。 ...

    李海彬
  • linux时间相关结构体和函数整理

    一、时间类型。Linux下常用的时间类型有4个:time_t,struct timeb, struct timeval,struct timespec,cloc...

    猿人谷
  • python hashlib模块学习

    1.干嘛用的: 对字符进行加密,其实就是一个自定义的字符编码表,我们原来接触的是计算机语言0和1然后转化成字符,而hashlib就是把字符转成另一种字符,在生活...

    py3study
  • 机器人有寿命吗? | 拔刺

    举个最简单的例子,十年前流行的翻盖机,有的款型虽然现在也能用,但性能上、系统流畅度上,已经不如新出来的手机了。假若手机主人比较恋旧,手机如果出故障了,就去修理,...

    镁客网
  • Android组件前奏---App+module的启动

    一个App里面默认都有一个单例那就是Application,而组件化的过程中除了app这个壳工程的启动是我们时长需要设置一些默认的参数配置等操作,其实对于附加启...

    大话swift
  • 当Kotlin邂逅设计模式之单例模式(一)

    简述: 从这篇文章开始,我将带领大家一起来探讨一下Kotlin眼中的设计模式。说下为什么想着要开始这么一个系列文章。主要基于下面几点原因:

    bennyhuo
  • Python实现守护进程 转

    守护进程(Daemon)也称为精灵进程是一种生存期较长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启...

    双面人
  • Java Web技术经验总结(十)

    在遇到“java.lang.OutOfMemoryError”错误时,首先需要根据MAT工具确认是内存泄漏还是内存溢出。

    阿杜

扫码关注云+社区

领取腾讯云代金券