go基础_接口断言

// interface
package main

import (
	"fmt"
)

//定义一个接口,接口名字Inter,接口的方法集有2个方法
type Inter interface {
	//声明方法
	Ping()
	Pang()
}

//方法的定义
//Ping方法的接收者(适用对象)是St类型
func (St) Ping() {
	fmt.Println("ping")
}

//Pang方法的接收者(适用对象)是*St类型
func (*St) Pang() {
	fmt.Println("pang")
}

//定义一个接口,接口名字Anter,接口嵌套了Inter接口,另外还包括一个方法String
type Anter interface {
	Inter
	String()
}

type Str string

// 定义String方法,接收者是string
func (Str) String() {
	fmt.Println("String method")
}

//定义一个struct,名字是St,里面只有1个元素string
type St struct {
	Name string
}

func main() {
	fmt.Println("Hello World!")

	//st是St类型,并做了初始化
	st := &St{"andes"}

	// 变量i是接口类型,并做了初始化,初始化为st
	var i interface{} = st

	/*接口断言,Inter是接口类型名, i绑定的实例类型st满足接口类型Inter,
	那么o的类型就是Inter,o就是i的副本*/
	o := i.(Inter)
	o.Ping()
	o.Pang()

	/*接口断言,*St是具体类型名,i绑定的实例类型st就是*St类型,
	所以赋值结果s的类型就是*St,s结果是st的副本*/
	s := i.(*St)
	fmt.Println(s.Name)

	//	/*接口断言, Anter是接口类型,i绑定的实例类型st不满足接口类型Anter,
	//	此时会出异常*/
	//	p := i.(Anter)
	//	p.Ping()
	//	p.Pang()

}

  

大道至简
原文地址:https://www.cnblogs.com/liurong07/p/10621351.html