golang 接口笔记

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

一、概念

接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力。

Go语言中接口类型的独特之处在于它是满足隐式实现的。也就是说,我们没有必要对于给定的具体类型定义所有满足的接口类型;简单地拥有一些必需的方法就足够了。

这种设计可以让你创建一个新的接口类型满足已经存在的具体类型却不会去改变这些类型的定义;当我们使用的类型来自于不受我们控制的包时这种设计尤其有用。

二、接口的声明及使用

package main

import (
    "fmt"
)

type ICale interface {
    Sum(a, b int) int
}

type Computer struct {
}

func (this *Computer) Sum(a, b int) int {
    return a + b
}

func (this *Computer) Print() int {
    fmt.Println("ai")
}

func main() {
    fmt.Println(new(Computer).Sum(1, 2))
    var icale ICale = new(Computer)
    fmt.Println(icale.Sum(2, 3))
}

三、空接口类型:对实现它的类型没有要求,所以我们可以将任意一个值赋给空接口类型

package main

import (
    "fmt"
)

func main() {
    var v interface{}
    v = 1
    fmt.Println(v)
    v = "123"
    fmt.Println(v)
    v = true
    fmt.Println(v)
    v = map[string]int{"one": 1}
    fmt.Println(v)
}
package main

import (
    "fmt"
)

func main() {
    print(map[string]int{"one": 1})
    print(func() int { return 1 })
    print(func() int { return 1 }())
}

func print(val interface{}) {
    fmt.Println(val)
}

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

本文来自:博客园

感谢作者:loveyx

查看原文:golang 接口笔记

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

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