是否可以在不提及特定類型(本例中爲SomeStruct)的情況下爲以下內容製作等效代碼?從未知類型製作指針
// takes SomeStruct{} and returns &SomeStruct{}
func MakePointerFromStruct(someStruct interface{}) interface{} {
obj := someStruct.(SomeStruct)
return interface{}(&obj)
}
我創建了一個playground
我實際的問題是,我需要轉換爲&用戶{}從會話中的一些數據(這是我從Redis的獲取和其處於形式用戶{})但代碼運行在該反序列化的值不知道任何關於它的類型,並試圖將其轉換爲接口..
問題是,用戶{}上有一個指針方法修改數據。和投射到一個接口值中的接口{}變量必須已經是指針:&用戶{}
一些代碼,使其明確:
type User struct {}
func (u *User) FillFromOauth(name string) {
u.Name = name
//...
}
type UserInterface interface {
FillFromOauth(name string)
}
func someFuncWhereCastingOccurs(userObj interface{}) {
user := userObj.(UserInterface) //
}
data := User{}
someFuncWhereCastingOccurs(data)
無法簡化該代碼? userObjPtr:= unsafe.Pointer(&userObj) structType:= reflect.TypeOf(userObj) 返回reflect.NewAt(structType,userObjPtr)。接口()(的UserInterface) – user3668351 2014-11-23 20:52:42
@ user3668351如果函數應該已經返回指針。 (* UserInterface)(unsafe.Pointer(&userObj))' – 2014-11-23 21:34:23
嗯..當我使用'*(* UserInterface)(unsafe.Pointer(&userObj)時,我得到無效的內存地址))'..看這裏請:[http://play.golang.org/p/7KhMHpf-hH](http://play.golang.org/p/7KhMHpf-hH) – user3668351 2014-11-24 06:57:48