Skip to content

Commit 81a61b9

Browse files
committed
fixed markdown format
1 parent c3abc9b commit 81a61b9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+280
-280
lines changed

1.1.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 1.1 Go 安装
22

3-
##三种Go安装方式
3+
## 三种Go安装方式
44
你能通过多种方式来安装Go,不同的人喜欢不同的安装方式,这里我们介绍目前常见的三种安装方式,下面是每种方式的大概介绍:
55

66
- 源码安装:这是一种标准的软件安装方式,对于开发者来说,从源码安装将会是最熟悉的、特别对于经常使用unix类系统的用户。
@@ -9,7 +9,7 @@
99

1010
最后,如果你想要在自己的同一个系统里面安装多个版本的Go,你可以在第三方工具里面详细参考gvm工具,这是目前这方面做的最好的工具,除非你知道怎么处理。
1111

12-
###Go源码安装
12+
### Go源码安装
1313
在Go的源代码中,有些部分是用C和汇编写的,因此你要想从源码安装,就必须安装C的编译工具。
1414

1515
在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具。
@@ -43,9 +43,9 @@ Go使用[Mercurial](http://mercurial.selenic.com/downloads/)进行版本管理
4343
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录。
4444

4545

46-
##Go标准包安装
46+
## Go标准包安装
4747

48-
###如何判断自己的操作系统是32位还是64位?
48+
### 如何判断自己的操作系统是32位还是64位?
4949

5050
我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定自己的系统类型。
5151

@@ -98,8 +98,8 @@ Linux系统用户可通过在Terminal中执行命令`uname -a`来查看系统信
9898

9999
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录。
100100

101-
##第三方工具安装
102-
###GVM
101+
## 第三方工具安装
102+
### GVM
103103
gvm是使用第三方开发的能够管理多个版本工具,类似ruby里面的rvm工具。使用起来相当的方便,安装gvm使用如下命令:
104104

105105
bash < <(curl -s https://raw.github.com/moovweb/gvm/master/binscripts/gvm-installer)
@@ -111,14 +111,14 @@ gvm是使用第三方开发的能够管理多个版本工具,类似ruby里面
111111

112112
执行上面的命令之后GOPATH、GOROOT等环境变量自动设置好了,就可以直接使用了。
113113

114-
###apt-get
114+
### apt-get
115115
Ubuntu是目前使用最多的Linux桌面系统,使用`apt-get`命令来管理软件包,我们可以通过下面的命令来安装golang:
116116

117117
sudo add-apt-repository ppa:gophers/go
118118
sudo apt-get update
119119
sudo apt-get install golang-stable
120120

121-
###homebrew
121+
### homebrew
122122
homebrew是Mac系统下面目前使用最多的管理软件的工具,目前已经支持golang,可以通过命令一键安装go:
123123

124124
brew install go

1.3.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# 1.3 Go 命令
22

3-
##Go 命令
3+
## Go 命令
44

55
Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行`go`来查看它们:
66

77
![](images/1.3.go.png?raw=true)
88

99
这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。
1010

11-
##go build
11+
## go build
1212

1313
这个命令主要用于测试编译。在包的编译过程中,若有必要,会同时编译与之相关联的包。
1414

@@ -33,7 +33,7 @@
3333

3434
`go build`的时候会选择性地编译以系统名结尾的文件(linux、darwin、windows、freebsd)。例如Linux系统下面编译只会选择array_linux.go文件,其它系统命名后缀文件全部忽略。
3535

36-
##go clean
36+
## go clean
3737

3838
这个命令是用来移除当前源码包里面编译的文件的。这些文件包括
3939

@@ -50,11 +50,11 @@
5050

5151
我一般都是利用这个命令进行清除编译文件,然后github递交源码,在本机测试的时候这些编译文件都是和系统相关的,但是对于源码管理来说没必要
5252

53-
##go fmt
53+
## go fmt
5454

5555
有过C/C++经验的读者会知道,一些人经常为代码采取K&R风格还是ANSI风格而争论不休。在go中,代码则有标准的风格。由于之前已经有的一些习惯或其它的原因我们常将代码写成ANSI风格或者其它更合适自己的格式,这将为人们在阅读别人的代码时添加不必要的负担,所以go强制了代码格式(比如左大括号必须放在行尾),不按照此格式的代码将不能编译通过,为了减少浪费在排版上的时间,go工具集中提供了一个`go fmt`命令 它可以帮你格式化你写好的代码文件,使你写代码的时候不需要关心格式,你只需要在写完之后执行`go fmt <文件名>.go`,你的代码就被修改成了标准格式,但是我平常很少用到这个命令,因为开发工具里面一般都带了保存时候自动格式化功能,这个功能其实在底层就是调用了`go fmt`。接下来的一节我将讲述两个工具,这两个工具都自带了保存文件时自动化`go fmt`功能。
5656

57-
##go get
57+
## go get
5858

5959
这个命令是用来动态获取远程代码包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。这个命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行`go install`。下载源码包的go工具会自动根据不同的域名调用不同的源码工具,对应关系如下:
6060

@@ -65,11 +65,11 @@
6565

6666
所以为了`go get` 能正常工作,你必须确保安装了合适的源码管理工具,并同时把这些命令加入你的PATH中。其实`go get`支持自定义域名的功能,具体参见`go help remote`
6767

68-
##go install
68+
## go install
6969

7070
这个命令在内部实际上分成了两步操作:第一步是`go build`,第二步会把编译好的东西move到`$GOPATH/pkg`或者`$GOPATH/bin`
7171

72-
##go test
72+
## go test
7373

7474
执行这个命令,会自动读取源码目录下面名为`*_test.go`的文件,生成并运行测试用的可执行文件。输出的信息类似
7575

@@ -80,7 +80,7 @@
8080

8181
默认的情况下,不需要任何的参数,它会自动把你源码包下面所有test文件测试完毕,当然你也可以带上参数,详情请参考`go help testflag`
8282

83-
##go doc
83+
## go doc
8484

8585
很多人说go不需要任何的第三方文档,例如chm手册之类的(其实我已经做了一个了,[chm手册](https://github.com/astaxie/godoc)),因为它内部就有一个很强大的文档工具。
8686

@@ -92,7 +92,7 @@
9292

9393
通过命令在命令行执行 godoc -http=:端口号 比如`godoc -http=:8080`。然后在浏览器中打开`127.0.0.1:8080`,你将会看到一个golang.org的本地copy版本,通过它你可以查询pkg文档等其它内容。如果你设置了GOPATH,在pkg分类下,不但会列出标准包的文档,还会列出你本地`GOPATH`中所有项目的相关文档,这对于经常被墙的用户来说是一个不错的选择。
9494

95-
##其它命令
95+
## 其它命令
9696

9797
go还提供了其它很多的工具,例如下面的这些工具
9898

1.4.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
#1.4 Go开发工具
1+
# 1.4 Go开发工具
22

33
本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类的都是通用的。
44

5-
##LiteIDE
5+
## LiteIDE
66

77
LiteIDE是一款专门为Go语言开发的集成开发环境(IDE),由visualfc编写。支持项目管理、集成构建、GDB调试、语法高亮、自动补全、大纲显示等功能。下载地址: [http://code.google.com/p/golangide/downloads/list](http://code.google.com/p/golangide/downloads/list),根据自己的系统下载相应的发行版本。Windows和Ubuntu系统可直接打开bin下面的liteide;Mac则需通过LaunchPad打开LiteIDE.app。
88

@@ -15,7 +15,7 @@
1515
代码补全需要安装gocode,目前LiteIDE的自动化提示只支持本文件中函数的提示,还没有做到整个项目中函数的提示。
1616

1717

18-
##Sublime Text
18+
## Sublime Text
1919

2020
这里将介绍Sublime Text 2(以下简称Sublime)+GoSublime+gocode+MarGo的组合,那么为什么选择这个组合呢?
2121

1.5.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#总结
1+
# 总结
22

33
这一章中我们主要介绍了如何安装Go,以及如何配置本地的`$GOPATH`,通过设置`$GOPATH`之后如何创建项目,项目创建之后如何编译、如何安装,接着介绍了一些Go的常用命令工具,最后介绍了Go的开发工具,希望能够通过有利的工具快速的开发Go应用。
44

10.1.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# 10.1 设置默认地区
2-
##什么是Locale
2+
## 什么是Locale
33
Locale是一组描述世界上某一特定区域文本格式和语言习惯的设置的集合。locale名通常由三个部分组成:第一部分,是一个强制性的,表示语言的缩写,例如"en"表示英文或"zh"表示中文。第二部分,跟在一个下划线之后,是一个可选的国家说明符,用于区分讲同一种语言的不同国家,例如"en_US"表示美国英语,而"en_UK"表示英国英语。最后一部分,跟在一个句点之后,是可选的字符集说明符,例如"zh_CN.gb2312"表示中国使用gb2312字符集。
44

55
GO语言默认采用"UTF-8"编码集,所以我们实现i18n时不考虑第三部分,接下来我们都采用locale描述的前面两部分来作为i18n标准的locale名。
66

77

88
>在Linux和Solaris系统中可以通过`locale -a`命令列举所有支持的地区名,读者可以看到这些地区名的命名规范。对于BSD等系统,没有locale命令,但是地区信息存储在/usr/share/locale中。
99
10-
##设置Locale
10+
## 设置Locale
1111
有了上面对locale的定义,那么我们就需要根据用户的信息(访问信息、个人信息、访问域名等)来设置与之相关的locale,我们可以通过如下几种方式来设置用户的locale。
1212

13-
###通过域名设置Locale
13+
### 通过域名设置Locale
1414
设置Locale的办法这一就是在应用运行的时候采用域名分级的方式,例如,我们采用www.asta.com当做我们的英文站(默认站),而把域名www.asta.cn当做中文站。这样通过在应用里面设置域名和相应的locale的对应关系,就可以设置好地区。这样处理有几点好处:
1515

1616
- 通过URL就可以很明显的识别
@@ -42,7 +42,7 @@ GO语言默认采用"UTF-8"编码集,所以我们实现i18n时不考虑第三
4242

4343
通过域名设置Locale有如上所示的优点,但是我们一般开发Web应用的时候不会采用这种方式,因为首先域名成本比较高,开发一个Locale就需要一个域名,而且往往统一名称的域名不一定能申请的到,其次我们不愿意为每个站点去本地化一个配置,而更多的是采用url后面带参数的方式,请看下面的介绍。
4444

45-
###从域名参数设置Locale
45+
### 从域名参数设置Locale
4646
目前最常用的设置Locale的方式是在URL里面带上参数,例如www.asta.com/hello?locale=zh或者www.asta.com/zh/hello。这样我们就可以设置地区:`i18n.SetLocale(params["locale"])`
4747

4848
这种设置方式几乎拥有前面讲的通过域名设置Locale的所有优点,它采用RESTful的方式,以使得我们不需要增加额外的方法来处理。但是这种方式需要在每一个的link里面增加相应的参数locale,这也许有点复杂而且有时候甚至相当的繁琐。不过我们可以写一个通用的函数url,让所有的link地址都通过这个函数来生成,然后在这个函数里面增加`locale=params["locale"]`参数来缓解一下。
@@ -51,7 +51,7 @@ GO语言默认采用"UTF-8"编码集,所以我们实现i18n时不考虑第三
5151

5252
mux.Get("/:locale/books", listbook)
5353

54-
###从客户端设置地区
54+
### 从客户端设置地区
5555
在一些特殊的情况下,我们需要根据客户端的信息而不是通过URL来设置Locale,这些信息可能来自于客户端设置的喜好语言(浏览器中设置),用户的IP地址,用户在注册的时候填写的所在地信息等。这种方式比较适合Web为基础的应用。
5656

5757
- Accept-Language
@@ -75,7 +75,7 @@ GO语言默认采用"UTF-8"编码集,所以我们实现i18n时不考虑第三
7575

7676
当然你也可以让用户根据你提供的下拉菜单或者别的什么方式的设置相应的locale,然后我们将用户输入的信息,保存到与它帐号相关的profile中,当用户再次登陆的时候把这个设置复写到locale设置中,这样就可以保证该用户每次访问都是基于自己先前设置的locale来获得页面。
7777

78-
##总结
78+
## 总结
7979
通过上面的介绍可知,设置Locale可以有很多种方式,我们应该根据需求的不同来选择不同的设置Locale的方法,以让用户能以它最熟悉的方式,获得我们提供的服务,提高应用的用户友好性。
8080

8181
## links

10.2.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 10.2 本地化资源
22
前面小节我们介绍了如何设置Locale,设置好Locale之后我们需要解决的问题就是如何存储相应的Locale对应的信息呢?这里面的信息包括:文本信息、时间和日期、货币值、图片、包含文件以及视图等资源。那么接下来我们讲对这些信息一一进行介绍,Go语言中我们把这些格式信息存储在JSON中,然后通过合适的方式展现出来。(接下来以中文和英文两种语言对比举例,存储格式文件en.json和zh-CN.json)
3-
##本地化文本消息
3+
## 本地化文本消息
44
文本信息是我们编写Web应用中最长用到的,也是本地化资源中最多的信息,你想要以适合本地的语言显示文本信息,那么就需要建立相应的map来维护一个key-value的关系,在打印消息之前从map中去获取相应的字符串,例如下面这个例如,一个包含英文和中文的食品名称的简单的map,以及一个从该map中抽取单词的函数。
55

66
package main
@@ -45,7 +45,7 @@
4545

4646
上面的示例代码主要是为了演示我们内部实现的思路,其实最后数据是存储在JSON里面的,map我们可以通过`json.Unmarshal`获取对应的数据。
4747

48-
##本地化日期和时间
48+
## 本地化日期和时间
4949
时间和日期对于不同的地区会显示不同的时间点,而且相应的显示时间格式也是不同的,例如中文环境下可能显示:`2012年10月24日 星期三 23时11分13秒 CST`,而在英文环境下可能显示:`Wed Oct 24 23:11:13 CST 2012`。这里面我们需要解决两点:
5050

5151
1. 时区问题
@@ -77,7 +77,7 @@
7777
//%d 替换成24
7878
}
7979

80-
##本地化货币值
80+
## 本地化货币值
8181
各个地区的货币表示也不一样,我们想要根据不同的Locale显示不同的货币金额需要实现如上时间格式的处理函数,详细的实现请看下面代码:
8282

8383
en["money"] ="USD %d"
@@ -90,7 +90,7 @@
9090
}
9191

9292

93-
##本地化视图和资源
93+
## 本地化视图和资源
9494
我们在展现不同Locale的时候可能会根据不同的Locale采用不同的视图,这些视图里面包含不同的图片、css、js等各种静态资源。那么我们如何来处理这些信息呢?首先我们需要组织对应的locale文件信息,请看下面的文件目录安排:
9595

9696
views
@@ -125,7 +125,7 @@
125125

126126
这样我们在本地化视图以及资源的时候采用这种方式就可以很容易的进行扩展了。
127127

128-
##总结
128+
## 总结
129129
本小节介绍了如何使用存储本地资源,本地资源有些需要通过转换函数,有些通过lang设置,但是最后都是通过key-value的方式存储了相应的Locale对应数据,然后通过转换函数通过key读取出来相应的Locale信息,如果是文本信息就直接输出了,如果是时间日期或者货币需要结合`fmt.Printf`函数的处理才能转换成正确的信息展示,而对于不同Locale的视图和资源是最简单的,只要在路径里面增加lang就可以实现了。
130130

131131
## links

10.3.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# 10.3 国际化站点
22
前面小节介绍了如何处理本地化资源,即Locale一个相应的配置文件,那么如果处理多个的本地化资源呢?而对于一些我们经常用到的例如:简单的文本翻译、时间日期、数字等如果处理呢?本小节将一一解决这些问题。
3-
##管理多个本地包
3+
## 管理多个本地包
44

5-
##自动加载本地包
5+
## 自动加载本地包
66

7-
##template mapfunc
7+
## template mapfunc
88

99
1. 文本信息
1010
2. 时间日期
1111
3. 数字
1212

13-
##总结
13+
## 总结
1414
## links
1515
* [目录](<preface.md>)
1616
* 上一节: [本地化资源](<10.2.md>)

2.1.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
#2.1 你好,Go
1+
# 2.1 你好,Go
22

33
在开始编写应用之前,我们先从最基本的程序开始。就像你造房子之前不知道什么是地基一样,编写程序也不知道如何开始。因此,在本节中,我们要学习用最基本的语法让Go程序运行起来。
44

5-
##程序
5+
## 程序
66

77
这就像一个传统,在学习大部分语言之前,你先学会如何编写一个可以输出`hello world`的程序。
88

@@ -20,7 +20,7 @@
2020

2121
Hello, world or καλημ ́ρα κóσμ or こんにちは世界
2222

23-
##详解
23+
## 详解
2424
首先我们要了解一个概念,Go程序是通过`package`来组织的
2525

2626
`package <pkgName>`(在我们的例子中是`package main`)这一行告诉我们当前文件属于哪个包,而包名`main`则告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件。除了`main`包之外,其它的包最后都会生成`*.a`文件(也就是包文件)并放置在`$GOPATH/pkg/$GOOS_$GOARCH`中(以Mac为例就是`$GOPATH/pkg/darwin_amd64`)。
@@ -42,7 +42,7 @@
4242
最后大家可以看到我们输出的内容里面包含了很多非ASCII码字符。实际上,Go是天生支持UTF-8的,任何字符都可以直接输出,你甚至可以用UTF-8中的任何字符作为标识符。
4343

4444

45-
##结论
45+
## 结论
4646

4747
Go使用`package`(和Python的模块类似)来组织代码。`main.main()`函数(这个函数主要位于主包)是每一个独立的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者),所以它天生就具有多语言的支持。
4848

0 commit comments

Comments
 (0)