go 语言面向对象编程、go语言类、方法、多态实例
2021/8/1 14:06:07
本文主要是介绍go 语言面向对象编程、go语言类、方法、多态实例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本篇主要分享go语言的面向对象编程小实例,加深对go语言面向对象编程部分内容认识。
-
类
在 Go 语言中没有类(Class)的概念,Go 语言中可以使用结构体(Structs)对属性进行封装,结构体就像是类的一种简化形式。 -
方法
Go 语言中方法(Methods):Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数。 -
继承
在 Go 语言中没有 extends 关键字,它使用在结构体中内嵌匿名类型的方法来实现继承。
(1)、类和方法
package main import ( "fmt" ) type Person struct {//定义属性内容 name string sex byte age int } func (tmp Person) PrintInfo() {//定义Person的方法 fmt.Println("tmp = ", tmp) } func (p *Person) SetInfo (n string, s byte, a int) {//定义指针型的方法 p.name = n p.sex = s p.age = a } func main() { p := Person{"mike",'m', 18} //初始化 Person 值 p.PrintInfo() //调用方法 var p1 Person (&p1).SetInfo("bike", 'n', 17) //调用方法 p1.PrintInfo() }
运行结果如下:
robot@ubuntu:~/workspace-go/src/mothed$ go run mothed.go tmp = {mike 109 18} tmp = {bike 110 17}
(2)、简单方法实例
package main import ( "fmt" ) type long int // 定义int 类型 long func (tmp long) Add(other long) long { //给 long 对象添加具有返回值的方法 return tmp+other; } func main() { var a long = 12 r := a.Add(3) fmt.Println("result = ",r) }
(3). 指针变量的方法
package main import ( "fmt" ) type Person struct { name string sex byte age int } func (p *Person) SetInfoPointer (n string, s byte, a int) { p.name = n p.sex = s p.age = a fmt.Printf("SetInfoPointer &p = %p\n",p) } func (p Person) SetInfoValue (n string, s byte, a int){ p.name =n p.sex = s p.age = a fmt.Printf("SetInfoValue &p = %p\n", &p) } func main() { var s1 Person = Person{"golan", 'm',24} fmt.Printf("&s1 = %p\n",&s1) s1.SetInfoValue("mike",'m',33) fmt.Println("s1 = ",s1) var s2 Person = Person{"golan",'m',24} fmt.Printf("s2 = %p\n",&s2) (&s2).SetInfoPointer("bike",'m',22) fmt.Println("s2 = ",s2) }
运行结果:
robot@ubuntu:~/workspace-go/src/mothed$ go run mothed.go &s1 = 0xc000026040 SetInfoValue &p = 0xc000026060 s1 = {golan 109 24} s2 = 0xc0000260a0 SetInfoPointer &p = 0xc0000260a0 s2 = {bike 109 22}
(4). 方法的继承 & 重写
package main import ( "fmt" ) type Person struct { name string sex byte age int } type Worker struct { Person id int addr string } func (p *Person) PrintInfo () { fmt.Printf("name = %s, sex = %c,age = %d \n", p.name, p.sex, p.age) } func (w *Worker) PrintInfo() { fmt.Printf("name = %s, sex = %c, age = %d, addr = %s \n",w.name, w.sex, w.age, w.addr) } func main() { w := Worker{Person{"golan",'m',23},100,"haidian beijing"} w.PrintInfo() fmt.Printf("\n\r") w.Person.PrintInfo() fmt.Printf("\n\r") f := w.Person.PrintInfo f() f1 := (*Worker).PrintInfo f1(&w) }
输入内容如下
robot@ubuntu:~/workspace-go/src/mothed$ go run mothed.go name = golan, sex = m, age = 23, addr = haidian beijing name = golan, sex = m,age = 23 name = golan, sex = m,age = 23 name = golan, sex = m, age = 23, addr = haidian beijing
(5). 接口实现多态
package main import ( "fmt" ) type Square struct { side float32 } type Rectangle struct { length, width float32 } type Shaper interface { Area() float32 } func (sq *Square) Area() float32 { return sq.side * sq.side } func (r *Rectangle) Area() float32 { return r.length * r.width } func main () { r := &Rectangle{10,2} q := &Square{10} fmt.Printf("r.area = %f\n",r.Area()) fmt.Printf("q.area = %f\n",q.Area()) shapes := []Shaper{r,q} for n, _ := range shapes { fmt.Println("图形数据: ", shapes[n]) fmt.Println("它的面积: ", shapes[n].Area()) } }
输出内容
robot@ubuntu:~/workspace-go/src/mothed$ go run mothed.go r.area = 20.000000 q.area = 100.000000 图形数据: &{10 2} 它的面积: 20 图形数据: &{10} 它的面积: 100
参考链接
https://zhuanlan.zhihu.com/p/94625212
这篇关于go 语言面向对象编程、go语言类、方法、多态实例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南