[golang] 当用到一知半解的Go丢掉了大半年之后如何又能快速捡起 [dev][go] 入门Golang都需要了解什么

如题。

在这之后 [dev][go] 入门Golang都需要了解什么 便再没有接触过Go语言,以致今日便忘得一干二净。

现在要用,那么接下来的问题就是。我应该以一种怎么样的思路,将它拾起来。

[classic_tong @  https:////www.cnblogs.com/hugetong/p/12301487.html

一一

在我这,对编程语言的认知,无外乎便是以下这样的划分。

分类是这样:面向过程,面向对象,面向函数。集合是这样:c,c++,java,python,bash,go,lisp,haskell

html,js。

html和js是面向转有场景的,这里排除。面向函数是个人兴趣,工作中也不能用,同样排除。

余下的便是,在我面对具体要解决问题是,可以挑选的几种方式:面向过程、面向对象;C,java,python,bash,go这么几个选择。

C++也被排除,因为从我的角度,单就产出结果(性能优势)来说,GO完全能够将其覆盖。

一二

我们知道,一般的软件工程方法包括如下阶段:需求分析,概要设计,详细设计,实现,测试。

这么几个阶段。(一)中提到的这个选择,很显然是在“实现”开始的时候才会出现的。

而当这个选择出现的时候,其实我们已经决定了是面向过程还是面向对象。因为在概要设计阶段

我们便已经知道了解决问题的方法,决定了解决问题的逻辑。逻辑才是整件事情的核心。

一三

逻辑。面向过程就是决策树。面向对象就是本体论。(而面向函数就是(数学方法?),面向函数即是封装,面向对象也是封装,

所以面向对象的本质也可以化解为面向函数。接下来再讨论下去,引出的将是本体论与lamada验算之间的哲学关系,而这

已经超出了本文的讨论范围,当然也超出了我的能力范围。)

编程语言就是用来精准描述以上逻辑的工具。描述是为了记录,阅读,运行。运行也是阅读,是计算机在阅读。

一段程序,写出来主要是为了给人看的,偶尔拿到机器上跑跑。

于是,一个程序语言必须有能够达到以上描述要求的语法。(当然,计算机科学的大厦都是从0,1构建出来了,你当然可以基于基本语法来

表达复杂的事情,本文的表达排除了对这个问题的讨论。)比如bash,C来表达面向对象就不是一个好的决定。

一四

当一门语言渴望表达面向过程的逻辑时,它需要具备以下几个特性:类型抽象,数据存储(变量),判断,跳转(循环);此外为了可读性,

还应该有函数封装。(有了函数封装自然也有了递归,但是我们这里不讨论递归,或者说我没有能力讨论递归。)

当一门语言渴望表达面向对象的逻辑时,它需要具备以下几个特性:面向过程的特性(上一段),封装,继承,多态。

二一

第一节讲了那么多毫无关系的事情,接下来终于可以谈到GO了,以及面对重新捡起GO这个问题时,我该如何思考。

二二

基于以上的内容,我只需要回忆起,以下要点在Go语言中如何表达即可,他们是:

第一部分:类型,变量,判断,循环,函数定义;第二部分:封装性,继承,多肽。

以及第三部分:环境有关,运行,编译,部署,以及编辑效率提高(VIM,EMACS的高亮跳转等)。

第一部分

只需要阅读:https://golang.org/ref/spec, 虽说是官方的严谨spec,但是说实话,可读性极其差。请自行百度一段随便的

中文文档看看就好。

第二部分

https://code.tutsplus.com/zh-hans/tutorials/lets-go-object-oriented-programming-in-golang--cms-26540

这个链接非常值得读。我要的问题的答案,可以非常简答的罗列如下:

封装性:基于文件进行封装,文件也对应着包的概念(package)

继承:使用结构体匿名成员。

多肽:使用interface类型。加个new方法,返回interface类型

(另外加个题外话,还有模版,突然想到C++中的模版。模版就是对强类型语言的弱类型化处理。在强类型语言中,执行函数调用

的时候,参数的数据类型对于不同函数调用都是固定设置好的约束条件。模版要做的恰恰便是把约束条件参数化,使其变成函数的入参之一。)

第三部分

这个问题,对于我来说,从来就不是问题。略

 [classic_tong @  https:////www.cnblogs.com/hugetong/p/12301487.html

------

猜你喜欢

转载自www.cnblogs.com/hugetong/p/12301487.html