• go 接口


    一、接口是什么

    接口提供了一种方式来 说明 对象的行为:如果谁能搞定这件事,它就可以用在这儿。

    接口定义了一组方法(方法集),但是这些方法不包含(实现)代码:它们没有被实现(它们是抽象的)。接口里也不能包含变量。

    格式:

    type Namer interface {
        Method1(param_list) return_type
        Method2(param_list) return_type
        ...
    }
    

      

    接口的特性:

    • 类型不需要显式声明它实现了某个接口:接口被隐式地实现。多个类型可以实现同一个接口。
    • 实现某个接口的类型(除了实现接口方法外)可以有其他的方法。
    • 一个类型可以实现多个接口。
    • 接口类型可以包含一个实例的引用, 该实例的类型实现了此接口(接口是动态类型)。

     二、例子:

    package main
    
    import "fmt"
    
    type stockPosition struct {
    	ticker string
    	sharePrice float32
    	count float32
    
    }
    
    func (s stockPosition) getValue() float32{
    	return s.sharePrice * s.count
    }
    
    type car struct {
    	make string
    	model string
    	price float32
    }
    
    func (c car) getValue() float32 {
    	return c.price
    }
    
    type valuable interface {
    	getValue() float32
    }
    
    func showValue(asset valuable){
    	fmt.Printf("Value of the asset is %f
    ", asset.getValue())
    }
    
    func main () {
    	var o valuable = stockPosition{"GOOG", 577.20, 4}
    	showValue(o)
    	o  = car{"BWM","M3", 66500}
    	showValue(o)
    }
    

      输出:

    Value of the asset is 2308.800049
    Value of the asset is 66500.000000

    接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以及如何做分离开来,使得相同接口的变量在不同的时刻表现出不同的行为,这就是多态的本质。

    三、总结调用

    在接口上调用方法时,必须有和方法定义时相同的接收者类型或者是可以从具体类型 P 直接可以辨识的:

    • 指针方法可以通过指针调用
    • 值方法可以通过值调用
    • 接收者是值的方法可以通过指针调用,因为指针会首先被解引用
    • 接收者是指针的方法不可以通过值调用,因为存储在接口中的值没有地址

    将一个值赋值给一个接口时,编译器会确保所有可能的接口方法都可以在此值上被调用,因此不正确的赋值在编译期就会失败。

  • 相关阅读:
    《演讲之禅》助你成长为一名合格程序员
    JavaScript中设置元素class的三种方法小结
    数据类型和Json格式
    JavaScript给onclick事件赋值,动态传参数实例辩错
    JSON.parse()和JSON.stringify()使用
    javascript写在<head>和<body>里的区别
    Source Insight 相关
    串口接收字符时,最后一个字符延时发送
    嵌入式编程中调试问题全记录
    新版数采仪开发问题全记录
  • 原文地址:https://www.cnblogs.com/liubiaos/p/9376415.html
Copyright © 2020-2023  润新知