完成了安装的重构,完成了REST的修改
This commit is contained in:
103
1.1.md
103
1.1.md
@@ -1,6 +1,51 @@
|
||||
# 1.1 Go 安装
|
||||
|
||||
##如何判断自己的操作系统是32位还是64位?
|
||||
##三种Go安装方式
|
||||
你能通过多种方式来安装Go,不同的人喜欢不同的安装方式,这里我们介绍目前常见的三种安装方式,下面是每种方式的大概介绍:
|
||||
|
||||
- 源码安装:这是一种标准的软件安装方式,对于开发者来说,从源码安装将会是最熟悉的、特别对于经常使用unix类系统的用户。
|
||||
- Go标准包安装:Go提供了方便的安装包,支持window、linux、mac等系统,这种方式适合初学者,根据自己的系统位数选中下载好相应的安装包,一路next就可以轻松安装了。
|
||||
- 第三方工具安装:目前有很多方便的第三方软件包工具,例如ubuntu的apt-get、mac的homebrew等,这种方式的安装适合那些已经熟悉了相应系统的软件安装方式。
|
||||
|
||||
最后,如果你想要在自己的同一个系统里面安装多个版本的Go,你可以在第三方工具里面详细参考gvm工具,这是目前这方面做的最好的工具,除非你知道怎么处理。
|
||||
|
||||
###Go源码安装
|
||||
在Go的源代码中,有些部分是用C和汇编写的,因此你要想从源码安装,就必须安装C的编译工具。
|
||||
|
||||
在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具。
|
||||
|
||||
在类Unix系统中,需要安装gcc等工具,例如Ubuntu系统可通过这种方式安装编译工具:`sudo apt-get install gcc libc6-dev`。
|
||||
|
||||
在Windows系统中,你需要安装MinGW,然后通过MinGW安装gcc。
|
||||
|
||||
Go使用[Mercurial](http://mercurial.selenic.com/downloads/)进行版本管理,首先你必须安装了Mercurial,然后才行下载。假设你已经安装好Mercurial,执行如下代码:
|
||||
|
||||
假设已经位于Go的安装目录 `$GO_INSTALL_DIR`下
|
||||
|
||||
hg clone -u release https://code.google.com/p/go
|
||||
cd go/src
|
||||
./all.bash
|
||||
|
||||
运行all.bash后出现"ALL TESTS PASSED"的字样的时候才算安装成功;
|
||||
|
||||
上面写的是Unix风格的,Windows下安装方式类似,只不过是运行all.bat,调用的编译器是MinGW的 gcc。
|
||||
|
||||
然后设置几个环境变量,
|
||||
|
||||
export GOROOT=$HOME/go
|
||||
export GOBIN=$GOROOT/bin
|
||||
export PATH=$PATH:$GOBIN
|
||||
|
||||
看到如下图片说明已经安装成功
|
||||
|
||||

|
||||
|
||||
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录。
|
||||
|
||||
|
||||
##Go标准包安装
|
||||
|
||||
###如何判断自己的操作系统是32位还是64位?
|
||||
|
||||
我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定自己的系统类型。
|
||||
|
||||
@@ -20,17 +65,7 @@ Linux系统用户可通过在Terminal中执行命令`uname -a`来查看系统信
|
||||
|
||||
<一段描述> i686 i686 i386 GNU/Linux
|
||||
|
||||
## Windows 安装
|
||||
|
||||
访问[下载地址][downlink],32位系统下载go1.0.2.windows-386.msi,64位系统下载go1.0.2.windows-amd64.msi。双击打开下载的文件,一路按照默认点击下一步,这个时候go已经安装到你的系统中,默认安装之后已经在你的系统环境变量中加入了`c:/go/bin`,这个时候打开cmd,输入`go`
|
||||
|
||||
看到如下图片说明已经安装成功
|
||||
|
||||

|
||||
|
||||
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。
|
||||
|
||||
## Mac 安装
|
||||
### Mac 安装
|
||||
|
||||
访问[下载地址][downlink],32位系统下载go1.0.2.darwin-386.pkg,64位系统下载go1.0.2.darwin-amd64.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中,默认已经在PATH中增加了相应的`~/go/bin`,这个时候打开终端,输入`go`
|
||||
|
||||
@@ -40,7 +75,7 @@ Linux系统用户可通过在Terminal中执行命令`uname -a`来查看系统信
|
||||
|
||||
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。
|
||||
|
||||
## Linux 安装
|
||||
### Linux 安装
|
||||
访问[下载地址][downlink],32位系统下载go1.0.2.linux-386.tar.gz,64位系统下载go1.0.2.linux-amd64.tar.gz,
|
||||
|
||||
假定你想要安装Go的目录为 `$GO_INSTALL_DIR`,后面替换为相应的目录路径。
|
||||
@@ -51,39 +86,43 @@ Linux系统用户可通过在Terminal中执行命令`uname -a`来查看系统信
|
||||
|
||||
然后执行`go`
|
||||
|
||||
看到如下图片说明已经安装成功
|
||||
|
||||

|
||||
看到类似上面mac安装成功的图片说明已经安装成功
|
||||
|
||||
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。
|
||||
|
||||
### Windows 安装
|
||||
|
||||
访问[下载地址][downlink],32位系统下载go1.0.2.windows-386.msi,64位系统下载go1.0.2.windows-amd64.msi。双击打开下载的文件,一路按照默认点击下一步,这个时候go已经安装到你的系统中,默认安装之后已经在你的系统环境变量中加入了`c:/go/bin`,这个时候打开cmd,输入`go`
|
||||
|
||||
## 源码安装
|
||||
在Go的源代码中,有些部分是用C和汇编写的,因此你要想从源码安装,就必须安装C的编译工具。
|
||||
看到类似上面mac安装成功的图片说明已经安装成功
|
||||
|
||||
在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具。
|
||||
在类Unix系统中,需要安装gcc等工具,例如Ubuntu系统可通过这种方式安装编译工具:`sudo apt-get install gcc libc6-dev`。
|
||||
在Windows系统中,你需要安装MinGW,然后通过MinGW安装gcc。
|
||||
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录。
|
||||
|
||||
Go使用[Mercurial](http://mercurial.selenic.com/downloads/)进行版本管理,首先你必须安装了Mercurial,然后才行下载。假设你已经安装好Mercurial,执行如下代码:
|
||||
##第三方工具安装
|
||||
###GVM
|
||||
gvm是使用第三方开发的能够管理多个版本工具,类似ruby里面的rvm工具。使用起来相当的方便,安装gvm使用如下命令:
|
||||
|
||||
假设已经位于Go的安装目录 `$GO_INSTALL_DIR`下
|
||||
bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
|
||||
|
||||
hg clone -u release https://code.google.com/p/go
|
||||
cd go/src
|
||||
./all.bash
|
||||
安装玩之后我们可以安装go了:
|
||||
|
||||
运行all.bash后出现"ALL TESTS PASSED"的字样的时候才算安装成功;
|
||||
gvm install go1.0.3
|
||||
gvm use go1.0.3
|
||||
|
||||
执行上面的命令之后GOPATH、GOROOT等环境变量自动设置好了,就可以直接使用了。
|
||||
|
||||
上面写的是Unix风格的,Windows下安装方式类似,只不过是运行all.bat,调用的编译器是MinGW的 gcc。
|
||||
###apt-get
|
||||
Ubuntu是目前我们使用桌面化最多的Linux系统,他使用`apt-get`命令来管理软件包,我们可以使用该命令还一键安装golang:
|
||||
|
||||
然后设置PATH,`export PATH=$PATH:$GO_INSTALL_DIR/go/bin`
|
||||
sudo apt-get install go
|
||||
|
||||
看到如下图片说明已经安装成功
|
||||
###homebrew
|
||||
homebrew是Mac系统下面目前使用最多的管理软件的工具,目前已经支持golang,可以通过命令一键安装go:
|
||||
|
||||

|
||||
brew install go
|
||||
|
||||
|
||||
|
||||
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。
|
||||
|
||||
## links
|
||||
* [目录](<preface.md>)
|
||||
|
||||
21
1.md
21
1.md
@@ -7,18 +7,17 @@
|
||||
* 4. [Go开发工具](1.4.md)
|
||||
* 5. [小结](1.5.md)
|
||||
|
||||
欢迎来到Go的世界,让我们开始吧!
|
||||
欢迎来到Go的世界,让我们开始吧!
|
||||
|
||||
为什么选择Go?
|
||||
- 像Python、PHP一样的开发速度
|
||||
- 拥有C语言级别的运行性能
|
||||
- 超级简单的依赖管理
|
||||
- 源码级的多并发控制
|
||||
- 具有垃圾回收机制
|
||||
- 跨平台,可交叉编译
|
||||
- 还有更多……
|
||||
|
||||
总之是一种C+Python动静结合的好语言。
|
||||
Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:
|
||||
|
||||
- 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。
|
||||
- Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。
|
||||
- Go的类型系统没有层级,因此不需要在类型之间的关系定义上花费时间。此外,尽管Go是静态类型的,该语言也试图使类型感觉起来比典型的面向对象语言更轻量级。
|
||||
- Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。
|
||||
- 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。
|
||||
|
||||
Go试图成为结合解释型编程的轻松、动态类型语言的高效以及静态类型语言的安全的编译型语言。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。
|
||||
|
||||
在本章中,我们将讲述Go的安装方法,以及如何配置项目信息。
|
||||
|
||||
|
||||
8
8.3.md
8
8.3.md
@@ -31,20 +31,20 @@ REST(REpresentational State Transfer)这个概念,首次出现是在 2000年Ro
|
||||
|
||||
Web应用要满足REST最重要的原则是:客户端和服务器之间的交互在请求之间是无状态的,即从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外此请求可以由任何可用服务器回答,这十分适合云计算之类的环境。因为是无状态的,所以客户端可以缓存数据以改进性能。
|
||||
|
||||
另一个重要的REST原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。
|
||||
另一个重要的REST原则是系统分层,这表示组件无法了解除了与它直接交互的层次以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,从而促进了底层的独立性。
|
||||
|
||||
我们看下图展示了REST的架构图,如何实现:
|
||||
下图即是REST的架构图:
|
||||
|
||||

|
||||
|
||||
当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器的实现,而且对于使用REST开发的应用程序更加容易扩展。
|
||||
|
||||
下图展示了REST的扩展新性:
|
||||
下图展示了REST的扩展性:
|
||||
|
||||

|
||||
|
||||
##RESTful的实现
|
||||
Go语言对于REST没有标准包直接支持,但是因为RESTful是基于HTTP协议实现的,所以我们可以利用Go语言的`net/http`包来实现,当然需要针对REST需要做一些改造,REST是根据不同的method来处理相应的资源,我们先来看一下REST的几个分级,请看下图:
|
||||
Go没有为REST提供直接支持,但是因为RESTful是基于HTTP协议实现的,所以我们可以利用`net/http`包来自己实现,当然需要针对REST做一些改造,REST是根据不同的method来处理相应的资源,目前已经存在的很多自称是REST的应用,其实并没有真正的实现REST,我暂且把这些应用根据实现的method分成几个级别,请看下图:
|
||||
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user