一起来学GO语言7--GO语言接口interface

GO语言中的接口相比较java而言简单了许多,GO语言的接口独特的地方在于它是隐式实现的。对于一个具体的类型而言,它无需声明具体实现了哪些接口,只要它实现了接口对应的方法,那么它就实现了该接口。如果一个类型要实现一个接口,那么它必须实现接口中所有的方法。下面我们看一段代码:

// stydy project main.go
package main

import (
	"fmt"
	"strconv"
)

type River interface {
	GetName() string
	GetLength() float64
	GetLocation() string
}

type YellowRiver struct {
	Name     string
	Length   float64
	Location string
}

type YangtzeRiver struct {
	YName     string
	YLength   float64
	YLocation string
}

func (yr YellowRiver) GetName() string {
	return yr.Name
}

func (yr YellowRiver) GetLength() float64 {
	return yr.Length
}

func (yr YellowRiver) GetLocation() string {
	return yr.Location
}

func (yr YellowRiver) ToString() string {
	return yr.Name + strconv.FormatFloat(yr.Length, 'f', 3, 64) + yr.Location
}

func (YteR YangtzeRiver) GetName() string {
	return YteR.YName
}

func GetRiverInfo(r River) {
	fmt.Println(r.GetName(), r.GetLength(), r.GetLocation())
}

func main() {
	yr := YellowRiver{"黄河", 5464.0, "中国"}
	yter := YangtzeRiver{"长江", 5464.0, "中国"}
	GetRiverInfo(yr)
	fmt.Println(yter.GetName())
	//GetRiverInfo(yter)
}

上面代码中定义了两个结构体,长江和黄河,YellowRiver实现了River的所有的方法,所以调用GetRiverInfo方法是可以的,但是YangtzeRiver没有实现它所有的方法,所以调用GetRiverInfo时异常。

空接口类型:

空接口类型对类型没有任何要求,所以可以把任何值赋给它。看下面一段代码:

// client project main.go
package main

import (
	"fmt"
	"math"
)

type inter interface{}

func MyPrint(param inter) {
	fmt.Println(param)
}

func main() {
	var x interface{}
	x = 55
	x = "abc"
	x = math.Pi
	MyPrint(x)
}

类型断言,类型断言是一个作用在接口值上的操作,x.(T),x是一个接口的表达式,T是一个类型。类型断言可以判断操作数据的类型是否是指定的类型。

// client project main.go
package main

import (
	"fmt"
)

//判断参数类型
func JudgeParamType(param interface{}) string {

	if param == nil {
		return "param is nil"
	} else if _, ok := param.(int); ok {
		return "int"
	} else if _, ok := param.(float64); ok {
		return "float64"
	} else {
		return "unknown"
	}

}

func main() {
	r := JudgeParamType(32.0)
	fmt.Println(r)
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值