欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go类型特性-学习笔记

程序员文章站 2022-06-05 17:00:05
1、组合 Go语言使用组合来完成类型的设计,设计某一类型时想要拥有其他类型的功能只需要将其他类型嵌入该类型即可。 2、接口 与其他语言不同的是,编译器会自动判断该类型是否符合某正在使用的接口,甚至不需要特定的声明『这个类型继承了某接口』,只要实现了这个接口的行为,那么编译器会判断这个类型有这个接口。 ......

1、组合

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

2、接口

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

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

注意

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

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