【发布时间】:2011-01-27 05:20:18
【问题描述】:
我正在玩 google 的 Go 语言,我遇到了一些 C 语言中相当基本的东西,但我目前看到的文档中似乎没有涉及
当我将指向切片的指针传递给函数时,我认为我们有一些方法可以访问它,如下所示:
func conv(x []int, xlen int, h []int, hlen int, y *[]int)
for i := 0; i<xlen; i++ {
for j := 0; j<hlen; j++ {
*y[i+j] += x[i]*h[j]
}
}
}
但是 Go 编译器不喜欢这样:
sean@spray:~/dev$ 8g broke.go
broke.go:8: invalid operation: y[i + j] (index of type *[]int)
很公平 - 这只是一个猜测。我有一个相当简单的解决方法:
func conv(x []int, xlen int, h []int, hlen int, y_ *[]int) {
y := *y_
for i := 0; i<xlen; i++ {
for j := 0; j<hlen; j++ {
y[i+j] += x[i]*h[j]
}
}
}
但肯定有更好的方法。烦人的是,在 Go 上搜索信息并不是很有用,因为大多数搜索词都会出现各种 C/C++/不相关的结果。
【问题讨论】:
-
问Go语言的问题,标记
go,会有更多人回答; Vatine 为你做到了。golang是一个过时的标签;如您所见,有 117 个问题被标记为go,只有 3 个问题被错误地标记为golang。 -
请注意,您不需要 xlen 和 hlen 作为参数;您可以改用 len(x) 和 len(h)。
-
把
*y放到()=>(*y)[index]玩得开心,见play ground