Golang知识
很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目。在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的分布式集群,大牛觉得很闹心,后来c++委员会来他们公司演讲,说c++将要添加大概35种新特性。这几个大牛的其中一个人,名为:Rob Pike,听后心中一万个xxx飘过,“c++特性还不够多吗?简化c++应该更有成就感吧”。于是乎,Rob Pike和其他几个大牛讨论了一下,怎么解决这个问题,过了一会,Rob Pike说要不我们自己搞个语言吧,名字叫“go”,非常简短,容易拼写。其他几位大牛就说好啊,然后他们找了块白板,在上面写下希望能有哪些功能(详见文尾)。接下来的时间里,大牛们开心的讨论设计这门语言的特性,经过漫长的岁月,他们决定,以c语言为原型,以及借鉴其他语言的一些特性,来解放程序员,解放自己,然后在2009年,go语言诞生。
`GOROOT`和`GOPATH`都是环境变量,其中`GOROOT`是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为`GOPATH`设置一个默认目录,参见下表。
Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用`VS Code`和`Goland`。 `VS Code`是微软开源的编辑器,而`Goland`是jetbrains出品的付费IDE。 我们这里使用`VS Code` 加插件做为go语言的开发工具。
我们在本章实现了一个单机版的对象存储服务,它提供了对象的PUT和GET方法。当客户端以PUT方法访问我们的服务时,客户端会提供对象的名字和内容,我们的服务就可以把对象的内容以文件的形式存储在服务器的本地磁盘上
一个分布式系统要求各节点分布在网络上,并通过消息传递来合作完成一个共同的目标。分布式系统的三大关键特征是:节点之间并发工作、没有全局锁以及某个节点上发生的错误不影响其他节点