golang 面向对象
1.面向对象编程应用实例
1)声明(定义)结构体,确定结构体名
2)编写结构体的字段
3)编写结构体的方法
2.实例
2.1
1)编写一个Box结构体,在其中声明三个字段表示一个立方体的长、宽和高,长宽高要从终端获取
2)声明一个方法获取立方体的体积
3)创建一个Box结构体变量,打印给定尺寸的立方体的体积
type Box struct { length float64 weight float64 height float64 } func (box Box) volume() { vo := box.length * box.weight * box.height fmt.Printf("长方体的长为%v,宽为%v,高为%v,体积为%v\n", box.length, box.weight, box.height, vo) } func main() { var box Box fmt.Println("请输入立方体的长,宽,高") fmt.Scanf("%v,%v,%v", &box.length, &box.weight, &box.height) box.volume() }
2.2输出去公园的定价,大于18岁收费,小于18岁不收费
type Person struct { Name string Age int } func (person Person) Visitor() { fei := 0 if person.Age > 18 { fei = 20 } else { fei = 0 } fmt.Printf("姓名为:%v,年龄为:%v,价格为:%v\n", person.Name, person.Age, fei) } func main() { //var person Person //person.Name = "李飞" //person.Age = 20 person := Person{"李飞", 16} person.Visitor() }
3.工厂模式
golang的结构体没有构造函数,通常可以使用工厂模式来解决这个问题
使用场景,main包中要使用某个包中的结构体,但是这个结构体的名字是小写的不能被外部使用,此时要使用工厂模式。使用工厂模式可以实现跨包创建结构体实例
model.go
package model type student struct { Name string Age int } //因为student结构体首字母是小写的,因此只能在model使用 //用工厂模式来解决 func NewStudent(n string, a int) *student { return &student{ Name: n, Age: a, } }
main.go
package main import ( "fmt" "gotest1/src/test/test45/model" ) func main() { var stu = model.NewStudent("张三", 24) //student结构体首字母小写,可以通过工厂模式来解决 fmt.Println(*stu) fmt.Printf("name:%v,age:%v\n", stu.Name, stu.Age) }
如果结构体字段是首字母是小写字母,则应该只能在model包中使用,若要在main包中使用,则可以提供一个绑定了student结构体的方法GetAge()来返回这个字段,因为方法的首字母为大写所以可以在main中使用。
model.go
package model type student struct { Name string age int } //因为student结构体首字母是小写的,因此只能在model使用 //用工厂模式来解决 func NewStudent(n string, a int) *student { return &student{ Name: n, age: a, } } //如果stu.Age字段首字母小写,则在其他包不可以直接访问,我们可以提供一个绑定了student struct的方法 func (s *student) GetAge() int { return s.age }
main.go
package main import ( "fmt" "gotest1/src/test/test45/model" ) func main() { var stu = model.NewStudent("张三", 24) //student结构体首字母小写,可以通过工厂模式来解决 fmt.Println(*stu) fmt.Printf("name:%v,age:%v\n", stu.Name, stu.GetAge()) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?