我主要是一名PHP開發人員,最近我開始關注Go。在PHP中,我可以做這樣的事情:是否可以在Go中動態引用包屬性?
<?php
class TestClass {
public function testMethod() {
echo "Hello!\n";
}
}
$obj = new TestClass();
$method_name = "testMethod";
$obj->{$method_name}();
?>
輸出是:Hello!
。
我知道以下不是完美的比較,因爲Go沒有類,但是我想知道是否可以在Go中使用模塊的導出屬性做類似的事情。例如這樣的事情(我知道這是無效的Go代碼):
package main
import "fmt"
func main() {
name := "Println"
fmt[name]("Hello!")
}
這是否有可能?如何能夠完成類似的事情?謝謝。
編輯:改變「模塊」,以「包」,因爲這是正確的名稱是什麼,我指的是在圍棋
我想我說錯了「module」。在Go中,我想我會指的是軟件包。 「屬性」我只是指包所公開的內容。您的解決方案有效,但是您是否知道有任何方法可以在不創建地圖的情況下執行此操作 – 6124j50n 2013-03-08 07:11:02
您的答案似乎是唯一的解決方案,找到後:https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/JWquU5kRjIA – 6124j50n 2013-03-08 07:32:18
模塊/包的Go wrt屬性有一個區別。 Go包不是任何Go類型的實例。這只是一個名稱範圍的概念。 IOW中,沒有Go變量可以容納一個包(實例/參考/ ...)以供選擇器操作數'.'使用。在源代碼中它看起來像那樣(例如'fmt.Printf'),但這只是編譯時(名稱)解析機制,在運行時沒有類比。 – zzzz 2013-03-08 08:30:46