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}
}
// 返回局部变量地址可以正常使用