簡體   English   中英

如何使用反射獲得自定義類型?

[英]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

不,不可能從另一種類型中獲取一種類型。 RealStatusStatus類型之間的唯一關系是它們共享相同的基礎類型int

如@icza 的回答所示,可以在這些類型的值之間進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM