go语言面向过程 golang面向过程( 三 )


"abc".map(cc = cc + 1)
"abc"是一个字符串对象,调用它的方法 map,这是纯面向对象的思维,但在 Go 里就要转变为面向过程的思维:
name := "abc"
second := strings.Map(func(x rune) rune {
return x + 1
}, name)
注意 , 这里的 strings 是包 (package) , 调用它的公共函数 Map,被人操作的对象 name 字符串作为函数参数传入 。Go 提供的函数 len、cap、append、 等其实都是面向过程的,虽然 Go 也提供有面向对象的支持,已经习惯了面向对象编程的,刚开始学 Go 语言需要特别留意这一点 。
四、多看开源代码
学一门语言就是学一种思维方式,如今 GitHub 上可下载的开源代码海量级,通过看别人的代码 , 学习别人是如何解决问题的,养成用该语言思考的习惯,另外还能学习到一些非常有用的技巧,比如我在看一个 Go 语言性能测试框架代码时看到有以下写法:
func main() {
defer profile.Start().Stop()
...
}
这个意思是指刚进入程序时执行 Start( ) 函数 , 程序退出前调用 Stop( ) 函数,非常好的技巧啊!可以用于需要在程序执行前和程序完成后分别执行一段逻辑的场景 。再看 Start( ) 函数是怎么实现的:
func Start(options ...func(*Profile)) interface {
Stop()
} {
...
return prof
}
该函数返回了一个实现了含有 Stop( ) 函数接口的对象,如此才能在调用 Start 调用后连调 Stop 。
五、优先学会使用代码分析工具
代码分析的工具包括静态检查、测试、测试覆盖率分析、性能分析(内存、CPU)、调试工具等,工具的价值在于它可以有效帮我们发现代码问题,这在我们刚开始学一门编程语言时意义尤其重大 。
例如,以下这句 Java 赋值语句估计没有哪本教科书会告诉你有性能问题:
String sb = new String(“Hello World”);
以下这段 Java 代码你也不一定能意识到有多线程问题:
synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException
{
logger.info("start");
//连接不可用,直接抛出异常,等待接收线程连接服务器成功
if (!this.avaliable)
{
try
{
//如果连接不可用,则等待2S,然后重新检测
Thread.sleep(2000);
}
... ...
如果我们及时用 FindBugs 工具检查就会发现上面这些问题,进而你会去分析研究为什么,如此,你对这门语言的了解也会越来越多 。
另外,Go 语言自带的 vet/test/cover/pprof/trace 都是非常有用的工具,一边学一边使用这些工具分析代码,能加深对语言的理解 。
六、多练习、多实践
就象学自然语言一样,如果只知道语法不去练是没有任何效果的,只有反复地练习,慢慢才能变成自己的一项技能 。书本上的例子代码最好能从头到尾亲自敲一遍,多运行、多尝试,另外再找一些题目来练习,如能有机会参与项目开发则更好啦 , 勤动手、勤实践是最好的学习方法 。
其它的方法还有:
做好笔记,把学习中遇到的关键点和自己的思考记下来,便于后面复习和对比;
复习,学习一定要重复、重复、再重复;
学习贵在坚持,每天学一点(比如坚持每天学 1 小时) , 日积月累 。
go语言需要c语言基础吗?还是更需要java基?。?/h2>c语言最基?。?学java最好也学c,go是面向过程,所以最好有java的基础
go语言是面向对象语言吗?go既不是面向对象,也不是面向过程 , 但是如果想要实现它们其实是可以办到的
c#和go语言的区别c:面向过程,语法太麻烦c#:面向对象(跟java很像如果你对java了解估计你就会明白c&c#之间的区别了),是ms.netframework的主力之一,它的代码运行是安全的,里面没有指针 , 像java一样有垃圾回收机制 。语法基本没有区别 , 个人感觉首先c#不必对指针进行太多的研究,然后可遗址性等,其它的区别相当大 。可以说不是一个方向的 。开发环境跟开发语言也是两个不同的概念学习c#并不必须有c语言的基?。还? ,如果你学过c语言,那会事半功倍的 , 因为他们之间有很多语法是一样的 。作为初学者 , 并没有必要先去学习c语言,你只需要有c#的完整的教程就行了 。举个简单的例子,你想学开高档的轿车并不需要先去学习开低档的面包车 。但如果你已经会开面包车的话,那么学开轿车就一定会容易一些了,因为他们有很多相同的地方 。C语言:C语言是国际上广泛流行的、很有发展前途的计算机高级语言 。它适合作为系统描述语言,即可用来编写系统软件,也可用来编写应用软件 。早期的操作系统等系统软件主要是用汇编语言编写的(包括UNIX操作系统在内) 。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差 。为了提高可读性和可移植性,最好改用高级语言,但一般的高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作),例如:对内存地址的操作、位操作等) 。人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身 。于是,C语言就在这种情况下应运而生了 。C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL60 。1960年出现的ALGOL60是一种面向问题的高级语言 , 它离硬件比较远,不宜用来编写系统程序 。1963年英国的剑桥大学推出了CPL(CombinedProgram-mingLanguage)语言 。CPL语言在ALGOL60的基础上接近了硬件一些,但规模比较大 , 难以实现 。1967年英国剑桥大学的MatinRichards对CPL语言作了简化,推出了BCPL(BasicCombinedProgrammingLanguage)语言 。1970年美国贝尔实验室的KenThompson以BCPL语言为基础,又作了进一步简化 , 设计出了很简单的而且很接近硬件的B语言(取BCPL的第一个字母),并用B语言写第一个UNIX操作系统,在PDP-7上实现 。1971年在PDP-11/20上实现了B语言,并写了UNIX操作系统 。但B语言过于简单,功能有限 。1972年至1973年间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言(取BCPL的第二个字母) 。C语言既保持了BCPL和B语言的优点(精练、接近硬件),又克服了它们的缺点(过于简单、数据无类型等) 。最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的 。1973年 , K.Thom-pson和D.M.ritchie两人合作把UNIX的90%以上用C改写(UNIX第5版 。原来的UNIX操作系统是1969年由美国的贝尔实验室的K.Thompson和D.M.Ritchie开发成功的,是用汇编语言写的) 。后来,C语言多次作了改进,但主要还是在贝尔实验室内部使用 。直到1-975年UNIX第6版公布后,C语言的突出优点才引起人们普遍注意 。1977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》 , 使C移植到其它机器时所做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现 。例如,VAX , ATT等计算机系统都相继开发了UNIX 。随着UNIX的日益广泛使用,C语言也迅速得到推广 。C语言和UNIX可以说是一对孪生兄弟,在发展过程中相辅相成 。1978年以后,C语言已先后移植到大、中、小、微型机上 , 已独立于UNIX和PDP了 。现在C语言已风靡全世界 , 成为世界上应用最广泛的几种计算机语言之一 。以1978年发表的UNIX第7版中的C编译程序为基础,BrianW.Kernighan和DennisM.Ritchie(合称KR)合著了影响深远了名著《TheCProgrammingLan-guage》 , 这本书中介绍的C语言成为后来广泛使用的C语言版本的基础 , 它被称为标准C 。1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对C的发展和扩充,制定了新的标准 , 称为ANSIC 。ANSIC比原来的标准C有了很大的发展 。KR在1988年修改了他们的经典著作《TheCProgra-mmingLanguage》,按照ANSIC的标准重新写了该书 。1987年,ANSIC又公布了新标准--87ANSIC 。目前流行的C编译系统都是以它为基础的 。C#:C#是Microsoft公司设计的一种编程语言 。它松散地基于C/C++,并且有很多方面和Java类似 。Microsoft是这样描述C#的:“C#是从C和C++派生来的一种简单、现代、面向对象和类型安全的编程语言 。C#(读做‘Csharp’)主要是从C/C++编程语言家族移植过来的,C和C++的程序员会马上熟悉它 。C#试图结合VisualBasic的快速开发能力和C++的强大灵活的能力 。”附:一个简单的C#程序是怎样的?可以是这样:classCApplication{publicstaticvoidMain(){System.Console.Write(“Hello,new.NETworld!”);}}(你不能将Main()作为全局函数——C#没有全局函数)C#是面向对象的吗?是的,C#像Java和C++一样,是一个面向对象的语言 。C#有自己的类库吗?不,就像所有的.NET语言(VB.Net,JScript.Net)一样,C#访问.NET类库,C#没有自己的类库 。C#提供什么标准类型?C#支持的基本类型和C++很相似,包括int,long,float,double,char,string,arrays,structs和classes 。然而,不要假设太多,名字可能很形似,但是一些细节不相同 。例如C#中的long是64位的,而C++的long取决于平台,32位的平台上是32位的,64位的平台上是64位的 。class和struct在C++中几乎完全一样,但在C#中并不是这样的 。

推荐阅读