这里面我们简单的介绍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. Android——数据存储:手机外部存储 SD卡存储

    xml <EditText android:layout_width="match_parent" android:layout_height="wrap_cont ...

  2. js匹配浏览器类型,收藏下

    <script type="text/javascript">/** 智能机浏览器版本信息:**/  varbrowser={    versions:function ...

  3. 如何对抗、预防 SQL注入 攻击

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  4. Struts2之Domain Model(域模型)。

    使用原因 为了避免在action中有太多的类,而需要写大量的get().set(). 故在Struts2 使用 了 domain model. Action: private User user; p ...

  5. QT 交叉编译工具选择

    使用QT交叉编译,生成的都是x86的可执行文件.Zoro告诉我交叉工具配置错了. 参考链接: http://www.cnblogs.com/zengjfgit/p/4744507.html linux ...

  6. Spring 4 官方文档学习(七)核心技术之Spring AOP APIs

    请忽略本篇内容!!! 1.介绍 2.Spring中的pointcut API 2.1.概念 2.2.对pointcut的操作 2.3. AspectJ expression pointcut 2.4. ...

  7. Zookeeper CLI

    ZooKeeper命令行界面(CLI)用于与ZooKeeper集合进行交互以进行开发.它有助于调试和解决不同的选项. 要执行ZooKeeper CLI操作,首先打开ZooKeeper服务器(“bin/ ...

  8. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制

    不可在 for 循环体内修改循环变量,防止 for 循环失去控制. #include <iostream> /* run this program using the console pa ...

  9. sixxpack破解的文章!【转】

    星期天闲着没事玩游戏,玩游戏不能无外挂.于是百度了半天,找到了一个,看介绍貌似不错,就下载了下来.一看,竟然是用.net写的,下意识地Reflector了一下.发现竟是一个叫actmp的程序集.如图: ...

  10. perl readlink 函数-返回软链接指向的文件

    readlink 函数专门用于处理链接,可以返回该链接指向的文件的路径 代码示例: print readlink($prog) if (-f $prog && -l $prog):