学习资料来自
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("未知异常")
}
}
参与评论
手机查看
返回顶部