go语言的接口案例
发布时间:2021-04-17 编辑:jiaochengji.com
教程集为您提供go语言的接口案例等资源,欢迎您收藏本站,我们将为您提供最新的go语言的接口案例资源
学习资料来自
https://www.bilibili.com/video/BV1jJ411c7s3?p=93
自定义一个接口
package main
import "fmt"
func main(){
m1 :=Mouse{"shubiao"}
testInterface(m1)
f1 := FlashDisk{"flashdisk"}
testInterface(f1)
}
//1.定义接口
type USB interface{
start()
end()
}
//2.实现类
type Mouse struct{
name string
}
type FlashDisk struct{
name string
}
func (m Mouse)start(){
fmt.Println("point start")
}
func (m Mouse)end(){
fmt.Println("point end")
}
func (m FlashDisk)start(){
fmt.Println("flash start")
}
func (m FlashDisk)end(){
fmt.Println("flash end")
}
//3、调试方法
func testInterface(usb USB ){
usb.start()
usb.end()
}
接口多态
将上述的main函数修改如下:
func main(){
m1 :=Mouse{"shubiao"}
f1 := FlashDisk{"flashdisk"}
var usb [2]USB
usb[0] = f1
testInterface(usb[0])
usb[1] = m1
testInterface(usb[1])
}
空接口的使用
package main
import "fmt"
func main(){
var a1 A =Cat{"花猫"}
test1(a1)
var a2 A =Person{"老王",12}
test2(a2)
map1 :=make( map[string]interface{} )
map1["name"]="李华"
map1["age"]=300
fmt.Println(map1)
slice := make ([]interface{},0,10)
slice = append(slice,a1,a2)
fmt.Println(slice)
}
func test1(a A){
fmt.Println(a)
}
func test2(a interface{}){
fmt.Println(a)
}
type A interface{
}
type Cat struct{
color string
}
type Person struct{
name string
age int
}
接口嵌套
package main
import "fmt"
func main() {
var cat Cat =Cat{}
var a1 A= cat
a1.test1()
var b1 B =cat
b1.test2()
var c1 C =cat
c1.test3()
}
type A interface{
test1()
}
type B interface{
test2()
}
type C interface{
A
B
test3()
}
type Cat struct{
}
func (c Cat)test1(){
fmt.Println("test1()")
}
func (c Cat)test2(){
fmt.Println("test2()")
}
func (c Cat)test3(){
fmt.Println("test3()")
}
接口断言
package main
import (
"fmt"
"math"
)
/*
接口断言:
方法1:instacne := 接口对象.(实际类型)//不安全
方法2: instance ,ok :=接口对象.(实际类型)//安全
方法3:switch instance := 接口对象.(type){
case 实际类型1:
case 实际类型2:
}
*/
func main(){
var t1 Triangle =Triangle{1,2.4,3.3}
getType2(t1)
fmt.Println(t1.area())
}
//1.定义一个接口
type Shape interface{
peri()float64
area()float64
}
type Triangle struct{
a,b,c float64
}
func (t Triangle)peri()float64{
return t.a t.b t.c
}
func (t Triangle)area()float64{
p := t.peri()/2
s := math.Sqrt(p*(p-t.a)*(p-t.b)*(p-t.c))
return s
}
type Circle struct{
radius float64
}
func (c Circle)peri()float64{
return math.Pi*c.radius*2
}
func (c Circle)area()float64{
return math.Pi*c.radius*c.radius
}
func getType(s Shape){
//断言
if ins ,ok:=s.(Triangle);ok{
fmt.Println("三角形,三边是",ins.a,ins.b,ins.c,"面积是",ins.area())
}else if ins,ok :=s.(Circle);ok{
fmt.Println("是圆形,半径是",ins.radius,"面积是",ins.area())
}else{
fmt.Println("异常")
}
}
func getType2(s Shape){
switch ins := s.(type){
case Triangle:
fmt.Println("三角形,三边是",ins.a,ins.b,ins.c,"面积是",ins.area())
case Circle:
fmt.Println("是圆形,半径是",ins.radius,"面积是",ins.area())
default:
fmt.Println("未知异常")
}
}
到此这篇关于“go语言的接口案例”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
想系统学习GO语言(Golang
go run main.go 参数_Go语言入门:Hello world
Go 语言到底适合干什么?
Go语言发展历史、核心、特性及学习路线
基于类型系统的面向对象编程语言Go
兄弟连golang神技(1)-关于 Go 语言的介绍
Go语言基础之接口(面向对象编程下)
从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
Go语言的主要特性和发展影响
Go 语言十年而立,Go2 蓄势待发
上一篇:Go基础知识积累
下一篇:GoLand、Gogland清空配置文件路径
[关闭]