/**
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)
}
golang interface
最新推荐文章于 2024-06-23 20:43:49 发布