虽然代码我看懂了,比较好理解,但我还是写下笔记和代码,加深下理解。
声明一个结构体

type data struct {
    ID int
    Name string
    Address string
    MyList [...]types.Slice
    DoB time.Time
}

看下 struct 就是结构体的意思, 前方用type修饰, data是结构体名称。
结构体内只能声明变量或函数或方法名, 不能赋值。
看下面代码

type data struct {
    ID int
    Name string
    Address string
    // 切片  我记错了 [] 是切片 [...] 是数组
    MyList []string
    DoB time.Time
    //MyArray [...]string
}


func main()  {
    var d data
    d.Address = "华东区\n"
    fmt.Printf(d.Address)
    fmt.Printf("%v \n", d.DoB)

    d.MyList = []string{"a","b", "c"}
    fmt.Printf("%v \n",d.MyList)
    fmt.Printf("%T \t", d.MyList)

    p := [...]string{"a", "b", "c", "d"}
    fmt.Printf("%v", p)
}

[]是切片,[...] 这个是数组, 由于数组长度一旦声明不可变, 所以结构体里能放切片不能放数组。 因为结构体不能初始化值, 而数组声明时必须指定长度。

匿名函数的用法, 看代码


import "fmt"

// 一个词一个词解释
// func 证明是函数或方法
//add()  函数名
// func() int  复杂了, 就这  返回一个函数, 此函数返回int类型
func add()  func() int{
    var i int
    return func () int {
        i++
        return i
    }
}

func main()  {
    p := add()
    fmt.Printf("%v \n", p())
    fmt.Printf("%v \n", p())
    fmt.Printf("%v \n", p())
    fmt.Printf("%v \n", p())
}
// 返回1,2,3,4

意义:大的方法名add 付给p, 而调用 p(), 只用到了匿名函数, 初始化i并没有起作用。