树莓派做网站,银川网站建设一条龙,企业网站赏析,wordpress 登陆原理由Alan A. A. Donovan与Brian W. Kernighan共同编著的新书《Go编程语言》(Go Programming Language#xff09;对Go这门语言进行了一次精彩的介绍。本书涵盖了包括Go语言于2015年8月所发布的最新稳定版本1.5中的内容。读者应当具备类C或Python风格语言的编程经验#xff0c;但…由Alan A. A. Donovan与Brian W. Kernighan共同编著的新书《Go编程语言》(Go Programming Language对Go这门语言进行了一次精彩的介绍。本书涵盖了包括Go语言于2015年8月所发布的最新稳定版本1.5中的内容。读者应当具备类C或Python风格语言的编程经验但并不限定于具体某种语言。由于Go是一种编译型的类型化语言因此具有这方面编程经验的开发者与偏重于脚本语言或非类型语言的开发者相比这门语言的学习曲线将显得不那么陡峭。\本书的前半部分涵盖了Go编程语言的基础包括源文件的格式与Unicode编码、变量、值类型以及结构体、Map、数组以及Slice等等。前半部分的结尾描述了Go语言的异常处理机制Panic与Recover。\本书的下半部分专注于在Go语言中独树一职的一些特性不用继承而实现面向对象编程、隐式接口实现当然还有通过协程goroutine实现并发编程。本书的结尾部分讲述了一些实用的打包技巧、如何使用标准的Go工具进行测试以及关于反射及非安全代码的参考。\整本书中所介绍的示例都提供了相应的代码可在本书的官网上下载也就是说可以通过以下命令在Linux系统上运行示例代码$ export GOPATH$HOME/gobook # choose workspace directory\$ go get gopl.io/ch1/helloworld # fetch, build, install\$ $GOPATH/bin/helloworld # run\\对于在其他类型的系统中使用Go的读者来说他们必须对示例代码进行一些调整。比方说要将GOPATH的设置方式变为set GOPATH“%HOMEPATH%\\gobook”并通过调用%GOPATH%\\bin\\helloworld的方式运行。\本书的第一章可在本书的官网上免费下载就表现出了本书的风格并且在本书的文字之间提供了丰富的示例这样的风格一直延续到了本书的结尾。\第一章本身的内容进展很快从如何通过类似于uniq这样的Unix工具的实现运行经典的“hello world”示例开始一直讲到如何生成活动的Lissajous图形、并通过一个HTTP服务返回该图形。由于Go是由Google推出的语言因此在网络应用示例部分还介绍了并发式web爬虫的概念。\虽然第一章名为“指南”但读者可能会发现略过Lissajous图形示例与网络应用示例或许是种更好的做法尤其是对于那些没有数学背景的读者来说。好在这些示例仅仅是本书之后将涵盖的内容的一部分样本等读者阅读到后面这部分时应该能够更轻松地理解它。当读者对于这门语言有更多的理解之后这篇指南章节的后半部分应当显得较容易理解。\除了在本书的文字之间提供了大量的示例之外每一小节通常还为读者提供了大量的练习交由读者完成因为通过动手实践进行学习的方式比起仅仅通过阅读进行学习更有效得多。在练习之后还提供了大量的挑战内容要求读者逐步完成更复杂的任务以加深对这门语言的理解。\本书第二章的开头部分介绍了Go语言的命名规范不过对于公共可见的标识符以大写字母开头与私有可见的标识符以小写字母开头之间的区别没有进行清晰地说明。有经验的Go语言用户自然了解这一标准但习惯快速翻阅的读者却很可能会忽略这一细节而两者所产生的效果的差别直到下一章关于包的部分才会真正讲到。\虽然有些瑕疵但本书也为读者提供了许多良好的建议包括如何处理错误在检测到错误时选择速错以避免错误的积累以及如何使用defer注册用于清理功能的处理函数这在释放互斥体锁时尤其实用。本书不仅仅只触及了Go语言的基础内容整本书到处可见作者的真知灼见。特别值得一提的是如何在Go的for循环中处理捕获变量captured variable由于变量的作用域所限必须在内部重新定义一个变量使它具有一个不同的作用域for _, dir : range tempDirs() {\ dir : dir // NOTE: necessary!\ // …\}\\本书对于类型、结构体以及函数function和方法method进行了着重描述因为这些元素的创建与用法与其他语言有所不同。 本书提到在创建方法时可以指定Receiver类型可选择值类型或是引用类型并能够在其中使用除this/self之外的自定义名称。在使用接口的时候类型或结构体可以隐式地满足某个接口的定义对于空的接口类型来说任何值都可以满足该接口。本书在介绍接口的部分特意涵盖了关于错误的更多细节因为在Go语言中的错误都是以接口的形式表现的。\如果对于这本《Go编程语言》的评论缺少了Go语言中独一无二的特性协程与管道channel它就不能算是一篇完整的书评。本书用了65页、即相当于本书20%左右的篇幅描述了如何使用协程异步调用函数、以及如何通过固定大小缓冲的管道或通过异步方式无缓冲实现协程之间的相互通信。在介绍如何使用管道发送简单的信号时本书为读者展示了两种选择一是将管道的闭包作为一种触发器以执行某些行为二是通过发送标记符号数据通常会包括一个布尔值、一个整数值、或仅仅是一个空结构而已以实现相同的效果。除此之外本书也展示了如何通过使用多路复用选择器在多个管道间进行信号的获取或发送。\本书着重强调了使用互斥体mutex进行数据保护的重要性它不仅能够避免数据竞态条件问题同时也强调了在某些平台中硬件本身需要在程序中加入一道强闸以避免出现由于代码顺序被更改或者缓存行的共享造成程序产生不一致结果的问题。本书描述了多种不同的锁机制例如简单的互斥体或读写锁并且给出了每种不同实现方式的性能数据对比。\本书所介绍的几个协程为读者展现了如何进行某些场景下的HTTP处理包括来自于多个客户端的网络连接以及执行多线程的web连接的抓取。在这几个章节的结尾部分作者介绍了一个基于客户端/服务器结构的聊天网络的示例聊天消息可以在多个客户端之间进行路由并且能够将资源的消耗降至最低。\本书还为读者介绍了如何使用go get工具实现包的获取以及go test这个测试工具的使用此外还介绍了CPU、内存或互斥体的性能诊断工具。最后本书对于非安全代码以及反射包进行了简单的介绍并对于这些特性的应用提出了适当的警告如无必要请不要使用他们。\在《Go编程语言》一书的出版商Addison Wesley的网站上可以购买本书的电子版也可以在分销商那里购买实体书籍。\关于本书作者\Alan Donovan是就职于Google基础设施部门的一位主管工程师专攻软件开发工具。从2012年之后他开始加入Go团队负责静态分析库与工具的设计。他同时也是oracle、godoc-analysis、eg以及gorename等工具的作者。\Brian Kernighan在2000年之前就职于贝尔实验室的计算机科学研究中心当时他负责为Unix开发语言与工具。他目前在普林斯顿大学的计算机科学系担任教授一职。他同时也是多本技术书籍的合著者之一包括《C程序设计语言》以及《程序设计实践》。\查看英文原文Book Review: The Go Programming Language