golang接口

    golang接口

1.含义

  golang接口是一组方法的定义,也就是一组函数,只是定义了一组函数但没有具体实现它,接口是go语言实现多态的途径,我们先来简单介绍以下多态的概念,在面向对象的语言中像c++就有多态的概念,多态指用相同的变量在不同时刻来表现不同的行为,这时多态的本质,go语言的接口类型是一种抽象的类型,他不会暴露除它所代表的的对象内部值的结构和这个对象支持的基础操作的集合,他们只会展示除他们自己的方法,也就是瘦当你看到一个接口类型的值是,你不是道它是什么,唯一知道的就是可以通过它的方法来做什么。


2.接口使用


package main

import "fmt"
type addSub interface {
	add() int
}

type st struct {
	a int
	b int
}

func (s st) add() int {
	return s.a + s.b
}
func (s *st) sub() int {
	return (*s).a - (*s).b
}
func main() {
	s := st{a: 1, b: 2}
	var ad addSub = s  		//st类型赋值给接口addSub, st类型必须实现了addSub接口的所有方法
    fmt.Println(ad.add())             //调用接口addSub,打印3	
}

 当把类型a赋值给b接口,那么a必须实现了接口b的所有方法,
 go语言方法调用规则:
 (1)、类型*T可以调用类型*T和类型T的所有方法
 (2)、类型T只能调用类型T的方法集  
上代码:
package main
import "fmt"


type st struct{
        name string
        score int
}


func (this st) SayHi(){
        fmt.Println("Hi!")
}
func (this *st) Sing(){
        fmt.Println("I am a strudent")
}


type strudent interface {
        SayHi()
        Sing()
}
func main(){


        s := st{name: "tom", score: 14}
        var interf strudent = &s
//      var interf strudent = s    //失败, s不能调用*s的方法
        interf.Sing()
        interf.SayHi()
}
     在上面的代码中, var s st , s.Sing()这样调用是可以的,go的编译器会做优化处理,但如果要想改变s中的值,必须是传地址,因为go的赋值都是拷贝赋值,




3 接口嵌套接口

package main
import "fmt"


type st struct{
        name string
        score int
}


func (this st) SayHi(){
        fmt.Println("Hi!")
}
func (this st) Sing(){
        fmt.Println("I am a strudent")
}

func (this st) task() int{
        return this.score
}
type Strudent interface{
        Men
        task() int
}

type Men interface {
        SayHi()
        Sing()
}
func main(){

        var interf Strudent = st{name: "tom", score: 20}
        fmt.Println(interf.task())
        interf.Sing()
}
strudent接口嵌套men接口,那么strudent就可以调用Men的方法,

4 空接口

 空接口interface{}这个类型使用非常广泛,就行c语言中void类型,空接口没有实现任何方法,所以它可以接受任意类型,一般配合go语言的反射来获取它赋值的具体类型。
空接口的使用:
var intf interface {}
var a int 

intf = a

if _, ok := a.(int); ok {
	// do 
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值