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

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

内容简介:-------------------- 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, ...
}

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

查看所有标签

猜你喜欢:

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

Head First HTML and CSS

Head First HTML and CSS

Elisabeth Robson、Eric Freeman / O'Reilly Media / 2012-9-8 / USD 39.99

Tired of reading HTML books that only make sense after you're an expert? Then it's about time you picked up Head First HTML and really learned HTML. You want to learn HTML so you can finally create th......一起来看看 《Head First HTML and CSS》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

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

HSV CMYK互换工具