2016-03-28 16 views
1

Ich versuche, ein einfaches Beispiel für Golang zu machen. Das Beispiel ist in der 36º Seite der Tour von Golang. Dies ist mein Code:Golang Index außerhalb des Bereichs

package main 

import "code.google.com/p/go-tour/pic" 
import "fmt" 

func Pic(dx, dy int) [][]uint8 { 
    dx8 := uint8(dx) 

    s1 := make ([][] uint8, dy) 
    fmt.Printf("%d\n", len(s1), cap(s1)) 

    for i := range s1{ 
     fmt.Printf("%d\n",i) 
     for j := range s1 { 
      fmt.Printf("%d\n",j) 
      s1[i][j] = dx8  
     } 
    } 

    return s1 
} 

func main() { 
    pic.Show(Pic) 
} 

Und die Fehler, die ich bekam:

256 
%!(EXTRA int=256)0 
0 
panic: runtime error: index out of range 

goroutine 1 [running]: 
panic(0x18b820, 0x1040a010) 
    /usr/local/go/src/runtime/panic.go:464 +0x700 
main.Pic(0x100, 0x100, 0x0, 0x0, 0x0, 0x0) 
    /tmp/sandbox716191956/main.go:17 +0x4e0 
code.google.com/p/go-tour/pic.Show(0x1d7988, 0x104000e0) 
    /go/src/code.google.com/p/go-tour/pic/pic.go:20 +0x60 
main.main() 
    /tmp/sandbox716191956/main.go:26 +0x20 

Program exited. 

ich nur eine bidimensial Scheibe zurückkehren wollen, die Show Funktion verwendet.

Antwort

1

Sie müssen die Schichten für beide Dimensionen, dy und dx, des Bildes machen. Zum Beispiel

0

Das Problem in Ihrem Code sind Sie in der zweiten Schleife in der falschen Größe Schleifen. Ihr zweiter Bereich muss von s1[i] nicht s1 sein, weil die zweite Schleife auf innere Dimension verarbeitet.

for i := range s1{ 
    fmt.Printf("%d\n",i) 
    s1[i] = make ([] uint8, dy) 
    for j := range s1[i] { 
     fmt.Printf("%d\n",j) 
     s1[i][j] = dx8 

    } 
} 
Verwandte Themen