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, ...
}

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

查看所有标签

猜你喜欢:

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

程序员的算法趣题

程序员的算法趣题

[ 日] 增井敏克 / 绝 云 / 人民邮电出版社 / 2017-7 / 55.00元

本书是一本解谜式的趣味算法书,从实际应用出发,通过趣味谜题的解谜过程,引导读者在愉悦中提升思维能力、掌握算法精髓。此外,本书作者在谜题解答上,通过算法的关键原理讲解,从思维细节入手,发掘启发性算法新解,并辅以Ruby、JavaScript等不同语言编写的源代码示例,使读者在算法思维与编程实践的分合之间,切实提高编程能力。 本书适合已经学习过排序、搜索等知名算法,并想要学习更多有趣算法以提升编程技巧......一起来看看 《程序员的算法趣题》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具