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

栏目: C# · 发布时间: 6年前

内容简介:-------------------- interface 接口-------------------- interface 接口 多态的应用-------------------- interface 空接口 (任务类型)

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

// 定义:
type IHumaner interface {
    SayHi()        // 接口中只能是方法声明,没有实现,没有数据字段
}

// Student ...
type Student struct {
    id     int
    name string
}

func (tmp *Student) SayHi() {
    fmt.Println("Student[%s, %d] SayHi", tmp.name, tmp.id)
}

// Teacher ...
type Teacher struct {
    addr  string
    group string
}

func (tmp *Teacher) SayHi() {
    fmt.Println("Teacher[%s, %d] SayHi", tmp.addr, tmp.group)
}

// MyStr
type MyStr string
func (tmp *MyStr) SayHi() {
    fmt.Println("MyStr[%s, %d] SayHi", *tmp)
}

func main() {
    // 定义接口类型的变量
    var i IHumaner
    
    // 只是实现了此接口的方法的类型,那么这个类型的变量(接收者类型)就可以给i赋值
    s := &Student{"loong", 666}
    i = s
    i.SayHi()
    
    t := &Teacher{"cls", "ShenZhen"}
    i = t
    i.SayHi()
    
    var str MyStr = "hello loong"
    i = &str
    i.SayHi()
    
    // Print Result
    // loong 666 ... cls ... hello loong
}

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

// 多态的应用
func WhoSayHi(i IHumaner){
    i.SayHi()
}

// 调用多态
s := &Student{"loong", 666}
t := &Teacher{"cls", "ShenZhen"}
var str MyStr = "hello loong"

WhoSayHi(s)
WhoSayHi(t)
WhoSayHi(&str)

// 创建一个切片
x := make([]IHumaner, 3)
x[0] = s
x[1] = t
x[2] = &str

for _, i := range x {
    i.SayHi()
}

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

func main() {
    // 空接口是万能类型
    type tmp interface{} = 1
    // 字符串
    tmp = "abc"
    tmp = &v2
    // .. 等等数据类型    
    
    // ***** 打印参数的内部实现就是采用的空接口
    // ftm.Println(args ...interface{})
}

-------------------- 类型断言 (类型查询)
struct Student struct {
    id      int
    name string
}

func main() {
    i := make([]interface{}, 3)
    i[0] = 1
    i[1] = "hello go"
    i[2] = Student{666, "loong"}
    
    // 类型查询
    for index, data := range i {
        // 第一个返回值,第二个返回判断结果的真假
        if value, ok := data.(int); ok == true {
                
        }
        // data.(string)      data.(Student)  都可以作为判断
    }
    
    // 同理,data.(type) 也可以作用于判断类型 return int, string, ...
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程语言实现模式

编程语言实现模式

Terence Parr / 李袁奎、尧飘海 / 华中科技大学出版社 / 2012-3-20 / 72.00元

《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出31种易于理解且常用的设计模式(每种都包括通......一起来看看 《编程语言实现模式》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具