-------------------- interface 接口

  1. // 定义:
  2. type IHumaner interface {
  3. SayHi() // 接口中只能是方法声明,没有实现,没有数据字段
  4. }
  5.  
  6. // Student ...
  7. type Student struct {
  8. id int
  9. name string
  10. }
  11.  
  12. func (tmp *Student) SayHi() {
  13. fmt.Println("Student[%s, %d] SayHi", tmp.name, tmp.id)
  14. }
  15.  
  16. // Teacher ...
  17. type Teacher struct {
  18. addr string
  19. group string
  20. }
  21.  
  22. func (tmp *Teacher) SayHi() {
  23. fmt.Println("Teacher[%s, %d] SayHi", tmp.addr, tmp.group)
  24. }
  25.  
  26. // MyStr
  27. type MyStr string
  28. func (tmp *MyStr) SayHi() {
  29. fmt.Println("MyStr[%s, %d] SayHi", *tmp)
  30. }
  31.  
  32. func main() {
  33. // 定义接口类型的变量
  34. var i IHumaner
  35.  
  36. // 只是实现了此接口的方法的类型,那么这个类型的变量(接收者类型)就可以给i赋值
  37. s := &Student{"loong", }
  38. i = s
  39. i.SayHi()
  40.  
  41. t := &Teacher{"cls", "ShenZhen"}
  42. i = t
  43. i.SayHi()
  44.  
  45. var str MyStr = "hello loong"
  46. i = &str
  47. i.SayHi()
  48.  
  49. // Print Result
  50. // loong 666 ... cls ... hello loong
  51. }

-------------------- interface 接口 多态的应用

  1. // 多态的应用
  2. func WhoSayHi(i IHumaner){
  3. i.SayHi()
  4. }
  5.  
  6. // 调用多态
  7. s := &Student{"loong", }
  8. t := &Teacher{"cls", "ShenZhen"}
  9. var str MyStr = "hello loong"
  10.  
  11. WhoSayHi(s)
  12. WhoSayHi(t)
  13. WhoSayHi(&str)
  14.  
  15. // 创建一个切片
  16. x := make([]IHumaner, )
  17. x[] = s
  18. x[] = t
  19. x[] = &str
  20.  
  21. for _, i := range x {
  22. i.SayHi()
  23. }

-------------------- interface 空接口 (任务类型)

  1. func main() {
  2. // 空接口是万能类型
  3. type tmp interface{} =
  4. // 字符串
  5. tmp = "abc"
  6. tmp = &v2
  7. // .. 等等数据类型
  8.  
  9. // ***** 打印参数的内部实现就是采用的空接口
  10. // ftm.Println(args ...interface{})
  11. }
  1. -------------------- 类型断言 (类型查询)
  1. struct Student struct {
  2. id int
  3. name string
  4. }
  5.  
  6. func main() {
  7. i := make([]interface{}, )
  8. i[] =
  9. i[] = "hello go"
  10. i[] = Student{, "loong"}
  11.  
  12. // 类型查询
  13. for index, data := range i {
  14. // 第一个返回值,第二个返回判断结果的真假
  15. if value, ok := data.(int); ok == true {
  16.  
  17. }
  18. // data.(string) data.(Student) 都可以作为判断
  19. }
  20.  
  21. // 同理,data.(type) 也可以作用于判断类型 return int, string, ...
  22. }
  1.  

C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 04)的更多相关文章

  1. C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 05)

    ----------------------------------------- error 使用 (异常处理) // 语法 (普通错误) import "errors" fun ...

  2. C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 06)

    ----------------------------------------- go 并发 // 注解:go 语言天生为程序并发所设计,可以说go的强项就是在cpu并发上的处理. // go 语言 ...

  3. C#/Java 程序员转GO/golang程序员笔记大全(day 01)

    前言: 整理一下学习 Go 语言的笔记,作为一名老程序,学习一名新的开发语言自然不需要像小白那样从 HelloWorld 看起. 简单整理一下 Go 的一些差异处,希望对大家学习 go 有点帮助,不正 ...

  4. C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 00)

    一.安装说明 https://studygolang.com/dl 二.环境变量 // 下载 *.msi 安装文件,部分环境变量默认配置好了. 其他配置如下描述 三.目录及项目层级关系 在系统环境变量 ...

  5. C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 03)

    go语言当中,没有 class 的概念,那么面向对象的编程思想如何展现呢,go语言中对结构体的使用 struct. package main import "fmt" type P ...

  6. C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 02)

    ------------------- 指针 go 保留的 c 语言指针的操作,同时增加了自动垃圾回收机制 var a = new(int) *a = // &a 内存地址 --------- ...

  7. PHP笔记——java程序员看懂PHP程序

    PHP笔记——java程序员看懂PHP程序   php是一种服务器端脚本语言,类型松散的语言. <?php   ?>       xml风格 <script language=”ph ...

  8. 使用 Java 开发兼容 IPv6 的网络应用程序

    根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽.因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6.对于 Java,从 ...

  9. StackOverflow程序员推荐:每个程序员都应读的30本书

    “如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语. ...

随机推荐

  1. 工作笔记——dom属性巧用

    1.获取验证码 dom: <span class="btn btn-primary">获取验证码</span> js: /** *@Author Mona ...

  2. wget 用法

    wget -r -p -np -k http://xxx.com/xxx

  3. 10 Linux Commands Every Developer Should Know

    转载:http://azer.bike/journal/10-linux-commands-every-developer-should-know/ As a software engineer, l ...

  4. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) D - Dynamic Problem Scoring

    地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 ...

  5. Redhat 7.4更新为Centos7的yum并安装docker-ce

    以下命令请在root下执行 #删除原有的yum rpm -qa|grep yum|xargs rpm -e --nodeps #install centos yum #wget http://mirr ...

  6. Eclipase .自动提示

    打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为 .abc ...

  7. 如何高效的遍历HashMap 以及对key 进行排序

    Map<Integer ,Object> map = new HashMap<Integer,Object>(); for(int i = 0; i<=100;i++){ ...

  8. HDU2189 来生一起走

    好久没发博客了,最近遇到以下奇葩错误,不明觉厉,忍不住发一篇 /*母函数,因为要求的是素数,那么先打一个素数表,所有的因子都是素数构成 但是遇到一个奇葩事,当num初值取1,结果就出不来,运行了好久 ...

  9. Android中的颜色值

    1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如: 1 2 3 public static final class color {     public static final ...

  10. 《Java程序设计》实验1实验报告

    20145318 <Java程序设计>实验1实验报告 实验题目 通过对500个数据进行操作,实现快速排序.选择排序.直接插入排序算法时间复杂度的比较:并在排序数据中快速查找某一数据,给出查 ...