2014-06-19 76 views
-1

我想在運行時操作結構。Golang相當於蟒蛇__getattr __()或__call __()

例如,我有一個結構:

type Item struct { 
SomeField string 
} 

是否有可能在運行時添加字段?或尚未定義的訪問屬性。就像蟒蛇__getattr__() or __call__(),所以我可以動態控制訪問的字段/方法。

E.g.做一些像 Item.DynamicField or Item.DynamicMethod()其中我不知道確切的字段或將被訪問/調用的方法,所以我不能靜態定義它。

也許我錯過了反射包中的某些東西?

謝謝。

+1

您錯過了靜態類型語言的要點。 – OneOfOne

回答

2

https://github.com/oleiade/reflections

反射包的目的是爲了讓開發者的生活更輕鬆 當談到在運行時內省結構。它的API靈感來自python語言的 (getattr,setattr, hasattr ...),並提供了 對結構字段和標籤的簡化訪問。

7

是否可以在運行時添加字段?或尚未定義的訪問屬性。

否。Go是一種靜態定義類型的編譯語言。如果您想動態添加屬性,則可能需要map

+0

好的,在編譯時? – Bndr

+4

這是什麼意思?當然,您可以預處理您的代碼以擴充它,Go包含靜態分析和轉換工具,但很明顯,您正面臨[xy問題](http://meta.stackexchange.com/questions/66377/what-是最XY-問題)。 –

+0

如果OP只想包裝對成員的訪問(例如用於日誌記錄或訪問控制),則可以使用反射來完成。雖然我強烈反對它。 –