【发布时间】:2022-01-06 07:06:11
【问题描述】:
我知道go中的void functions写的不说:
func foo(start int, end int) { ... }
C 中的 casting to void 的概念如何,强调没有使用返回值:
(void) printf("hello world");
go 中是否存在这个概念(或等价物)?
【问题讨论】:
-
您可以通过使用
_(空白标识符)作为分配目标来丢弃返回值。例如_, _ = fmt.Printf("hello world")(请注意,fmt.Printf返回两个值,这就是两个空白标识符的原因)。 go.dev/ref/spec#Blank_identifier -
你想用它做什么?你想解决什么问题?
-
@OrenIshShalom 不,我的意思是,如果
F返回需要显式释放的资源,则使用F()或_ = F()将导致泄漏。在这种情况下,您必须使用v := F()然后,例如,v.Release()以确保您没有泄漏资源。 -
仅当您的函数返回多个值并且您只需要其中的一个子集时,才“必须”分配给空白标识符。如果您使用的 linter 如果您忽略错误会抱怨,它也可以成为“必要的”。在这种情况下,显式忽略带有空白标识符的错误将使 linter 满意。
-
我猜反对者暗示这些问题通常由介绍性材料回答,例如"Effective Go"。 IoW 这是一个教科书问题。