1. 程式人生 > >go基礎_接口斷言

go基礎_接口斷言

clas println hello () 結果 pack div 異常 world!

// 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()

}

  

go基礎_接口斷言