【问题标题】:golang casting to void typegolang 转换为 void 类型
【发布时间】: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 这是一个教科书问题。

标签: go casting void


【解决方案1】:

[D] 这个概念(或等价物)是否存在于 go 中?

没有。

【讨论】:

    【解决方案2】:

    Go 不支持类型转换,并且 Go 没有任何 void 类型,因此没有与您要求的功能等效的功能。

    为了记录您有意忽略返回某些内容的函数的返回值,您可以使用空白标识符,它只是丢弃该值:

    _, _ = fmt.Printf("Hello world")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2017-10-07
      • 2015-02-14
      • 2020-06-11
      相关资源
      最近更新 更多