func test(params ...interface{}) error {
if len(params) > 0 {
b, err := json.Marshal(params)
if err != nil {
return err
}
fmt.Println(b)
}
return nil
}
1
wunonglin 2021-03-03 15:42:14 +08:00
json.Marshal 不就有 err 么。。。
这是面试题还是啥? |
2
wunonglin 2021-03-03 15:43:10 +08:00
而且你这个 interface 要 for 吧?
|
5
HiShan 2021-03-03 15:50:30 +08:00 2
json 不支持的类型就会返回 error 例如 func
|
6
mauve 2021-03-03 17:07:58 +08:00
如果 params 的类型是 channel, complex, 或者 function 的话,那么这个 test 函数就会返回 error
此外,还有一些回导致 循环依赖 /循环引用 的数据结构也会导致错误 在这里查 https://pkg.go.dev/encoding/json#Marshal Channel, complex, and function values cannot be encoded in JSON. Attempting to encode such a value causes Marshal to return an UnsupportedTypeError. JSON cannot represent cyclic data structures and Marshal does not handle them. Passing cyclic structures to Marshal will result in an error. |
7
mauve 2021-03-03 17:24:10 +08:00
我试了一下如果 test 函数的入参是一组参数的话,debug 时 也是会跳到 return err 这一行,err 的类型和 入参是单个 channel/complex/function 时是一种类型的错误:*encoing/json.UnsupportedTypeError
```go func main() { ss := make(chan int) xx := make(chan int) test(ss, xx) // will return err | *encoing/json.UnsupportedTypeError } ``` |