1 回答
TA贡献1810条经验 获得超5个赞
Go 没有与 C++ 的decltype
.
但是 Go 是一种静态类型语言:即使在短变量声明的情况下存在类型推断,类型在编译时也是已知的。的结果类型net.ListenUDP()
在源代码中不可见,但您可以同样轻松地查找它,例如,用鼠标将鼠标悬停在它上面需要 2 秒钟,您的 IDE 将显示签名。或者上网查。或者go doc net.ListenUDP
在终端中运行。
的签名net.ListenUDP()
是:
func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
因此,保存 5 个返回连接的数组类型是[5]*net.UDPConn
。另请注意,在 Go中使用切片比使用数组更好也更容易。
所以我建议使用切片类型[]*net.UDPConn
。如果你需要一个 slice 来保持 5 个连接,你可以像这样使用内置函数来实现它make()
:make([]*net.UDPConn, 5)
如果你真的需要在运行时动态地这样做,是的,反射可以做到这一点。这就是它的样子:
funcType := reflect.TypeOf(net.ListenUDP)
resultType := funcType.Out(0)
arrType := reflect.ArrayOf(4, resultType)
arrValue := reflect.New(arrType).Elem()
conn := &net.UDPConn{}
arrValue.Index(0).Set(reflect.ValueOf(conn))
fmt.Println(arrValue)
这将输出(在Go Playground上尝试):
[0xc00000e058 <nil> <nil> <nil>]
参见相关:在 Go 中与类型在同一行上声明多个变量
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报