1.结构体和方法
在go中,是没有类class的定义的,但是类似于class的是type
package main
import (
"fmt"
)
//定义一个类
type person struct {
name string
age int
tel int
}
//构造函数
func con(name string, age, tel int) *person {
return &person{name, age, tel}
}
//方法
func (aaa person) fanfa() {
fmt.Println(aaa.tel * aaa.age)
}
//修改person中的name,但不就该原数据
func (aaa person) update_name(name string) person {
aaa.name = name
return aaa
}
//修改person中的name,也修改原数据
func (aaa *person) update(name string) person {
//指针下的name,落脚点是name,name并不是指针
aaa.name = name
return *aaa
}
func main() {
//实例化类1
var a person
a.tel = 15888888888
//实例化类2
b := person{name: "王八", age: 18, tel: 18566654124}
//实例化类3
c := person{"张二", 19, 15888888888}
fmt.Println(a, b, c)
//调用类中的方法
c.fanfa()
//修改现数据
fmt.Println("这是现在的name:", c.update_name("狗儿"))
//修改原数据
c.update("二比")
fmt.Println("这是原来的name:", c)
} 结果展示:

2.包的封装,实现面向对象
2.1包的逻辑关系图

2.2利用entry.go调用tree包,实现对tree包下,node.go和node1.go的调用
node.go
package tree
//定义一个类
type Person struct {
Name string
Age int
Tel int
}
//修改Person中的Name,但不就该原数据
func (aaa Person) Update_name(Name string) Person {
aaa.Name = Name
return aaa
}
//修改Person中的Name,也修改原数据
func (aaa *Person) Update(Name string) Person {
//指针下的Name,落脚点是Name,Name并不是指针
aaa.Name = Name
return *aaa
}
node1.go
package tree
import "fmt"
//构造函数
func Con(Name string, Age, Tel int) *Person {
return &Person{Name, Age, Tel}
}
//方法
func (aaa Person) Fanfa() {
fmt.Println(aaa.Tel * aaa.Age)
}entry.go
package main
import (
"../tree"
"fmt"
)
func main() {
//实例化类1
var a tree.Person
a.Tel = 15888888888
//实例化类2
b := tree.Person{Name: "王八", Age: 18, Tel: 18566654124}
//实例化类3
c := tree.Person{"张二", 19, 15888888888}
fmt.Println(a, b, c)
//调用类中的方法
c.Fanfa()
//修改现数据
fmt.Println("这是现在的Name:", c.Update_name("狗儿"))
//修改原数据
c.Update("二比")
fmt.Println("这是原来的Name:", c)
}通过运行entry.go实现调用tree,效果如下:

本文介绍了Go语言中结构体的定义与使用方法,包括构造函数、方法的定义及调用,同时展示了如何通过不同方式更新结构体字段,并通过实例演示了面向对象编程的基本概念。
932

被折叠的 条评论
为什么被折叠?



