这里面我们简单的介绍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")
}

友情链接

最新文章

  1. ArcGIS10.2中文版破解教程
  2. scala学习心得3
  3. redis-集群(cluster)扫盲篇(一)
  4. RETINA显示屏下ICON优化方法
  5. Query的选择器中的通配符[id^=&#39;code&#39;]或[name^=&#39;code&#39;]
  6. 存储过程Oracle(一)
  7. DIV+CSS 网页布局之:两列布局
  8. javaweb jsp页面上传excel文件
  9. uva 11572 - Unique Snowflakes(和书略有不同)
  10. NOIP2016DAY1题解
  11. Wordpress上传文件 “无法建立目录wp-content/uploads/2018/25。有没有上级目录的写权限?”
  12. Spring cloud gateway
  13. eclipse 关联 Maven本地仓库的配置
  14. 深入分析几种PHP获取客户端IP的情况转
  15. 【Python编程:从入门到实践】chapter5 if语句
  16. poj1836 Alignment
  17. XShell通过中转服务器直接连接目标服务器
  18. 错误:Could not create the Android package. See the Output (Build) window for more details
  19. Windows2003 Webshell默认权限
  20. Python爬虫实战一之爬取糗事百科段子

热门文章

  1. ring0获取指定进程的PEB
  2. C语言 &#183; 简单加法
  3. Linux while 获取键盘输入退出
  4. CentOS下安装Gitlab
  5. WPF教程二:布局之StackPanel面板
  6. 看板与Scrum:哪个更适合你的团队?
  7. 非常强大的jQuery万能浮动框插件
  8. 为什么要把session存入数据库
  9. if、for、while、do 等语句自占一行
  10. linux -- ubuntu 通过命令行,设置文件及其子文件的权限