Interface 在Go的结构中使用接口
在试图理解围棋时,我在Interface 在Go的结构中使用接口,interface,struct,go,Interface,Struct,Go,在试图理解围棋时,我在websocket.Go(截取)中遇到了这段代码: 在Conn类型中,frameHandler单独站在那里?没有名字的接口? 稍后在代码中,他们甚至尝试检查较差的接口是否为nil: Conn(a).frameHandler == nil 我自己的猜测是,结构中的frameHandler是一个与frameHandler接口匹配的类型,并且在该类型之上将具有名称frameHandler。这是正确的吗?呵呵,总之是有趣的语言。这句话: frameHandler 大致相
websocket.Go
(截取)中遇到了这段代码:
在Conn类型中,frameHandler
单独站在那里?没有名字的接口?
稍后在代码中,他们甚至尝试检查较差的接口是否为nil:
Conn(a).frameHandler == nil
我自己的猜测是,结构中的frameHandler
是一个与frameHandler接口匹配的类型,并且在该类型之上将具有名称frameHandler
。这是正确的吗?呵呵,总之是有趣的语言。这句话:
frameHandler
大致相当于:
frameHandler frameHandler
其中,frameHandler
既是字段的名称,也是字段的类型。此外,它将frameHandler
的所有字段和方法添加到Conn
,因此如果Conn
是Conn
,则Conn.WriteClose(0)
表示Conn.frameHandler.WriteClose(0)
正如它所说:
用类型声明但没有显式字段名的字段是匿名字段(俗称嵌入式字段)。此类字段类型必须指定为类型名称T
或指向非接口类型名称*T
的指针,并且T
本身可能不是指针类型。非限定类型名用作字段名
// A struct with four anonymous fields of type T1, *T2, P.T3 and *P.T4
struct {
T1 // field name is T1
*T2 // field name is T2
P.T3 // field name is T3
*P.T4 // field name is T4
x, y int // field names are x and y
}
好吧,那就是我所怀疑的。你也能这样做吗
myInt
将等于myInt-myInt
?啊!!你的加入正好回答了我的第二个想法。谢谢你的帮助。语言当然有它有趣的方式。还要注意的是,frameHandler的方法自动也是Conn的方法。@AnschelSchaffer-Cohen:这一点很好。我的回答并不是说这两种形式是等价的,因为第一种形式比第二种形式更有效。我会考虑编辑它。
// A struct with four anonymous fields of type T1, *T2, P.T3 and *P.T4
struct {
T1 // field name is T1
*T2 // field name is T2
P.T3 // field name is T3
*P.T4 // field name is T4
x, y int // field names are x and y
}
struct {
T // conflicts with anonymous field *T and *P.T
*T // conflicts with anonymous field T and *P.T
*P.T // conflicts with anonymous field T and *T
}
// A struct corresponding to the TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers.
struct {
microsec uint64 "field 1"
serverIP6 uint64 "field 2"
process string "field 3"
}