funcmain(){var d Dog
d.test1()
d.test2()
d.test3()var a AA
var b BB
var c CC
a = d
a.test1()
b = d
b.test2()
c = d
c.test1()
c.test2()
c.test3()//要实现CC接口,需要实现AA,BB接口才能使用}type Dog struct{}func(d Dog)test1(){
fmt.Println("test1...")}func(d Dog)test2(){
fmt.Println("test2...")}func(d Dog)test3(){
fmt.Println("test3...")}type AA interface{test1()}type BB interface{test2()}type CC interface{
AA
BB
test3()}
2.接口断言
将接口转换为其它继承自该接口的结构体
funcmain(){var t1 = Triangle{a:5, b:4, c:3}
fmt.Println(t1.peri())
fmt.Println(t1.area())
fmt.Println(t1.a, t1.b, t1.c)var c1 = Circle{radius:10}
fmt.Println(c1.peri())
fmt.Println(c1.area())
fmt.Println(c1.radius)
fmt.Println("-----------------------")var s1 Shape = t1
var s2 Shape = c1
fmt.Println(s1.peri())
fmt.Println(s1.area())
fmt.Println(s2.peri())
fmt.Println(s2.area())
fmt.Println("-----------------------")TestShape(s1)TestShape(s2)TestShape(t1)TestShape(c1)
fmt.Println("------------------------")GetType(s1)GetType(s2)GetType(t1)GetType(c1)
fmt.Println("------------------------")var t2 *Triangle =&Triangle{4,3,2}
fmt.Printf("%p\n", t2)GetType(t2)
fmt.Println("------------------------")GetType2(s1)GetType2(s2)GetType2(t1)GetType2(c1)GetType2(t2)}funcGetType2(s Shape){switch ins := s.(type){case Triangle:
fmt.Println(ins.a, ins.b, ins.c)case Circle:
fmt.Println(ins.radius)case*Triangle:
fmt.Println(ins.a, ins.b, ins.c)}}funcGetType(s Shape){if ins, ok := s.(Triangle); ok {
fmt.Println("三角形")
fmt.Println(ins.a, ins.b, ins.c)}elseif ins, ok := s.(Circle); ok {
fmt.Println("圆形")
fmt.Println(ins.radius)}elseif ins, ok := s.(*Triangle); ok {
fmt.Println("*三角形")
fmt.Println(ins.c, ins.b, ins.c)
fmt.Printf("%p\n%p\n",&s, s)
fmt.Printf("%p\n", ins)}else{
fmt.Println("其它")}}funcTestShape(s Shape){
fmt.Println("周长:", s.peri(),"面积:", s.area())}type Shape interface{peri()float64area()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{return2* math.Pi * c.radius
}func(c Circle)area()float64{return math.Pi * math.Pow(c.radius,2)}
GoLang 基础语法(十)1.接口嵌套func main() { var d Dog d.test1() d.test2() d.test3() var a AA var b BB var c CC a = d a.test1() b = d b.test2() c = d c.test1() c.test2() c.test3() //要实现CC接口,需要实现AA,BB接口才能使用}type Dog struct {}func (d Dog) test