Golang Go语言中下面的函数可能返回 error 么

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中下面的函数可能返回 error 么

func test(params …interface{}) error {
if len(params) > 0 {
b, err := json.Marshal(params)
if err != nil {
return err
}
fmt.Println(b)
}

return nil

}

9 回复

json.Marshal 不就有 err 么。。。
这是面试题还是啥?

更多关于Golang Go语言中下面的函数可能返回 error 么的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


而且你这个 interface 要 for 吧?

error 会有值吗?

不用 for,就是按数组去转成 json

json 不支持的类型就会返回 error 例如 func

如果 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.

我试了一下如果 test 函数的入参是一组参数的话,debug 时 也是会跳到 return err 这一行,err 的类型和 入参是单个 channel/complex/function 时是一种类型的错误:*encoing/json.UnsupportedTypeError

go<br>func main() {<br> ss := make(chan int)<br> xx := make(chan int)<br> test(ss, xx) // will return err | *encoing/json.UnsupportedTypeError<br>}<br>

在Go语言中,函数是否可能返回error类型,取决于该函数的定义。Go语言本身是一种静态类型语言,这意味着函数的签名(包括返回类型)在编译时是固定的。

  1. 检查函数签名:要确定一个函数是否可能返回error,最直接的方法是查看该函数的定义。如果函数签名中包含error作为返回类型之一(例如func MyFunction() (int, error)),那么该函数确实可能返回error

  2. 标准库和第三方库:对于标准库和第三方库中的函数,通常可以通过查阅相关文档来了解其是否可能返回error。Go的文档系统非常完善,大多数函数都会详细说明其返回值和可能发生的错误情况。

  3. 自定义函数:对于自定义函数,开发者在定义函数时可以自由选择是否返回error。如果函数执行过程中可能遇到错误情况,通常建议返回error以便调用者能够处理这些错误。

  4. 错误处理:在Go中,错误处理通常通过返回error值来实现。调用者需要检查这些error值,并根据需要进行处理(如记录日志、重试操作或返回给上层调用者)。

综上所述,要确定一个Go语言中的函数是否可能返回error,你需要查看该函数的定义或查阅相关文档。如果函数签名中包含error作为返回类型,那么该函数确实可能返回错误。

回到顶部