1、组合

Go语言使用组合来完成类型的设计,设计某一类型时想要拥有其他类型的功能只需要将其他类型嵌入该类型即可。

2、接口

与其他语言不同的是,编译器会自动判断该类型是否符合某正在使用的接口,甚至不需要特定的声明『这个类型继承了某接口』,只要实现了这个接口的行为,那么编译器会判断这个类型有这个接口。通俗的比较 Java『你是飞行员吗,是,可以驾驶飞机』,Go『你会驾驶飞机吗,会,可以驾驶飞机』。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

没有复杂的接口类型判断之后,我们可以更方便的使用接口(运行时会帮我们完成判断)。

注意

和普通类型不同的是,接口类型有严格的类型检查,指针接受者方法必须由指针类型的原始值调用,编译器不会把值类型自动转换为指针类型,如下:

package main

import (
	"fmt"
)

type Type1 struct {
	aa int
}

type dotest interface{
	test1()
	test2()
}

func (t *Type1) test1() {
	fmt.Println("test1");
}

func (t Type1) test2() {
	fmt.Println("test2");
}

func callfunc(ty dotest){
	ty.test1()
	ty.test2()
}

func main() {

	ty := Type1{2}
	callfunc(&ty) //必须传指针类型,否则无法执行test1方法
}

至于为什么会这样,这和golang的接口设计有关,请参照https://blog.csdn.net/D_Guco/article/details/78507999

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄