go语言中的接口是什么

网友投稿 188 2024-02-03


go语言中的接口是什么

本文讲解"go语言中的接口是什么",用于解决相关问题。

golang 什么是接口?

如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。

相关推荐:golang教程

golang中的接口

1. 接口

概念:接口定义了一组方法,但是不包含这些方法的具体实现;它们是抽象的,接口不能包含变量。

接口的定义格式

type Namer interface { method1() return_type method2() return_type }

2. 一个接口的栗子

package main import "fmt" type Message interface { Send() } type user struct { name string score int } func (u *user) Send() { fmt.Println("hi", u.name, "this is your ", u.score) } func sendMessage(msg Message) { msg.Send() } func main() { u := &user{name: "roty", score: 44} sendMessage(&u) }

Golang 中的 interface 让编码更灵活、易扩展,使得 Go 拥有了面向对象多态的特性。

在此我们记住三点就够了:

● 方法声明的集合

● 任何类型的对象实现了在接口中声明的全部方法,则表明该类型实现了对应接口。

● 可以作为一种数据类型,实现了该接口的任何对象都可以给对应的接口类型变量赋值。

结合例子去理解上述三点:

package main import "fmt" import "math" // 几何图形的接口(interface) type geometry interface { area() float64 perim() float64 } // rect 和 circle 实现 geometry 接口 type rect struct { width, height float64 } type circle struct { radius float64 } // 实现了接口中声明的所有方法即实现了该接口,这里 rects 实现了 geometry 接口 func (r rect) area() float64 { return r.width * r.height } func (r rect) perim() float64 { return 2*r.width + 2*r.height } // circles 实现 geometry 接口 func (c circle) area() float64 { return math.Pi * c.radius * c.radius } func (c circle) perim() float64 { return 2 * math.Pi * c.radius } // 定义的接口可以作为一种数据类型,当一个变量的类型为一个接口类型时,这个变量可以调用接口中定义的方法。 // 这里定义一个函数,接收一个类型为 geometry 的参数变量 func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } func main() { r := rect{width: 3, height: 4} c := circle{radius: 5} // The circle and rect struct types both implement the geometry interface so we can use instances of these structs as arguments to measure. // rect 和 circle 结构类型都实现了 geometry 接口,所以我们能够把它们的对象作为参数传给 measure 函数 // 在 measure 函数内部,参数对象调用了所属类型实现的接口方法。 measure(r) measure(c) }

一种类型只要实现接口声明的方法就算实现了接口,同样一种类型能同时支持实现多个接口了,一个接口也能被多种类型实现。如果一种类型实现了某个接口,那么这种类型的对象能够赋值给这个接口类型的变量。

package main import "fmt" type I interface { method1() } type T struct{} func (T) method1() {} func main() { var i I = T{} fmt.Println(i) }

最后的一部分解释一下 interface{} 类型,这种类型的接口没有声明任何一个方法,俗称空接口。因为任何类型的对象都默认实现了空接口(上文提到任意类型只要实现了接口的方法就算实现了对应的接口,由于空接口没有方法,故所有类型默认都实现了空接口)在需要任意类型变量的场景下非常有用。

package main import ( "fmt" ) func PrintAll(vals []interface{}) { for _, val := range vals { fmt.Println(val) } } func main() { names := []string{"stanley", "david", "oscar"} vals := make([]interface{}, len(names)) for i, v := range names { vals[i] = v } PrintAll(vals) } // stanley // david // oscar

以上就是golang中什么是接口的详细内容,更多请关注亿速云其它相关文章!

Go编程技术

本文讲解"go语言有哪些Web框架",用于解决相关问题。Go是一门正在快速增长的编程语言,专为构建简单、快速且可靠的软件而设计。下面给大家介绍介绍几款Go语言快速开发的web框架,有一定的参考价值,有需要的朋友可以 ...


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java List接口的内容有哪些及如何使用
下一篇:go语言可不可以开发接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~