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

loongsoft · · 714 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

 

 

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:loongsoft

查看原文:C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 04)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

714 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传