У меня небольшая игра с языком 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 это не нравится:
[email protected]:~/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]
}
}
}
Но, конечно, лучший способ. Досадно, что поиск в Google для Go не очень полезен, поскольку для большинства поисковых запросов появляются всевозможные C/С++/несвязанные результаты.