golang反射用法舉例(注冊插件)

有關golang反射的內容,網上有大量講述,請自行google——"golang反射三法則"

下面主要反射在實際中的一種應用,插件注冊與插件管理

package main

import (
    "fmt"

    "reflect"
)

type MyInterface interface {
    Test()
}

type Mytype1 struct {
    A string
    B string
}

func (m Mytype1) Test() {
    fmt.Println("test type1", m)
}

type Mytype2 struct {
    A string
    B string
}

func (m Mytype2) Test() {
    fmt.Println("test type2", m)
}

func main() {
    // testType1 testType2模擬兩個注冊的插件,實際可在各.go的init()方式實現(xiàn)
    testType1 := reflect.TypeOf((*Mytype1)(nil)).Elem()
    testType2 := reflect.TypeOf((*Mytype2)(nil)).Elem()

    types := []reflect.Type{testType1, testType2}
    fmt.Println("types:", types)

    // 模擬插件管理,統(tǒng)一調用
    var instance interface{}
    for _, testType := range types {
        instance = reflect.New(testType).Interface()
        if myinterface, ok := instance.(MyInterface); ok {
            //模擬統(tǒng)一調用
            myinterface.Test()
        }

    }

}

輸出:

types: [main.Mytype1 main.Mytype2]
test type1 { }
test type2 { }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,581評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 在我們生活的這個星球上,無論什么年齡,什么膚色的人們,無不希望自己生活得快樂喜悅,平安健康,過上金錢富足的幸福人生...
    蘭姐美式減脂倡導者閱讀 1,071評論 0 4
  • (七)談到哪兒啦?原諒我有些健忘。事實上,生活中我常常健忘。上學期,我一個月內丟掉了四五個優(yōu)盤。沒法,在同一家店買...
    皮卡丘的orchid閱讀 172評論 0 0
  • 暑假里奶奶和爸爸帶著我去上海玩了四天,我們去過蘇州的周莊,上海的迪士尼樂園、田子坊、上海外灘,還有城隍廟...
    徐雨恒閱讀 252評論 1 2