教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go语言的接口案例

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 蓄势待发

[关闭]
~ ~