13、结构体和方法

package main

import "fmt"

// 新建结构体类型
type treeType struct {
    name string
    age int
    address string
}

// 给结构体新增方法
func (node treeType) echoName() { // 前面括号表示为哪个结构体的方法;后面echoName为方法名称
    println(node.name)
}

// 只有使用指针才能改变结构内容。(调用时正常调用,不用传&)
func (node *treeType) setAge(value int) {
    node.age = value
}

func main() {
    // 结构体

    // key-value方式,创建新的结构体
    newStruct := treeType{name:"张三",age:18,address: "北京"} // 可以省略任意值,忽略的值为0或空
    fmt.Println(newStruct)

    // 直接赋值方式,创建新的结构体
    newStruct1 := treeType{"李四",88,"广州"} // 这方式不能省略任意一个值
    fmt.Println(newStruct1)

    // 通过 . 符号,创建新的结构体
    var hongTree treeType
    hongTree.name = "红树"
    hongTree.age = 100
    hongTree.address = "云南"
    fmt.Println(hongTree)

    // 通过 . 符号,访问结构体成员信息
    fmt.Println(hongTree.name)

    // 结构体可作为函数参数(略)

    // 结构体指针
    var redTree treeType
    redTree.age = 1
    redTree.name = "red指针"
    redTree.address = "河南"

    // 传递指针参数
    print(&redTree)

    // 当然 slice 的类型也可以用 刚定义的类型
    oslice := []treeType  {
        {age:2},
        {},
        {"王五",3,"西藏"},
    }
    fmt.Println(oslice)

    // 使用结构体的方法
    redTree.echoName() // 异步操作
    redTree.setAge(999)
    fmt.Println(redTree.age)
}



// 接收指针参数,进行打印
func print (arg *treeType) {
    fmt.Println(arg.address)
    fmt.Println(arg.age)
    fmt.Println(arg.name)
}

// 工厂函数定义
func createNode(v int) *treeType {
    return &treeType{age: v}
}
// 返回局部变量地址可以正常使用

 

posted @ 2021-11-21 11:07  JaydenQiu  阅读(47)  评论(0)    收藏  举报