go interface

go语言里,interface的地位举足轻重,可谓是go语言的灵魂。下面通过两个例子说明interface的使用。

示例一

package main

import (
	"fmt"
	"strconv"
)

type sdxp struct{
	index int
	name string
}

type idriver interface{
	driver1()string
	driver2()string
}

func driver1()(string){
	fmt.Println("i am  driver1,i drive a car.")
	return "driver1"
}

func driver2()(string){
	fmt.Println("i am  driver2,i drive a traffic.")
	return "driver2"
}

func (s sdxp) driver1()(string){
	fmt.Println(s.name,"is a driver.")
	s.index = 3
	return "driver"+strconv.Itoa(s.index)
}

func (s *sdxp) driver2()(string){
	fmt.Println(s.name,"is a driver.")
	s.index = 5
	return "driver"+strconv.Itoa(s.index)
}

func Woker1(name string,num int){
	var sw sdxp
	var ssw *sdxp
	sw.index = num
	sw.name = name
	ssw = &sw
	driver1()
	driver2()
	fmt.Println("index is:",sw.index)
	sw.driver1()
	fmt.Println("index is:",sw.index)
	ssw.driver2()
	fmt.Println("index is:",sw.index)
}

func main() {
	Woker1("laowang",1)
}

这段代码展示了interface的几个实现:

18-26行、用函数实现interface;

28-32行、用接收者是副本的方法实现interface;

34-38行、用接收者是引用的方法实现interface。

运行结果打印如下:


E:\work\go\src\tinterface>main.exe
i am  driver1,i drive a car.
i am  driver2,i drive a traffic.
index is: 1
laowang is a driver.
index is: 1
laowang is a driver.
index is: 5

示例二

package main

import (
	"fmt"
	"strconv"
)

type sdxp struct{
	index int
	name string
}

type sdxh struct{
	index int
	name string
}

type iworker interface{
	driver1()string
	driver2()string
}

func (s sdxp) driver1()(string){
	fmt.Println(s.name,"is a driver,he drive a car.")
	s.index = 3
	return "driver1"+strconv.Itoa(s.index)
}

func (s sdxp) driver2()(string){
	fmt.Println(s.name,"is a driver2,he drive a traffic")
	s.index = 4
	return "driver2"+strconv.Itoa(s.index)
}

func (s *sdxh) driver1()(string){
	fmt.Println(s.name,"is a driver,he drive a car")
	s.index = 5
	return "driver1"+strconv.Itoa(s.index)
}
func (s *sdxh) driver2()(string){
	fmt.Println(s.name,"is a driver,he drive a traffic")
	s.index = 6
	return "driver2"+strconv.Itoa(s.index)
}

func Woker1(name string,num int){
	var iw1,iw2 iworker
	var dxp sdxp
	var dxh sdxh
	dxp.index = num
	dxp.name = name
	dxh.index = num
	dxh.name = name
	iw1 = dxp
	iw2 = &dxh
	iw1.driver1()
	fmt.Println("index is:",dxp.index)
	iw1.driver2()
	fmt.Println("index is:",dxp.index)
	iw2.driver1()
	fmt.Println("index is:",dxh.index)
	iw2.driver2()
	fmt.Println("index is:",dxh.index)
}

func main() {
	Woker1("laowang",1)

}

这段代码的执行结果如下:


E:\work\go\src\tinterface1>main.exe
laowang is a driver,he drive a car.
index is: 1
laowang is a driver2,he drive a traffic
index is: 1
laowang is a driver,he drive a car
index is: 5
laowang is a driver,he drive a traffic
index is: 6

对比可以发现,示例一和示例二有一定的差别,driver1和driver2的实现方式不同,这主要是因为在Worker1函数的调用方式不同。

以示例一的方式实现时,没有严格的编译检查,以示例二的方式实现,不定义任何一个driver1或driver2都会编译报错,甚至按照示例一的28-38行的方式实现也会报错。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值