我想执行一些额外的步骤来初始化我的实现中的数据结构UnmarshalJSON.json.Unmarshal(b, type)当然,在该实现中调用会导致堆栈溢出.
如果有一个自定义UnmarshalJSON实现,那么JSON解码器会不断尝试查找json.Unmarshal.
还有另一种方法吗?只是调用底层的默认实现而不导致这个?
例:
type MyString string
var s = "very long string"
var ms = MyString(s)
var s2 = string(s)
Run Code Online (Sandbox Code Playgroud)
是(ms或将完成)s2的完整副本?或者它们只是一个字符串结构副本(它将实际值保存在指针中)?如果我们将它传递给函数怎么办?例如:s[]byte(s)
func foo(s MyString){
...
}
foo(ms(s)) // do we copy s here?
Run Code Online (Sandbox Code Playgroud) 当我执行这个:
buf := new(bytes.Buffer)
buf.WriteString("Hello world")
fmt.Println(buf)
Run Code Online (Sandbox Code Playgroud)
它打印Hello World.
但是如果我执行这个:
var buf bytes.Buffer
buf.WriteString("Hello world")
fmt.Println(buf)
Run Code Online (Sandbox Code Playgroud)
它打印: {[72 101 108 108 111 32 119 111 114 108 100] 0 [72 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …