*本来这篇是想写docker的基本操作总结的。。。想想还是写这个吧。。。→_→*

//.\main.go:8:4: no new variables on left side of :=
package main

import "fmt"

func main() {
    var a int = 10
    var b int = 20
    b := 30

    fmt.Print(a, b)
}
//.\main.go:7:6: b declared and not used
package main

import "fmt"

func main() {
    var a int = 10
    var b int = 20

    fmt.Print(a)
}
//.\main.go:7:4: cannot assign to a
//.\main.go:8:4: cannot assign to b
package main

import "fmt"

func main() {
    const a, b int = 10, 20
    a = 10
    b = 20

    fmt.Print(a, b)
}
//.\main.go:9:2: syntax error: unexpected ++, expecting }
package main

import "fmt"

func main(){
    var a int = 10
    var b int = 20

    ++a
    b++

    fmt.Print(a, b)
}
//.\main.go:7:15: syntax error: unexpected ++ at end of statement
//.\main.go:10:7: syntax error: unexpected ++ at end of statement
package main

import "fmt"

func main(){
    var a int = 10
    var b int = a++

    var c int = 20
    c = a++

    fmt.Print(a, b, c)
}
//.\main.go:11:2: syntax error: unexpected else, expecting }
package main

import "fmt"

func main() {
    var a int = 30

    if a < 20 {
        fmt.Print("a<20")
    } 
    else {
        fmt.Print("a>=20")
    }
}
//代码运行成功
package main

import "fmt"

func main() {
    var a int = 10

    switch a {
    case 1:
        fmt.Println("1")
    case 2:
        fmt.Println("2")
    case 10:
        fmt.Println("10")
    default:
        fmt.Println("unknow")
    }
}
//代码运行成功
package main

import "fmt"

func main() {
    var a int = 10

    switch {
    case a == 1:
        fmt.Println("1")
    case a == 2:
        fmt.Println("2")
    case a == 10:
        fmt.Println("10")
    default:
        fmt.Println("unknow")
    }
}

//代码运行成功
package main

import "fmt"

func main() {
    var a int = 10

    switch {
    case a == 1, a == 2:
        fmt.Println("1 or 2")
    case a == 10, a == 20:
        fmt.Println("10 or 20")
    case a == 100, a == 200:
        fmt.Println("100 or 200")
    default:
        fmt.Println("unknow")
    }
}
package main

import "fmt"

func main() {
    var x interface{}

    switch i := x.(type) {
    case nil:
        fmt.Printf("%T", i)
    case int:
        fmt.Printf("int")
    case float64:
        fmt.Printf("float64")
    case func(int) float64:
        fmt.Printf("func(int)")
    case bool, string:
        fmt.Printf("bool or string")
    default:
        fmt.Printf("unknow")
    }
}
Learning...
//i为下标
//x为元素的值
//0 1
//1 2
//2 3
//3 4
//4 5
package main

import "fmt"

func main() {
    var number = [5]int{1, 2, 3, 4, 5}
    for i, x := range number {
        fmt.Println(i, x)
    }
}
//0 1 2 3 4 5 6 7 8 9
package main

import "fmt"

func main() {
    var a int = 0
    for a < 10 {
        fmt.Printf("%d ", a)
        a++
    }
}
//0 1 2 3 4 5 6 7 8 9
package main

import "fmt"

func main() {
    var a int = 0
    for a = 0; a < 10; a++ {
        fmt.Printf("%d ", a)
    }
}
//10 10
//true
package main

import "fmt"

func fun(num1 *int, num2 *int) bool {
    fmt.Println(*num1, *num2)
    if *num1 == *num2 {
        return true
    } else {
        return false
    }
}

func main() {
    var a int = 10
    var b int = 10

    var flag bool = fun(&a, &b)
    fmt.Print(flag)
}
//hello world
package main

import "fmt"

func fun(str1 string, str2 string) (string, string) {
    return str2, str1
}

func main() {
    str1, str2 := fun("world", "hello")
    fmt.Println(str1, str2)
}
//-1
package main

import "fmt"

func main() {
    tmp := func(x int) int {
        return -x
    }
    fmt.Print(tmp(1))
}
//1 2 3
package main

import "fmt"

func first() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

func main() {
    tmp := first()
    fmt.Println(tmp(), tmp(), tmp())
}
//10 abc
package main

import "fmt"

//自定义类型
type student struct {
    num  int
    name string
}

//方法getNum
func (stu student) getNum() int {
    return stu.num
}

//方法getName
func (stu student) getName() string {
    return stu.name
}

func main() {
    var st student
    st.num = 10
    st.name = "abc"
    //对象调用其方法
    fmt.Println(st.getNum(), st.getName())
}
//[0 0 0 0 0 0 0 0 0 0]
//100 1 2 3 4 5 6 7 8 9 [100 1 2 3 4 5 6 7 8 9]
package main

import "fmt"

func main() {
    var arr [10]int
    var number = [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    number[0] = 100

    fmt.Println(arr)
    var i int = 0
    for i = 0; i < 10; i++ {
        fmt.Printf("%d ", number[i])
    }

    fmt.Println(number)
}
//[[1 2 3] [4 5 6] [7 8 9]]
package main

import "fmt"

func main() {
    var number = [3][3]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}}
    fmt.Println(number)
}
//0 1 2 3 4 5 6 7 8 9 10
package main

import "fmt"

func getNum(number []int) int {
    var i int = 0
    for i = 0; i < 10; i++ {
        fmt.Printf("%d ", number[i])
    }
    return len(number)
}

func main() {
    var number = []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    num := getNum(number)
    fmt.Println(num)
}
//0 1 2 3 4 5 6 7 8 9 10
package main

import "fmt"

func getNum(number [10]int) int {
    var i int = 0
    for i = 0; i < 10; i++ {
        fmt.Printf("%d ", number[i])
    }
    return len(number)
}

func main() {
    var number = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    num := getNum(number)
    fmt.Println(num)
}
//0 1 2 3 4 5 6 7 8 9 
package main

import "fmt"

func main() {
    var number = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    var num [10]*int

    for i := 0; i < 10; i++ {
        num[i] = &number[i]
    }

    for i := 0; i < 10; i++ {
        fmt.Printf("%d ", *num[i])
    }
}
//10 10 10
package main

import "fmt"

func main() {
    var i int = 10
    var ptr1 *int = &i
    var ptr2 **int = &ptr1

    fmt.Printf("%d %d %d", i, *ptr1, **ptr2)
}
//111
//zhangsan
//man
//20
//111
//zhangsan
//man
//20
package main

import "fmt"

type studentInfo struct {
    id   int
    name string
    sex  string
    age  int
}

func getInfo(stu studentInfo) {
    fmt.Println(stu.id)
    fmt.Println(stu.name)
    fmt.Println(stu.sex)
    fmt.Println(stu.age)
}

func getInfoByPtr(stuPtr *studentInfo) {
    fmt.Println(stuPtr.id)
    fmt.Println(stuPtr.name)
    fmt.Println(stuPtr.sex)
    fmt.Println(stuPtr.age)
}

func main() {

    var stu studentInfo
    stu.id = 111
    stu.name = "zhangsan"
    stu.sex = "man"
    stu.age = 20
    getInfo(stu)
    var stuPtr *studentInfo = &stu
    getInfoByPtr(stuPtr)
}
//make([]T, length, capacity)
//len = 0 cap = 0, slice = []
//len = 10 cap = 10, slice = [0 0 0 0 0 0 0 0 0 0]
//len = 10 cap = 10, slice = [0 0 0 0 0 0 0 0 0 0]
//len = 5 cap = 10, slice = [0 0 0 0 0]
package main

import "fmt"

func printSlice(slice []int) {
    fmt.Printf("len = %d cap = %d, slice = %v\n", len(slice), cap(slice), slice)
}

func main() {
    var slice1 []int
    printSlice(slice1)

    var slice2 = make([]int, 10)
    printSlice(slice2)

    var slice3 = make([]int, 10, 10)
    printSlice(slice3)

    slice4 := make([]int, 5, 10)
    printSlice(slice4)
}
//s := arr[startIndex:endIndex] 
//len = 10 cap = 10, slice = [0 1 2 3 4 5 6 7 8 9]
//len = 10 cap = 10, slice = [0 1 2 3 4 5 6 7 8 9]
//len = 10 cap = 10, slice = [0 1 2 3 4 5 6 7 8 9]
//len = 2 cap = 9, slice = [1 2]
//len = 9 cap = 9, slice = [1 2 3 4 5 6 7 8 9]
//len = 3 cap = 10, slice = [0 1 2]
//len = 2 cap = 8, slice = [2 3]
package main

import "fmt"

func printSlice(slice []int) {
    fmt.Printf("len = %d cap = %d, slice = %v\n", len(slice), cap(slice), slice)
}

func main() {
    var slice1 = []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    printSlice(slice1)

    slice2 := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    printSlice(slice2)

    //数组arr
    var arr = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    slice3 := arr[:]
    printSlice(slice3)

    slice4 := arr[1:3]
    printSlice(slice4)

    slice5 := arr[1:]
    printSlice(slice5)

    slice6 := arr[:3]
    printSlice(slice6)

    slice7 := slice5[1:3]
    printSlice(slice7)
}
//len = 0, cap = 0, slice = []
//slice is nil
package main

import "fmt"

func printSlice(slice []int) {
    fmt.Printf("len = %d, cap = %d, slice = %v\n", len(slice), cap(slice), slice)
}

func main() {
    var slice []int
    printSlice(slice)

    if slice == nil {
        fmt.Printf("slice is nil\n")
    }
}
//len = 0, cap = 0, slice = []
//len = 1, cap = 1, slice = [0]
//len = 2, cap = 2, slice = [0 1]
//len = 5, cap = 6, slice = [0 1 2 3 4]
//len = 5, cap = 12, slice = [0 1 2 3 4]
package main

import "fmt"

func printSlice(slice []int) {
    fmt.Printf("len = %d, cap = %d, slice = %v\n", len(slice), cap(slice), slice)
}

func main() {
    var slice []int
    printSlice(slice)

    //此时cap默认扩容2倍
    slice = append(slice, 0)
    printSlice(slice)

    //此时cap默认扩容2倍
    slice = append(slice, 1)
    printSlice(slice)

    //此时cap扩容规则出现变化,同时append追加多个数据时,cap会扩容到向上最近的偶数数值,以减少cap容量的浪费
    slice = append(slice, 2, 3, 4)
    printSlice(slice)

    slice2 := make([]int, len(slice), cap(slice)*2)
    copy(slice2, slice)
    printSlice(slice2)
}
//[1 2 8 4]
//[1 2 8 4]
//[1 2 8 4]
//[1 2 9 4 5]
package main

import "fmt"

func main() {
    original := []int{1, 2, 3, 4} //a slice with a len and cap of 4
    other := original
    other[2] = 8
    fmt.Println(original)
    fmt.Println(other)

    other = append(original, 5)
    other[2] = 9
    fmt.Println(original)
    fmt.Println(other)
}
//slice
package main

import "fmt"

func main(){
    nums := []int{1, 2, 3}
    sum := 0
    for _, num := range nums{
        sum += num
    }
    fmt.Print(sum)
}
//slice
package main

import "fmt"

func main(){
    kvs := map[string]string{"1": "one", "2": "two"}

    for k, v := range kvs{
        fmt.Printf("%s -> %s\n", k, v)
    }
}
package main

import "fmt"

func main(){
    //定义map集合
    var studentName map[int]string
    //初始化创建集合
    studentName = make(map[int]string)

    studentName[0] = "zhangsan"
    studentName[1] = "lisi"
    studentName[2] = "wangwu"
    //由于map是hash表实现的,所以每次的迭代结果不确定
    for ID := range studentName{
        fmt.Printf("%d -> %s\n", ID, studentName[ID])
    }
    //删除key为0的元素
    delete(studentName, 0)
    fmt.Println("delete", 0)

    for ID := range studentName{
        fmt.Printf("%d -> %s\n", ID, studentName[ID])
    }
}
package main

import (
    "fmt"
)

type Action interface{
    sleep()
    eat()
}

type Human struct{

}

func(hum Human) sleep(){
    fmt.Println("human sleeping")
}

func(hum Human) eat(){
    fmt.Println("human eating")
}

type Dog struct{

}

func(dog Dog) sleep(){
    fmt.Println("dog sleeping")
}

func(dog Dog) eat(){
    fmt.Println("dog eating")
}

func main(){

    var action Action

    action = new(Human)
    action.sleep()

    action = new(Dog)
    action.eat()
}
package main

import (
    "fmt"
)

// 定义一个 DivideError 结构
type DivideError struct {
    dividee int
    divider int
}

// 实现 `error` 接口
func (de *DivideError) Error() string {
    strFormat := `
    Cannot proceed, the divider is zero.
    dividee: %d
    divider: 0
`
    return fmt.Sprintf(strFormat, de.dividee)
}

// 定义 `int` 类型除法运算的函数
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
    if varDivider == 0 {
        dData := DivideError{
            dividee: varDividee,
            divider: varDivider,
        }
        errorMsg = dData.Error()
        return
        } else {
        return varDividee / varDivider, "no error"
    }
}

func main() {

    // 正常情况
    result, errorMsg := Divide(100, 10)

    if errorMsg == "no error" {
        fmt.Println("100/10 = ", result, errorMsg)
    }
    // 当被除数为零的时候会返回错误信息
    result, errorMsg = Divide(100, 0)

    if errorMsg != "no error" {
        fmt.Println("errorMsg is: ", result, errorMsg)
    }
}