irf*_*ief 1 reflection struct pointers go
我在Go中创建了一个简单的封送器,用于将文本固定到struct中,详见此处.
编组器的功能正如我所预期的那样,尽管仍然缺少一些功能.我陷入困境的是编组功能.
相关代码如下
func Marshal(obj interface{}) (str string, err error) {
...
elemsType := reflect.TypeOf(obj).Elem()
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我试图模仿json包的marshal签名.然后唯一的问题是当我试图通过值传递给编组函数时,reflect.TypeOf返回的类型与我传入它的类型不同.只有在我将指针传递给marshal函数时才能执行该函数.
这有效
user := User{"johnjohnjohn", "the", "doe", "smart", 26}
res, err := Marshal(&user)
Run Code Online (Sandbox Code Playgroud)
事实并非如此
user := User{"johnjohnjohn", "the", "doe", "smart", 26}
res, err := Marshal(user)
Run Code Online (Sandbox Code Playgroud)
有没有办法只传递值,然后在编组函数中获取struct标签?
如果您希望它处理值,请不要调用Type.Elem()反射类型.要处理它们(指针和非指针),检查它是否是指针类型,然后才调用Type.Elem():
elemsType := reflect.TypeOf(obj)
if elemsType.Kind() == reflect.Ptr {
elemsType = elemsType.Elem()
}
Run Code Online (Sandbox Code Playgroud)