gpt4 book ai didi

go - 无效类型断言 : cannot convert os. 接口(interface)类型 io.ReadWriter 的标准输出?

转载 作者:行者123 更新时间:2023-12-01 21:20:14 26 4
gpt4 key购买 nike

我指的是 gopl 示例代码,如下所示:

v := os.Stdout
v2 = v.(io.ReadWriter)

但是 go 1.13 会在上面报编译错误:
invalid type assertion: v.(io.ReadWriter) (non-interface type *os.File on left)

本以为只要stdout是writer,这个到ReadWriter的转换应该会触发运行时类型转换错误,但实际上报的是编译错误。

我想知道在什么情况下,类型断言/转换会在编译时失败,在什么情况下会在运行时失败?

最佳答案

您可以使用 io.ReadWriter(os.Stdout)要做到这一点,因为您已经有一个指向结构的具体指针(或者也适用于结构)。

键入断言,例如 v.(*SomeConcreteType)v 时使用实现了一些接口(interface),并且您想将其转换为具体类型(结构/指针...)。您正试图以相反的方式进行操作,这就是编译器提示非接口(interface)类型的原因。

这并不真正有意义,因为您唯一要做的就是限制您可以在 v2 上调用的方法。 .您仍然可以通过v到一个接受 io.ReadWriter 的方法在实现该接口(interface)时无需转换任何内容。

关于go - 无效类型断言 : cannot convert os. 接口(interface)类型 io.ReadWriter 的标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com