Golang接口

接口的定义

package main

import "fmt"

// 接口的定义
type Duck interface {
	//接口里面都是方法的定义
	Gaga()
	Walk()
	Swimming()
}

type psDuck struct {
	legs int
}

func (d psDuck) Gaga() {
	fmt.Println("嘎嘎~")
}

func (d psDuck) Walk() {
	fmt.Println("走路")
}

func (d psDuck) Swimming() {
	fmt.Println("游泳")
}

func main() {
	var d Duck = &psDuck{}
	d.Walk()
}

Duck中都是方法的声明,可以让任何结构体与之绑定,并实现接口中的所有方法。但是需要注意的是接口中的方法要不全部实现,要不就不能绑定结构体
这个例子是一个结构体对应实现了一个interface中的方法,还可以一个结构体实现多个interface或者多个结构体实现一个interface中方法,这些都是很常见的。可以看如下代码,是两个接口绑定一个结构体的例子

package main

import "fmt"

type MyWriter interface {
	write(s string) error
}

type MyCloser interface {
	closer() error
}

type MyWriteAndCloser struct {
}

func (receiver MyWriteAndCloser) write(s string) error {
	fmt.Println("write")
	return nil
}

func (receiver MyWriteAndCloser) closer() error {
	fmt.Println("closer")
	return nil
}

func main() {
	var myWrite MyWriter = &MyWriteAndCloser{}
	myWrite.write("asd")
	var myClose MyCloser = &MyWriteAndCloser{}
	myClose.closer()
}

在这里插入图片描述
断言

package main

import (
	"fmt"
	"strings"
)

func add(a, b interface{}) interface{} {
	switch a.(type) {
	case int:
		ai, _ := a.(int)
		bi, _ := b.(int)
		return ai + bi
	case uint32:
		ai, _ := a.(uint32)
		bi, _ := b.(uint32)
		return ai + bi
	case string:
		ai, _ := a.(string)
		bi, _ := b.(string)
		return ai + bi
	default:
		panic("not support type")
	}
}

func main() {
	a := 1
	b := 2
	fmt.Println(add(a, b))
	a1 := "zhang "
	b1 := "bo"
	fmt.Println(add(a1, b1))
	tempInterface := add(a1, b1)
	str, _ := tempInterface.(string)
	fmt.Println(strings.Split(str, " "))
}

不定参数

package main

import "fmt"

func print1(datas ...interface{}) {
	for _, value := range datas {
		fmt.Println(value)
	}
}

func main() {
	data := []interface{}{
		"zhangbo", 18, "aksj", 1,
	}
	print1(data...)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值