我在練習step 35 in the tour of Go時遇到了一些麻煩。聲明變量與var與無var之間的區別
這裏是我的代碼如下所示:
package main
import "code.google.com/p/go-tour/pic"
func Pic(dx, dy int) [][]uint8 {
var pic = make([][]uint8, dy)
for y := 0; y < dy; y++ {
pic[y] = make([]uint8, dx)
for x := 0; y < dx; x++ {
pic[y][x] = uint8(x*y)
}
}
return pic
}
當尋找一個解決方案,我發現PeterSO's代碼工作完全
func main() {
pic.Show(Pic)
}
func Pic(dx, dy int) [][]uint8 {
pixels := make([][]uint8, dy)
for y := 0; y < dy; y++ {
pixels[y] = make([]uint8, dx)
for x := 0; x < dx; x++ {
pixels[y][x] = uint8(x * y)
}
}
return pixels
}
唯一的區別我可以看到,是我使用var
關鍵字定義pic
變量,而他的代碼使用:=
分配。現在,爲什麼我的代碼不工作?
'var pic = make([] [] uint8,dy)'是有效的,並且類型被推斷。不要寫'var pic [] [] uint8 = make([] [] uint8,dy)',重複該類型是多餘的。 – peterSO
@Laurent:不正確,類型推理也適用於'=':'var v = expr'。 – zzzz
另外,我認爲你不能在函數定義之外使用':='來使它成爲全局的,你必須在這種情況下使用'var'。 – siritinga