golang interface

/**
  golang interface
*/
package main

import (
	"fmt"
	_ "reflect"
)

var p = fmt.Println

type TestInterface interface {
	T() string
}

type TestStruct struct {
}

func (t TestStruct) T() string {
	return "---------------TestStruct T()--------------"
}

type TestStruct2 struct {
}

func (t *TestStruct2) T() string {
	return "---------------TestStruct2 T()--------------"
}

//----------------------------------
type T interface {
	TT()
	TP()
}
type T1 struct {
}

func (this T1) TT() {
	p("T1---TT()")
}

func (this T1) TP() {
	p("T1---TP()")
}

type T2 struct {
}

func (this T2) TT() {
	p("T2---TT()")
}

func (this *T2) TP() {
	p("T1---TP()")
}

func TTT(t T) {
	t.TT()
}

//*T 是一個指針,不是一個接口
func TTP(t *T) {
	(*t).TP()
}

//--------------------------------------
/* 貌似interface 也可以像struct那樣嵌套 */

type Inter interface {
	T
	TestInterface
}

//-----------------------------------
func main() {
	t := TestStruct{}
	t.T()

	var t2 interface{} = TestStruct{}
	vt, bt := t2.(TestInterface)
	p(vt, bt)
	var tt interface{} = new(TestStruct)
	v1, e1 := tt.(TestInterface)
	p(v1, e1)
	p("-------------------------")
	var t3 interface{} = 5
	v0, e0 := t3.(int)
	p(v0, e0)
	v, e := t3.(int64)
	p(v, e)
	// 點操作的變量必須是個interface{}
	// 這個配合 switch 用很好用!
	p("---------------------------------")
	it := T1{}
	it2 := T2{}
	TTT(it)
	//TTT(it2) it2不少個指針  從struct T2看  是T2的指針實現了這個T的藉口
	TTT(&it)
	TTT(&it2)
	//不知道是否是實現了接口 就像下面這樣
	var xx interface{} = T1{}
	xxv, xxb := xx.(T)
	p(xxv, xxb)
	var xx2 interface{} = T2{}
	xxv2, xxb2 := xx2.(T)
	p(xxv2, xxb2)
	var xx3 interface{} = new(T2)
	xxv3, xxb3 := xx3.(T)
	p(xxv3, xxb3)
	var xx4 interface{} = &T2{}
	xxv4, xxb4 := xx4.(T)
	p(xxv4, xxb4)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章