目录
https://books.studygolang.com/gobyexample/
一、hello, world
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
二、变量
package main
import "fmt"
func main() {
var a string = "initial"
fmt.Println(a)
var b, c int = 3, 4
fmt.Println(b, c)
var d = true
fmt.Println(d)
var e bool = false
fmt.Println(e)
f := "short"
fmt.Println(f)
}
三、常量
package main
import (
"fmt"
"math"
)
const c string = "constant"
func main() {
fmt.Println(c)
const a = 500000
fmt.Println(a)
// a = 3000
fmt.Println(a)
const b = 3e10 / a
fmt.Println(b)
fmt.Println(int64(b))
fmt.Println(math.Sin(b))
}
四、循环
package main
import "fmt"
func main() {
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
for i := 1; i < 8; i++ {
if i == 4 {
continue
}
fmt.Print(i)
}
fmt.Println()
for {
fmt.Println("hello")
break
}
}
五、if/else 分支
package main
import "fmt"
func main() {
if i := true; i {
fmt.Println(i)
} else {
fmt.Println(false)
}
if a := 3; a == 0 {
fmt.Println("a is big data")
} else {
fmt.Println("a is min data")
}
if b := 5; b%3 == 0 {
fmt.Println(" b is a integer ")
} else if b < 10 {
fmt.Println(" b is min data ")
} else {
fmt.Println(" b is big data ")
}
}
六、switch
package main
import (
"fmt"
"time"
)
func main() {
a := 2
fmt.Println(" write ", a, " as ")
switch a {
case 1:
fmt.Println("a is 1")
case 2:
fmt.Println(" a is 2 ")
default:
fmt.Println("a is default ")
}
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println(" time is sunday ")
case time.Friday:
fmt.Println(" time is friday ")
}
}
七、数组
package main
import "fmt"
func main() {
var a [5]int
fmt.Println(a)
a[4] = 100
fmt.Println(a)
fmt.Println(len(a))
b := [6]int{1, 2, 3, 4, 5}
fmt.Println(b)
var arr [2][3]int
for i := 1; i <= 2; i++ {
for j := 1; j <= 3; j++ {
arr[i-1][j-1] = i * j
}
}
fmt.Println(arr)
}
八、切片
package main
import "fmt"
func main() {
s := make([]string, 3)
fmt.Println("emp", s)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println(s)
fmt.Println(s[2])
/*
goroutine 1 [running]:
main.main()
/Users/fengzhengshu/Code/gogogo/project1/slice.go:14 +0x279
exit status 2
*/
//fmt.Println(s[3])
fmt.Println(len(s))
/*
# command-line-arguments
./slice.go:23:8: append(s, "d") evaluated but not used
*/
// append(s, "d")
fmt.Println(s)
s = append(s, "e")
fmt.Println(s)
a := make([]string, len(s))
fmt.Println(a)
copy(a, s)
fmt.Println(a)
b := s[2:3]
fmt.Println(b)
/*
# command-line-arguments
./slice.go:40:4: no new variables on left side of :=
*/
// b := s[2:5]
c := s[2:5]
fmt.Println(c)
d := []string{"1", "2", "3"}
fmt.Println(d)
e := [][]int{{1, 2}, {1, 2}}
fmt.Println(e)
f := make([][]int, 3)
for i := 0; i < 3; i++ {
inlen := i + 1
/*
fengzhengshu:project1 fengzhengshu$ go run slice.go
# command-line-arguments
./slice.go:58:4: non-name f[i] on left side of :=
*/
// f[i] := make([]int, inlen)
f[i] = make([]int, inlen)
for j := 0; j < inlen; j++ {
f[i][j] = i + j
fmt.Print(f[i][j])
}
fmt.Println()
}
}
九、Map关联数组
package main
import "fmt"
func main() {
a := make(map[string]int)
fmt.Println(a)
a["a"] = 1
a["b"] = 2
fmt.Println(a)
/*
# command-line-arguments
./maps.go:13:2: undefined: x
./maps.go:14:14: undefined: x
*/
// x = a["a"]
x := a["a"]
fmt.Println(x)
fmt.Println(a["b"])
fmt.Println(len(a))
delete(a, "b")
fmt.Println(a)
y := a["b"]
fmt.Println("b", y)
_, yy := a["b"]
fmt.Println("_,b", yy)
_, yyy := a["a"]
fmt.Println("_,a", yyy)
map2 := map[string]int{"spu": 1, "sku": 2}
fmt.Println(map2)
}
十、Range 遍历
package main
import "fmt"
func main() {
arr := []int{1, 2, 3}
sum := 0
for num := range arr {
sum += num
}
fmt.Println("sum", sum) // sum 3
sum = 0
for _, num := range arr {
sum += num
}
fmt.Println("sum", sum) // sum 6
for i, num := range arr {
fmt.Println(" i = ", i, " num = ", num)
if num == 3 {
fmt.Println("i = ", i)
}
}
/*
# command-line-arguments
./range.go:27:17: too many variables in range
*/
// for a, b, c := range arr {
// fmt.Println(" a = ", a, " b = ", b, " c = ", c)
// }
kv := map[string]string{"a": "apple", "b": "banana"}
fmt.Println(kv)
for k, v := range kv {
fmt.Printf(" %s -> %s ", k, v)
}
// range 在字符串中迭代 unicode 编码
for x, y := range "go" {
fmt.Println(x, y) // 1 111
}
}
十一、函数
package main
import "fmt"
func main() {
result := plus(1, 2)
fmt.Println(" result = ", result)
}
/*
# command-line-arguments
./functions.go:6:16: plus(1, 2) used as value
./functions.go:11:2: too many arguments to return
have (int)
want ()
*/
// func plus(a int, b int) {
func plus(a int, b int) int {
return a + b
}
十二、多返回值
package main
import "fmt"
/*
# command-line-arguments
./multi-return-value.go:6:2: too many arguments to return
have (number, number)
want ()
./multi-return-value.go:10:16: not enough arguments in call to values
have ()
want (int, int)
./multi-return-value.go:10:16: values() used as value
*/
//func values(int, int) {
func values() (int, int) {
return 2, 5
}
func main() {
a, b := values()
fmt.Println(" a = ", a, " b = ", b)
/*
# command-line-arguments
./multi-return-value.go:24:4: assignment mismatch: 1 variable but values returns 2 values
*/
//c := values()
//fmt.Println(" c = ", c)
_, c := values()
/*
# command-line-arguments
./multi-return-value.go:32:13: cannot use _ as value
*/
//fmt.Println(" _ = ", _, " c = ", c)
fmt.Println(" c = ", c)
}
十三、可变参数的函数
package main
import "fmt"
func scale(nums ...int) int {
result := 0
for _, num := range nums {
result += num
}
fmt.Println(" result = ", result)
return result
}
func main() {
scale(1, 2, 3)
scale(4, 5, 6, 7)
nums := []int{1, 2, 3, 5, 6}
/*
# command-line-arguments
./variadic-parameter.go:19:7: cannot use nums (type []int) as type int in argument to scale
*/
//scale(nums)
scale(nums...)
}
十四、闭包
package main
import "fmt"
func intSeq() func() int {
i := 0
return func() int {
i += 1
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println(nextInt)
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
nextInt = intSeq()
fmt.Println(nextInt())
}