我刚开始使用Go,让我感到紧张的一件事是,如果我定义一个接受数组的函数,然后将数组传递给具有特定大小的函数,VS Code会抱怨它。
例如,我有这样的事情:
func cmplt(a, b []uint64) uint64 {
var r, m, i uint64
r = 0
m = 0
for i = 2; i >= 0; i-- {
r |= LtUint64(a[i], b[i]) & ^m
m |= MaskUint64(NeUint64(a[i], b[i]))
}
return r & 1
}
然后我在另一个函数中调用此函数:
func singleSample(in []uint64) uint64 {
var i, index uint64
index = 0
for i = 0; i < 52; i++ {
index = SelectUint64(index, i+1, cmplt(in, table[i]))
}
return index
}
其中table
的类型为[52][3]uint64
。我收到一条错误消息:cannot use table (type [3]uint64) as []uint64 in argument to cmplt
。
Go中有没有办法解决这个问题,而不是在函数参数中专门指定数组大小?
答案 0 :(得分:3)
您的cmplt
期待uint64
切片,而不是3个元素数组。 table[i]
Taking a slice将解决错误:
cmplt(in, table[i][:])
答案 1 :(得分:0)
从我看到的最佳解决方案是将cmplt
函数定义更改为接受数组:
func cmplt(a, b [3]uint64) uint64 {
在您的代码中,您可以依赖于底层数组的大小,因此请确保尽可能清楚地指定您的函数依赖性