GO接口小记
发布时间:2022-02-01 编辑:jiaochengji.com
教程集为您提供GO接口小记等资源,欢迎您收藏本站,我们将为您提供最新的GO接口小记资源
Go语言中,任何类型都是空接口类型的实现类型。
声明:
类型实例 := new(某实现接口的类型) // 或者 `var 类型实例 接口类型`,然后`类型实例 = new(某实现接口的类型)`
调用:
类型实例.接口方法()
某类型实现接口方法:
func (某类型) 方法名() {
方法内容
}
<pre><code class="language-plain">func (d *D) click() { fmt.Println("knock, ", d.Age) }</code></pre>
重新回顾之后,其实是把类型new出来的实例(返回值是指针),赋值给接口(不赋值也可以),然后调用接口的方法。
直接 `var a 某个接口类型` 的话,得到的a的类型是nil
cc type is <nil>
必须接口方法全部实现才可以赋值,否则编译会报错缺少某些方法
<pre><code class="language-plain">package main
import "fmt"
type Human struct {
name string
age int
phone string
}
type Student struct {
Human //匿名字段
school string
loan float32
}
type Employee struct {
Human //匿名字段
company string
money float32
}
//Human实现SayHi方法
func (h Human) SayHi() {
fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}
//Human实现Sing方法
func (h Human) Sing(lyrics string) {
fmt.Println("La la la la...", lyrics)
}
//Employee重载Human的SayHi方法
func (e Employee) SayHi() {
fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,
e.company, e.phone)
}
// Interface Men被Human,Student和Employee实现
// 因为这三个类型都实现了这两个方法
type Men interface {
SayHi()
Sing(lyrics string)
}
func main() {
mike := Student{Human{"Mike", 25, "222-222-XXX"}, "MIT", 0.00}
paul := Student{Human{"Paul", 26, "111-222-XXX"}, "Harvard", 100}
sam := Employee{Human{"Sam", 36, "444-222-XXX"}, "Golang Inc.", 1000}
tom := Employee{Human{"Tom", 37, "222-444-XXX"}, "Things Ltd.", 5000}
//定义Men类型的变量i
var i Men
//i能存储Student
i = mike
fmt.Println("This is Mike, a Student:")
i.SayHi()
i.Sing("November rain")
//i也能存储Employee
i = tom
fmt.Println("This is tom, an Employee:")
i.SayHi()
i.Sing("Born to be wild")
//定义了slice Men
fmt.Println("Let's use a slice of Men and see what happens")
x := make([]Men, 3)
//这三个都是不同类型的元素,但是他们实现了interface同一个接口
x[0], x[1], x[2] = paul, sam, mike
for _, value := range x{
value.SayHi()
}
}</code></pre>
到此这篇关于“GO接口小记”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
结果如下:
<span style="color:rgb(51,51,51);font-family:Monaco;">This is Mike, a Student:</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">Hi, I am Mike you can call me on 222-222-XXX</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">La la la la... November rain</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">This is tom, an Employee:</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">Hi, I am Tom, I work at Things Ltd.. Call me on 222-444-XXX</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">La la la la... Born to be wild</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">Let's use a slice of Men and see what happens</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">Hi, I am Paul you can call me on 111-222-XXX</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">Hi, I am Sam, I work at Golang Inc.. Call me on 444-222-XXX</span>
<span style="color:rgb(51,51,51);font-family:Monaco;">Hi, I am Mike you can call me on 222-222-XXX</span>
您可能感兴趣的文章:
go语言学习笔记(十三)——接口类型
想系统学习GO语言(Golang
GoLang - Go中接口的用法
go 获取函数地址_Go语言基础--接口浅析
go run main.go 参数_Go语言入门:Hello world
go struct 成员变量后面再加个字符串是什么意思?_Go语言的学习笔记(第十章) 接口...
Go 语言到底适合干什么?
go 语言学习历程
19小接口的妙用
golang接口理解
上一篇:go语言读取配置文件(读取INI配置文件)
下一篇:Golang基础算法总结
[关闭]