golang 接口笔记

一、概念

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

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)
}
时间: 2024-08-27 04:24:55

golang 接口笔记的相关文章

Golang(笔记) 面向对象

package main import ( "fmt" ) //对象定义 type Rect struct{ x,y float64 width ,height float64 } //对象方法实现 func (r *Rect) Area()float64{ return r.width*r.height } //Go语言没有构造函数的概念 //对象的创建通常交由一个全局的创建函数NewXXX来命名 标识构造函数 func NewRect(x,y,width,height float6

nopCommerce 3.9 接口笔记

接口笔记 Nop.Services.Configuration ISettingService : 配置接口(查看) Nop.Services.Localization ILocalizationService:本地化资源接口(查看) ILanguageService:语言接口(查看) ILocalizedEntityService:本地化属性接口(查看) LocalizationExtensions:本地化服务扩展(查看)

Golang(笔记) 顺序编程

package main import ( "fmt" "bufio" "io" "os" "strconv" "flag" ) var infile *string=flag.String("i","unsorted.data","File contains values for sorting") var outfile *

golang学习笔记————字符串

字符串的创建 在golang中 字符串是使用双引号("")包裹住的字符序列: 字符是使用单引号('')包裹住的单一字符: 声明字符串的方式:var strvalue string 声明并创建的方式:strvalue := "This is a string!"; KeyPoint: 一旦字符串变量被初始化后,则不可单独改变该字符串序列中的某一字符:但该字符串变量可以重新被赋值: Ex:   strvalue := "abcd" fmt.Print

golang接口的使用(练习一)

在go语言中,一个类只要实现了接口要求的所有函数,我们就说这个类实现了这个接口.golang接口赋值实现方式一:将对象实例赋值给接口 package main import "fmt" //定义一个Animal接口,实现飞和跑的功能 type Animal interface { Fly() Run() } //定义一个Bird类 type Bird struct { } //通过类实现接口的函数功能 func (bird Bird) Fly() { fmt.Println("

Golang 接口与反射知识要点

目录 Golang 接口与反射知识要点 1. 接口类型变量 2. 类型断言 3. 鸭子类型 4. 反射机制 5. reflect 包 TypeOf().ValueOf() Type().Kind() Interface() 6. 反射对象的可设置性 SetXXX(), CanSet() Elem() 7. Struct 的反射 NumField(), Type.Field(i int) Value.Field(i int) 参考文档 Golang 接口与反射知识要点 这篇文章以 Go 官方经典博

Golang学习笔记(1)---go程序一般结构

Go程序是通过 package来组织的(与python的库类似) 只有package名称为main的包可以包涵main函数(同时main函数也是一个程序的入口) 一个可执行程序有且仅有一个main包 通过import关键字来引入其他非main包 通过const关键字来进行常量的定义 通过在函数体外部使用var关键字来进行全局变量的声明与赋值 通过type关键字来进行结构(struct)或接口(interface)的声明----一般(自定义)类型 通过func关键字来进行函数的声明 一般格式为:

Golang学习笔记--log包

个人站:http://www.cloudnoter.com/?p=137 一.快速使用 Golang的log包短小精悍,可以非常轻松的实现日志打印转存功能.不用多说,log支持并发操作(即协程安全-相对于JAVA中的线程安全而言),其结构定义如下: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write a

互联网世界中的C语言——我的golang学习笔记:1(基础语法快速过)

前言 学习任何知识都会有一个学习背景 最近,我们团队乃至我司整个云服务,上go的呼声越来越高!新服务已经开始用go开发,部分现有Java版的服务重构为go也只是时间问题而已,故相关技术积累势在必行!在云网络的分布式服务乃至在一切高并发,分布式后台服务中,golang都有着很大的优势. 据我对国内互联网行业的实际考察,了解,目前国内主流互联网公司都在积极投入go的怀抱…… 青云更是全栈使用了go…… 还有火的一塌糊涂的docker. 它为云而生. 它为并发而生. 还有go的安全.简洁.高效 有良好