深入理解GO语言的面向对象_Golang

前言

有过C++语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,C++中主要是通过this指针来完成的;继承,就是指class之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个class只需要按照接口实现自己的回调函数就可以了。

作为集大成者的Go语言,自然不会在面向对象上面无所作为。相比较C++、Java、C#等面向对象语言而言,它的面向对象更简单,也更容易理解。

go语言中并没有像C++,Java语言中这类的Class,它只含有像C语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是go的面向对象,包括go语言中的map等操作都是借助了结构体。其实,说白了,C++、Java等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。然而这使得很多人刚接触面向对象的时候很不理解这些东西。

下面,说所面向对象在go中的写法:

如果我们要再Java中定义一个Rect,可以求其面积,我们应该这么写

public class Rect {
 public int x;
 public int y;
 public int Area() {
 return x*y;
 }
}

很简单,那么Go语言中怎么做呢?Go中并不存在所谓的类,所有的类都是用结构体表示的,所以要写一个类,我们先得定义一个结构体:

type Rect struct {
 x, y int
}

这是一个Rect的结构体,那么一个类中,不仅要存在变量,还要有成员函数,那么go的成员函数是这么写的:

func (r *Rect) Area() int {
 return r.x*r.y
}

这个成员函数的功能是求面积的,显然,这个成员函数值对Rect的结构体适用,这样就实现了所谓的封装,那么,我们如何去创建并初始化类的实例呢

go语言提供了很多方式:

rect :=new(Rect)
rect :=&Rect{}
rect :=&Rect{1,2}
rect :=&Rect{x:3,y:4}

那么,一遍情况下,如果没有指定成员变量的大小,go语言会默认初始化成员变量为0,bool类型的为false

那么,构造函数呢?

我们可以这么来写:

func NewRect(x,y int) *Rect {
 return &Rect{x,y}
}

其实,这也是我们平时new一个对象时候的真正操作,只是go把他真正展现给我们了。

看到这里,我们似乎还有一个疑问,那就是,像java、C++中对于可见性的描述呢,go语言中不存在public等关键字,go语言中直接选择用字母大小写控制。

一个变量以大写字母开头则表示对其他包可见,如果想要不可见,那么使用小写字母即可,但是go语言中的可见性控制只是针对包的,并不针对类,也就是,同一个包下的类都是可见的。这个时候我们就可以知道了为什么输出语句是这样写的了吧:

fmt.Println("hello world")

因为此函数对其他包是可见的。

总结

以上就是GO语言面向对象的全部内容,希望这篇文章的内容对大家学习或者使用GO语言能有所帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索面向对象
, 方法
, golang
, 私有
go对象
深入理解面向对象、golang 面向对象、深入php面向对象、深入浅出面向对象、面向对象的理解,以便于您获取更多的相关知识。

时间: 2024-09-10 20:24:09

深入理解GO语言的面向对象_Golang的相关文章

"面向对象"究竟是个什么概念,谁用最简单最好理解的语言或实例说明一下

问题描述 刚开始接触编程,这个概念是在太难理解,书上写的看不懂谁能用最好理解,最简单的说法解释一下啊~最好有个例子,分别用面向对象的方法和不面向对象的方法做出来,说明"面向对象"的编程和普通的编程区别何在 解决方案 解决方案二: 这个网上很多呢,解决方案三: 这个网上很多呢,解决方案四: 这个问题深了解决方案五: 呵呵,csdn这样的帖子太多了.解决方案六: 男人.女人你可以从"人"这个对象继承得到"女人"这个对象然后从"女人"

java编程思想-如何更好的理解java中的面向对象

问题描述 如何更好的理解java中的面向对象 现在学到java的面向对象,有时候会把很多知识点弄混乱,怎么样才能把面向对象的知识点梳理好啊 解决方案 万物皆对象!!!你可以这样理解,面向对象的思想主要是让我们程序员更好的理解编程,因为和机器交流语法比较难懂,所有为了让编程更简单人们就提出了面向对象的思想.就是我们将任何一个东西都可以想象成一个有血有肉的.比如一本书.我们可以知道书可以有书名,可以页数,可以有类容等等这就是我们所说的属性,书可能还有翻页等这些动作这就相当于方法(有些语言叫做函数)了

《JavaScript忍者秘籍》——1.2 理解JavaScript语言

1.2 理解JavaScript语言 很多JavaScript程序员,在工作中不断进步,直到能够熟练使用大量的JavaScript语言元素,包括对象.函数(如果他们始终关注编码趋势)甚至是匿名内联函数.然而,在许多情况下,这些技巧可能并没有超出基础水平.此外,这些程序员,通常对JavaScript中闭包(closures)的目的和实现有着非常匮乏的理解,而闭包从根本上例证了函数对于该语言的重要性. JavaScript中,对象.函数和闭包之间有着很密切的关系(如图1.1所示).理解这三个概念之间

理解C语言——从小菜到大神的晋级之路(1)——引言:C语言的前世今生

第一课的视频链接点这里 C语言是现在应用最为广泛的编程语言之一,也是现在依然流行的编程语言中历史最悠久的一种之一.在目前业界广泛使用的编程语言中,许多 种语言是以C为基础发展而来.在多类大学的工程类专业尤其是信息类专业的教学计划中,C语言也是极为重要的基础课之一. 而对于一名以编译型语言为主要开发工具的程序员来说,熟练掌握C语言的用法和理论也可以对其他编程语言获得更深的理解.因此,在这一系列教程中我们希望可以深入理解C语言的方方面面,为后续理解更高级的技术奠定更好的基础. 1.参考资料 <C程序

如何理解c语言编程的运算符自右向左

问题描述 如何理解c语言编程的运算符自右向左 p++ ,自右向左不是要先算P++然后在计算(p++)吗? 解决方案 ++是一个特殊符号,没有啥左右的 解决方案二: 它是先(*P)然后再执行++的 解决方案三: int a,p=5; a=p++; //后缀是先用后自加,先把p赋给a,然后p自加. a=++p; //前缀是先自加后用,先自加,然后赋给a 后缀是自右至左结合变量 前缀是自左至右结合变量 解决方案四: int a,p=5; a=p++; //后缀是先用后自加,先把p赋给a,然后p自加.

Google发布了能理解人类语言的云服务

上周三,Google智能云开发工具加入了一种云端自然语言API.这项服务可以帮助开发者的应用理解人类语言. 这对Google来说是重要的一步.现在共有云的领域中,提供商的平台对人工智能的支持是一个火热的竞争点.有了自然语言处理,开发者就可以通过程序理解人类的交流.这也是人工智能助理和聊天机器人的核心. 这个API可以返回给应用程序文本,例如一篇文章的大意梗概,或者一句话的结构分析等.这个系统也可以识别文章涉及的实体,例如人物.组织.地点.事件或产品等. 这套API基于Google之前创立的Par

用C语言模拟面向对象编程(上)

用C语言模拟面向对象编程(上) 导读:  用C语言模拟面向对象编程  虽然我接触计算机已经有将近一年了,但一直以来我不愿意写技术方面的文档,因为所谓的"技术"就是照着做得东西, 即使可能遇到一些难题,到网上搜索一下就可以解决,不值得把网上长篇累牍的文档复制粘贴到这里来.即使是自己写,也是写些别人已经解决过的东西.所以不论是数学,还是计算机,在这里我没有写过那种简单搬运知识的文章.  但即使再纯粹的技术,弄得时间长了都会产生一些独特的想法和感受,记录这些想法可能不光对自己是有意义的.今天

D1net阅闻:Google发布了能理解人类语言的云服务

Google发布了能理解人类语言的云服务   Google智能云开发工具加入了一种云端自然语言API.这项服务可以帮助开发者的应用理解人类语言.   微软已成为iPhone应用重要开发商 推出最新应用Pix   微软正在成为iPhone应用世界中的一个重要开发商.它已经将Office放上iPhone平台并且将电子邮件应用Acompli和日历应用Sunrise整合到了改版后的iOS版Outlook中.现在,微软想在iPhone平台上推出一款新应用,与苹果自己开发的内置摄像头应用展开竞争.这款新应用

深入理解C语言的函数调用过程 【转】

转自:http://blog.chinaunix.net/uid-25909619-id-4240084.html 原文地址:深入理解C语言的函数调用过程 作者:wjlkoorey258       本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程,以加深对一些基础知识的理解.    先看一个最简单的程序: 点击(此处)折叠或打开 /*test.c*/ #include <stdio.h> int foo1(int m,int n,int p) {         int x =