我在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标签?