Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions ebook/02.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,26 @@ Go语言里面定义变量有多种方式。

使用`var`关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型放在变量名后面:

//定义一个名称为“variableName”,类型为"type"的变量
var variableName type
//定义一个名称为“v1”,类型为"int"的变量
var v1 int

定义多个变量

//定义三个类型都是“type”的三个变量
var vname1, vname2, vname3 type
//定义三个类型都是“int”的三个变量
var v2, v3, v4 int

定义变量并初始化值

//初始化“variableName”的变量为“value”值,类型是“type
var variableName type = value
//初始化“v5”的变量为数值1024,类型是“int
var v5 int = 1024

同时初始化多个变量

/*
定义三个类型都是"type"的三个变量,并且它们分别初始化相应的值
定义三个类型都是"int"的三个变量,并且它们分别初始化相应的值
vname1为v1,vname2为v2,vname3为v3
*/
var vname1, vname2, vname3 type= v1, v2, v3
var vname1, vname2, vname3 int= v1, v2, v3

你是不是觉得上面这样的定义有点繁琐?没关系,因为Go语言的设计者也发现了,有一种写法可以让它变得简单一点。我们可以直接忽略类型声明,那么上面的代码变成这样了:

Expand All @@ -47,7 +47,7 @@ Go语言里面定义变量有多种方式。
*/
vname1, vname2, vname3 := v1, v2, v3

现在是不是看上去非常简洁了?`:=`这个符号直接取代了`var`和`type`,这种形式叫做简短声明。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用`var`方式来定义全局变量。
现在是不是看上去非常简洁了?`:=`这个符号直接取代了`var`和`int`,这种形式叫做简短声明。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用`var`方式来定义全局变量。

`_`(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃。在这个例子中,我们将值`35`赋予`b`,并同时丢弃`34`:

Expand Down
2 changes: 1 addition & 1 deletion ebook/02.5.md
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ method的语法如下:

上面的代码设计的是如此的美妙,让人不自觉的为Go的设计惊叹!

通过这些内容,我们可以设计出基本的面向对象的程序了,但是Go里面的面向对象是如此的简单,没有任何的私有、公有关键字,通过大小写来实现(大写开头的为共有,小写开头的为私有),方法也同样适用这个原则。
通过这些内容,我们可以设计出基本的面向对象的程序了,但是Go里面的面向对象是如此的简单,没有任何的私有、公有关键字,通过大小写来实现(大写开头的为公有,小写开头的为私有),方法也同样适用这个原则。
## links
* [目录](<preface.md>)
* 上一章: [struct类型](<02.4.md>)
Expand Down
2 changes: 1 addition & 1 deletion ebook/04.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ login函数中我们根据`r.Method`来判断是显示登录界面还是处理

`r.Form`里面包含了所有请求的参数,比如URL中query-string、POST的数据、PUT的数据,所有当你在URL的query-string字段和POST冲突时,会保存成一个slice,里面存储了多个值,Go官方文档中说在接下来的版本里面将会把POST、GET这些数据分离开来。

现在我们修改一下login.gtpl里面form的action值`http://127.0.0.1:9090/login`修改为`http://127.0.0.1:9090/login?username=astaxie`,再次测试,服务器的输出username是不是一个slice。服务器端的输出如下:
现在我们修改一下login.gtpl里面form的action值`/login`修改为`/login?username=astaxie`,再次测试,服务器的输出username是不是一个slice。服务器端的输出如下:

![](images/4.1.slice.png?raw=true)

Expand Down