C++有decltype(expr)
。你可以声明一个类型与其他表达式相同的对象。例如:decltype('c') a[4]
将声明一个包含4个字符的数组。这只是一个玩具示例,但这个特性非常有用。这里是一个用于UDP服务器的Go代码:
conn, err := net.ListenUDP("udp", udp_addr)
...
defer conn.Close()
...
_, err = conn.WriteToUDP(data, addr)
重要的是我知道如何使用函数的结果类型(在这种情况下,使用连接,即
ListenUDP
的结果),但我不知道这个类型是什么。由于 Go 有类型推断,因此我无需知道。但是如果我想创建 5 个连接,那么我希望有一个包含 5 个“ListenUDP
的结果”的数组。我做不到。最接近的我所得到的是:ret_type := reflect.TypeOf(net.DialUDP)
first_param_type := reflect.TypeOf(ret_type.Out(0))
my_arr := reflect.ArrayOf(4, first_param_type)
my_arr[0] = nil
但是最后一行不起作用。有没有一种方法可以在Go中实现它?