教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 GO接口小记

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 


<pre><code class="language-plain">type E interface { click() } func main() { var cc E fmt.Printf("cc type is %T\n", cc) }</code></pre>
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>
结果如下:
<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接口小记”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go语言学习笔记(十三)——接口类型
想系统学习GO语言(Golang
GoLang - Go中接口的用法
go 获取函数地址_Go语言基础--接口浅析
go run main.go 参数_Go语言入门:Hello world
go struct 成员变量后面再加个字符串是什么意思?_Go语言的学习笔记(第十章) 接口...
Go 语言到底适合干什么?
go 语言学习历程
19小接口的妙用
golang接口理解

[关闭]
~ ~