diff options
Diffstat (limited to 'go.html.markdown')
-rw-r--r-- | go.html.markdown | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/go.html.markdown b/go.html.markdown index dc684227..50692f9c 100644 --- a/go.html.markdown +++ b/go.html.markdown @@ -11,6 +11,7 @@ contributors: - ["Jose Donizetti", "https://github.com/josedonizetti"] - ["Alexej Friesen", "https://github.com/heyalexej"] - ["Clayton Walker", "https://github.com/cwalk"] + - ["Leonid Shevtsov", "https://github.com/leonid-shevtsov"] --- Go was created out of the need to get work done. It's not the latest trend @@ -39,6 +40,7 @@ import ( "io/ioutil" // Implements some I/O utility functions. m "math" // Math library with local alias m. "net/http" // Yes, a web server! + "os" // OS functions like working with the file system "strconv" // String conversions. ) @@ -97,12 +99,12 @@ can include line breaks.` // Same string type. // Arrays have size fixed at compile time. var a4 [4]int // An array of 4 ints, initialized to all 0. - a3 := [...]int{3, 1, 5} // An array initialized with a fixed size of three - // elements, with values 3, 1, and 5. + a5 := [...]int{3, 1, 5, 10, 100} // An array initialized with a fixed size of fize + // elements, with values 3, 1, 5, 10, and 100. // Slices have dynamic size. Arrays and slices each have advantages // but use cases for slices are much more common. - s3 := []int{4, 5, 9} // Compare to a3. No ellipsis here. + s3 := []int{4, 5, 9} // Compare to a5. No ellipsis here. s4 := make([]int, 4) // Allocates slice of 4 ints, initialized to all 0. var d2 [][]float64 // Declaration only, nothing allocated here. bs := []byte("a slice") // Type conversion syntax. @@ -132,7 +134,15 @@ can include line breaks.` // Same string type. // Unused variables are an error in Go. // The underscore lets you "use" a variable but discard its value. - _, _, _, _, _, _, _, _, _, _ = str, s2, g, f, u, pi, n, a3, s4, bs + _, _, _, _, _, _, _, _, _, _ = str, s2, g, f, u, pi, n, a5, s4, bs + // Usually you use it to ignore one of the return values of a function + // For example, in a quick and dirty script you might ignore the + // error value returned from os.Create, and expect that the file + // will always be created. + file, _ := os.Create("output.txt") + fmt.Fprint(file, "This is how you write to a file, by the way") + file.Close() + // Output of course counts as using a variable. fmt.Println(s, c, a4, s3, d2, m) @@ -211,6 +221,10 @@ func learnFlowControl() { // for each pair in the map, print key and value fmt.Printf("key=%s, value=%d\n", key, value) } + // If you only need the value, use the underscore as the key + for _, name := range []string{"Bob", "Bill", "Joe"} { + fmt.Printf("Hello, %s\n", name) + } // As with for, := in an if statement means to declare and assign // y first, then test y > x. @@ -221,7 +235,8 @@ func learnFlowControl() { xBig := func() bool { return x > 10000 // References x declared above switch statement. } - fmt.Println("xBig:", xBig()) // true (we last assigned e^10 to x). + x = 99999 + fmt.Println("xBig:", xBig()) // true x = 1.3e3 // This makes x == 1300 fmt.Println("xBig:", xBig()) // false now. @@ -280,7 +295,7 @@ type pair struct { x, y int } -// Define a method on type pair. Pair now implements Stringer. +// Define a method on type pair. Pair now implements Stringer because Pair has defined all the methods in the interface. func (p pair) String() string { // p is called the "receiver" // Sprintf is another public function in package fmt. // Dot syntax references fields of p. |