Go 在戈兰为什么我能';是否将结构用作嵌套结构类型?
以下代码(): 给出以下编译时错误:Go 在戈兰为什么我能';是否将结构用作嵌套结构类型?,go,interface,type-conversion,embedding,Go,Interface,Type Conversion,Embedding,以下代码(): 给出以下编译时错误: cannot use rw (type *bufio.ReadWriter) as type *bufio.Writer in assignment 我所期望的是使用结构作为嵌套结构类型。但是,如果我将r声明为io.Reader,这就可以了,那么我应该移到接口吗?其他类型无法分配,转到不支持扩展。返回具体类型,指向结构的指针,也是具体类型,即结构。无论是*ReadWriter还是*bufio.Writer都不是 在Go中,没有自动类型转换,不能为变量指定不
cannot use rw (type *bufio.ReadWriter) as type *bufio.Writer in assignment
我所期望的是使用结构作为嵌套结构类型。但是,如果我将
r
声明为io.Reader
,这就可以了,那么我应该移到接口吗?其他类型无法分配,转到不支持扩展。返回具体类型,指向结构的指针,也是具体类型,即结构。无论是*ReadWriter
还是*bufio.Writer
都不是
在Go中,没有自动类型转换,不能为变量指定不同具体类型的值
您有两种选择:
由于bufio.ReadWriter
嵌入了*bufio.Writer
,您只需参考它并在作业中使用它即可:
var r *bufio.Writer
r = rw.Writer
或者您可以将r
声明为一个(它是一种接口类型),以便您可以将rw
分配给它,因为rw
实现了io。Writer
:
var r io.Writer
r = rw
虽然我不认为在这种情况下创建r
特别有用,因为无论何时使用r
都可以使用rw
退房:
在以下任何情况下,x
值可分配给T
类型的变量(“x
可分配给T
”):
x
的类型与T
相同
x
的类型V
和T
具有相同的基础类型,并且V
或T
中至少有一个不是命名类型
T
是一种接口类型,x
实现T
x
是双向通道值,T
是通道类型,x
的类型V
和T
具有相同的元素类型,并且V
或T
中至少有一个不是命名类型
x
是预先声明的标识符nil
,T
是指针、函数、切片、映射、通道或接口类型
x
是一个非类型常量,可由T
类型的值表示
所有情况都不适用于您的代码,因此它是无效的赋值
当r
被声明为io.Writer
时,它是以下情况,因此它是有效的:
T
是一种接口类型,x
实现T
为什么bufio的读写器首先不是一个界面?
var r io.Writer
r = rw