这里面我们简单的介绍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的基础学习(三)的更多相关文章

  1. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  2. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  3. #Java学习之路——基础阶段二(第三篇)

    我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...

  4. Django基础学习三_路由系统

    今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...

  5. 如何夯实(Java)编程基础,并深入学习和提高

    如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...

  6. .net基础学java系列(三)徘徊反思

    .net基础学java系列(三)徘徊反思 上一篇文章:.net基础学java系列(二)IDE 之 插件 这两天晚上看完了IDEA的教学视频:https://edu.51cto.com/course/1 ...

  7. 20165312 C语言基础调查和JAVA学习展望

    C语言基础调查和JAVA学习展望 一.有关学习技能的经历 掌握一项技能,我认为最重要的是练习和认真程度. 我在上幼儿园的时候学过电子琴,上台表演过多次,但是三四年之后就半途而废了,后来小学毕业之后对钢 ...

  8. Android基础——项目的文件结构(三)

    Android基础--项目的文件结构(三) 代码源文件夹与资源文件夹 [注]此项目文件结构仅限于Android Studio下的Android项目!!! 在一个Android项目中,代码源文件夹有4个 ...

  9. 零基础快速入门web学习路线(含视频教程)

    下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...

  10. 零基础的人怎么学习Java

    编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...

随机推荐

  1. IP数据包格式

    IP数据包格式 0 4 8 16 31 |4位版本 | 4位首部长度 | 8位服务类型 | 16位总长度(字节数)| |16位标识 | 3位标志 | 13位片偏移 | |8位生存时间| 8位协议 | ...

  2. Quill + Framework 7 移动端无法获取焦点

    Quill 是一个轻量级的富文本编辑器.最近公司项目中需要用到这个东东.使用方法可以直接查看它的官网地址或者Github地址: Github地址:quilljs 官网地址:quill官网 主要说一下用 ...

  3. 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 ...

  4. [oracle] oracle权限传递

    三个用户:SYS.lisi.wangwu ① 系统权限的传递 lisi的初始化系统权限 SQL> select * from user_sys_privs; USERNAME PRIVILEGE ...

  5. QSignalMapper类处理多信号关联同一个槽的方法(2)

    例1: QSignMapper *mapper = new QSignMapper(this) QPushButton *btn1 = new QPushButton(this); btn1-> ...

  6. MVC路由机制(转)

    今天我来缕一下MVC的路由机制,因为使用MVC已经快一年了,之前也只是上手,没有系统去理会.项目完了,结合实际使用,回过头来深入一下. MVC 学习索引(点击即可) 一个请求进入IIS后 传统ASP. ...

  7. 【转】MFC WM_CTLCOLOR 消息

    WM_CTLCOLOR消息用来完成对EDIT, STATIC, BUTTON等控件设置背景和字体颜色, 其用法如下: 1.首先在自己需要设置界面的对话框上点击右键-->建立类向导-->加入 ...

  8. peek函数的用法

    #include <iostream> /* run this program using the console pauser or add your own getch, system ...

  9. 【Java面试题】51 什么时候用assert。

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制. 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保 ...

  10. NET Core 环境搭建和命令行CLI入门[转]

      NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19      阅读:258      评论:0      收藏:0      [点我收藏+]   标签: N ...