简介

一般来说,编程语言都会有一个 slogan 来表示它们的特点。比如提到 Clojure,一般会想到这么几个词汇:lisp on JVM、immutable、persistent;Java 的话我能想到的是企业级开发、中规中矩。对于 Go ,官网介绍到:

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

提取几个关键词:open(开放)、simple(简洁)、reliable(可靠)、efficient(高效)。这也可以说是它的设计目标。除了上面这些口号外,初学者还需要知道 Go 是一门命令式的静态语言(是指在编译时检查变量类型是否匹配),与 Java 属于同一类别。


ImperativeFunctional
DynamicPython/Ruby/JavascriptLisp/Scheme/Clojure
StaticJava/C++/Rust/GoOCaml/Scala/Haskell


由于 太简洁,不具备展示 Go 的特点,所以下面展示一段访问 httpbin,打印 response 的完整代码。

上面的代码片段包括了 Go 的主要组成:包的声明与引用、函数定义、错误处理、流程控制、。

开发环境

通过上面的代码片段,可以看出 Go 语言 simple(简洁)的特点,所以找一个最熟悉的文本编辑器,一般通过配置插件,都可以达到快速开发的目的。很久之前我就已经把所有文本编辑放到 Emacs 上,这里介绍下我的配置。

除了 这个 major mode,为了配置像 源码跳转、API 自动补全、查看函数文档等现代 IDE 必备功能,需要安装以下命令

然后再按照 里的配置,就拥有了一个功能完备的开发环境。



go run XXX.go
go test -v -run XXXgo run

数据类型
一般编程语言,分为基本的与复杂的两类。
基本的一般比较简单,表示一个值,Go 里面就有 string, bool, int8, int32(rune), int64, float32, float64, byte(uint8) 等基本类型
复杂类型一般表示多个值或具有某些高级用法,Go 里面有:

&*

下面将重点介绍 Go 里特有或用途最广的数据类型。
struct/interface
Go 里面的 struct 类似于 Java 里面的 Object,但是并没有继承,仅仅是对数据的一层包装(抽象)。相对于其他复杂类型,struct 是值类型,也就是说作为函数参数或返回值时,会拷贝一份值,值类型分配在 stack 上,与之相对的引用类型,分配在 heap 上。
初学者一般会有这样的误区,认为传值比传引用要慢,实则不然,具体涉及到 Go ,这里暂不详述,感兴趣到可以阅读:

interface{}interface{}*CachingFetcherblob.Fetcher*CachingFetcherblob.FetcherImplementsFooerFooer
for{}

一般可以使用 chan/select 来进行 Goroutine 之间的调度。chan 类似于 Java 里面的 ,且能保证 Goroutine-safe,也就是说多个 Goroutine 并发进行读写是安全的。
chan 里面的元素默认为1个,也可以在创建时指定缓冲区大小,读写支持堵塞、非堵塞两种模式,关闭一个 chan 后,再写数据时会 panic。
// chan 与 slice/map 一样,使用 make 初始化 ch := make(chan int, 2) // blocking read v := <-ch // nonblocking read, 需要注意 default 分支不能省略,否则会堵塞住 select { case v:=<-ch: default: } // blocking write ch <- v // nonblocking write select { case ch<-v: default: }
chan 作为 Go 内一重要数据类型,看似简单,实则暗藏玄妙,用时需要多加留意,这里不再展开叙述,后面打算专门写一篇文章去介绍,感兴趣的可以阅读下面的文章:

go build
{
github.com/username/packagego getdep ensure
GOGCGOGC=offGODEBUG=gctrace=1

总结
Go 最初由 Google 在 2007 为解决软件复杂度、提升开发效率的一试验品,到如今不过十二年,但无疑已经,成为。其面向接口的特有编程方式,也非常灵活,兼具动态语言的简洁与静态语言的高效,推荐大家尝试一下。Go Go Go!


扩展阅读


it你要的都有

提取码:2lle