Go基础---->go的基础学习(三)
2024-10-18 07:34:11
这里面我们简单的介绍go中面向对象编程的知识。
Go的面向对象编程
一、为类型添加方法
package main import "fmt" type Integer int // 面向对象
func (a Integer) Less(b Integer) bool {
return a < b
} // 面向过程
func Integer_Less(a Integer, b Integer) bool {
return a < b
} func main() {
var a Integer = 1
if a.Less(2) {
fmt.Println(a, "Less 2") // 1 Less 2
}
if Integer_Less(a, 2) {
fmt.Println(a, "Less 2") // 1 Less 2
}
}
二、go中的函数传值问题
package main import "fmt" type Integer int func (a *Integer) Add1(b Integer) {
*a += b
} func (a Integer) Add2(b Integer) {
a += b
} func main() {
var a, b Integer = 2, 7
a.Add2(b)
fmt.Println(a, b) // 2, 7 a.Add1(b)
fmt.Println(a, b) // 9, 7
}
Go语言中的大多数类型都基于值语义:
- 基本类型,如 byte、int、bool、float32、float64 和 string 等;
- 复合类型,如数组(array)、结构体(struct)和指针(pointer)等。
三、go中的结构休
package main import "fmt" type Rect struct {
width, height float64
} func (r *Rect) Area() float64 {
return r.width * r.height
} func main() {
// 创建的几种方式
rect1 := &Rect{100, 50}
rect2 := &Rect{width: 100, height: 200}
rect3 := new(Rect)
rect3.height, rect3.width = 90, 20
rect4 := &Rect{}
rect4.height, rect4.width = 90, 20 fmt.Println(rect1.Area()) //
fmt.Println(rect2.Area()) //
fmt.Println(rect3.Area()) //
fmt.Println(rect4.Area()) //
}
四、go中的接口
由于Go语言中任何对象实例都满足空接口 interface{} ,所以 interface{} 看起来像是可以指向任何对象的 Any 类型。
package main import "fmt" // 定义一个接口Men
type Men interface {
sayHello()
} type Sing interface {
sing(name string)
} // 接口的组合
type MenAndSing interface {
Sing
Men
} type Human struct {
name, address string
age int
} type Person struct {
Human
phone string
} // Huamn实现了sayHello方法
func (human Human)sayHello() {
fmt.Println("human say hello")
} // Huamn实现了sing方法
func (human Human)sing(name string) {
fmt.Println("human sing a song named ", name)
} // Person重写方法
func (p Person)sayHello() {
fmt.Println("Person say Hello")
} func main() {
mark := Human{"huhx", "address", 45}
var men Men = mark
men.sayHello() // var sing Sing = mark // 由于Human实现了Sing的sing方法
sing.sing("huhx") var men2 Men = Person{mark, "15527100207"}
men2.sayHello() var menAdnstring MenAndSing = mark
menAdnstring.sayHello()
menAdnstring.sing("huhx")
}
友情链接
最新文章
- ArcGIS10.2中文版破解教程
- scala学习心得3
- redis-集群(cluster)扫盲篇(一)
- RETINA显示屏下ICON优化方法
- Query的选择器中的通配符[id^=&#39;code&#39;]或[name^=&#39;code&#39;]
- 存储过程Oracle(一)
- DIV+CSS 网页布局之:两列布局
- javaweb jsp页面上传excel文件
- uva 11572 - Unique Snowflakes(和书略有不同)
- NOIP2016DAY1题解
- Wordpress上传文件 “无法建立目录wp-content/uploads/2018/25。有没有上级目录的写权限?”
- Spring cloud gateway
- eclipse 关联 Maven本地仓库的配置
- 深入分析几种PHP获取客户端IP的情况转
- 【Python编程:从入门到实践】chapter5 if语句
- poj1836 Alignment
- XShell通过中转服务器直接连接目标服务器
- 错误:Could not create the Android package. See the Output (Build) window for more details
- Windows2003 Webshell默认权限
- Python爬虫实战一之爬取糗事百科段子