Go基础---->go的基础学习(三)
这里面我们简单的介绍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")
}
友情链接
Go基础---->go的基础学习(三)的更多相关文章
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- Python基础学习三
Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...
- #Java学习之路——基础阶段二(第三篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
- 如何夯实(Java)编程基础,并深入学习和提高
如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...
- .net基础学java系列(三)徘徊反思
.net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...
- 20165312 C语言基础调查和JAVA学习展望
C语言基础调查和JAVA学习展望 一.有关学习技能的经历 掌握一项技能,我认为最重要的是练习和认真程度. 我在上幼儿园的时候学过电子琴,上台表演过多次,但是三四年之后就半途而废了,后来小学毕业之后对钢 ...
- Android基础——项目的文件结构(三)
Android基础--项目的文件结构(三) 代码源文件夹与资源文件夹 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目中,代码源文件夹有4个 ...
- 零基础快速入门web学习路线(含视频教程)
下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...
- 零基础的人怎么学习Java
编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...
随机推荐
- IP数据包格式
IP数据包格式 0 4 8 16 31 |4位版本 | 4位首部长度 | 8位服务类型 | 16位总长度(字节数)| |16位标识 | 3位标志 | 13位片偏移 | |8位生存时间| 8位协议 | ...
- Quill + Framework 7 移动端无法获取焦点
Quill 是一个轻量级的富文本编辑器.最近公司项目中需要用到这个东东.使用方法可以直接查看它的官网地址或者Github地址: Github地址:quilljs 官网地址:quill官网 主要说一下用 ...
- W/MessageQueue: Handler (android.os.Handler) {4241f8f8} sending message to a Handler on a dead thread
缩略信息是: sending message to a Handler on a dead thread 我是用IntentService时报的 稍微纤细一点儿的信息是: Handler (andro ...
- [oracle] oracle权限传递
三个用户:SYS.lisi.wangwu ① 系统权限的传递 lisi的初始化系统权限 SQL> select * from user_sys_privs; USERNAME PRIVILEGE ...
- QSignalMapper类处理多信号关联同一个槽的方法(2)
例1: QSignMapper *mapper = new QSignMapper(this) QPushButton *btn1 = new QPushButton(this); btn1-> ...
- MVC路由机制(转)
今天我来缕一下MVC的路由机制,因为使用MVC已经快一年了,之前也只是上手,没有系统去理会.项目完了,结合实际使用,回过头来深入一下. MVC 学习索引(点击即可) 一个请求进入IIS后 传统ASP. ...
- 【转】MFC WM_CTLCOLOR 消息
WM_CTLCOLOR消息用来完成对EDIT, STATIC, BUTTON等控件设置背景和字体颜色, 其用法如下: 1.首先在自己需要设置界面的对话框上点击右键-->建立类向导-->加入 ...
- peek函数的用法
#include <iostream> /* run this program using the console pauser or add your own getch, system ...
- 【Java面试题】51 什么时候用assert。
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制. 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保 ...
- NET Core 环境搭建和命令行CLI入门[转]
NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19 阅读:258 评论:0 收藏:0 [点我收藏+] 标签: N ...