[英]How can I get custom type with reflect?
定義了以下數據類型:
type Status int
type RealStatus Status
有沒有辦法通過反射從RealStatus
類型到Status
類型?
是的,如果您想使用反射從RealStatus
值中獲取Status
值,這是可能的; 您可以Value.Convert()
使用Value.Convert()
,例如:
type Status int
type RealStatus Status
rs := RealStatus(1)
st := reflect.TypeOf(Status(0))
var i interface{}
i = reflect.ValueOf(rs).Convert(st).Interface()
fmt.Printf("%T %v", i, i)
這將輸出(在Go Playground上嘗試):
main.Status 1
請注意,您只能從反射中獲取interface{}
值,因此要將其用作Status
值,您仍然需要一個類型斷言。 鑒於此,您可以首先使用簡單的類型轉換,如下例所示:
rs := RealStatus(1)
var s Status
s = Status(rs)
fmt.Printf("%T %v", s, s)
輸出相同(在Go Playground上嘗試),並且它的優點是s
具有靜態類型Status
。
不,不可能從另一種類型中獲取一種類型。 RealStatus
和Status
類型之間的唯一關系是它們共享相同的基礎類型int
。
如@icza 的回答所示,可以在這些類型的值之間進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.