From 219a476db1a76a700e50a4f7b02f5b175f369dae Mon Sep 17 00:00:00 2001 From: xiemengjun Date: Tue, 4 Sep 2012 23:13:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dstrcut=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97=EF=BC=8C=E9=92=88=E5=AF=B9web=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E8=AF=AD=E8=A8=80=E5=BC=80=E5=8F=91=E8=80=85?= =?UTF-8?q?=E7=9A=84=E7=B1=BB=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.4.md | 20 ++++++++++---------- 3.2.md | 11 ++++++++++- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/2.4.md b/2.4.md index 6b4534d6..41def1e0 100644 --- a/2.4.md +++ b/2.4.md @@ -6,11 +6,11 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 name string age int } -看到了吗?申明一个strcut如此简单,上面的类型包含有两个字段 +看到了吗?申明一个struct如此简单,上面的类型包含有两个字段 - 一个string类型的字段name,用来保存用户名称这个属性 - 一个int类型的字段age,用来保存用户年龄这个属性 -如何使用strcut呢?请看下面的代码 +如何使用struct呢?请看下面的代码 type person struct { name string @@ -32,7 +32,7 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 P := person{age:24, name:"Tom"} -下面我们看一个完整的使用strcut的例子 +下面我们看一个完整的使用struct的例子 package main import "fmt" @@ -44,7 +44,7 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 } // 比较两个人的年龄,返回年龄大的那个人,并且返回年龄差 - // strcut也是传值的 + // struct也是传值的 func Older(p1, p2 person) (person, int) { if p1.age>p2.age { //比较p1和p2这两个人的年龄 return p1, p1.age-p2.age @@ -61,7 +61,7 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 //两个字段都写清楚的初始化 bob := person{age:25, name:"Bob"} - //按照strcut定义顺序初始化值 + //按照struct定义顺序初始化值 paul := person{"Paul", 43} tb_Older, tb_diff := Older(tom, bob) @@ -78,10 +78,10 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 bob.name, paul.name, bp_Older.name, bp_diff) } -###strcut的匿名字段 -我们上面介绍了如何定义一个strcut,定义的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。 +###struct的匿名字段 +我们上面介绍了如何定义一个struct,定义的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。 -当匿名字段是一个strcut的时候,那么这个strcut所拥有的全部字段都被隐式地引入了当前定义的这个strcut。 +当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段都被隐式地引入了当前定义的这个struct。 让我们来看一个例子,让上面说的这些更具体化 @@ -127,7 +127,7 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 mark.Human = Human{"Marcus", 55, 220} mark.Human.age -= 1 -通过匿名访问和修改字段相当的有用,但是不仅仅是strcut字段哦,所有的内置类型和自定义类型都是可以作为匿名字段的。请看下面的例子 +通过匿名访问和修改字段相当的有用,但是不仅仅是struct字段哦,所有的内置类型和自定义类型都是可以作为匿名字段的。请看下面的例子 package main import "fmt" @@ -166,7 +166,7 @@ Go语言中,也和C或者其他语言一样,我们可以声明新的类型 fmt.Println("Her preferred number is", jane.int) } -从上面例子我们看出来strcut不仅仅能够将strcut作为匿名字段、自定义类型、内置类型都可以作为匿名字段,而且可以在相应的字段上面进行函数操作(如例子中的append)。 +从上面例子我们看出来struct不仅仅能够将struct作为匿名字段、自定义类型、内置类型都可以作为匿名字段,而且可以在相应的字段上面进行函数操作(如例子中的append)。 这里有一个问题:如果human里面有一个字段叫做phone,而student也有一个字段叫做phone,那么该怎么办呢? diff --git a/3.2.md b/3.2.md index 82937ba4..492b1dda 100644 --- a/3.2.md +++ b/3.2.md @@ -44,7 +44,16 @@ ![](images/3.2.goweb.png?raw=true) -我们看到上面的代码,要编写一个web服务器很简单,只要调用http包的两个函数就可以了。 +我们看到上面的代码,要编写一个web服务器很简单,只要调用http包的两个函数就可以了。 + +>- 如果你以前是PHP程序员,那你也许就会问,我们的nginx、apache服务器不需要吗?Go就是不需要这些,因为他直接就监听tcp端口了,做了nginx做的事情,然后sayhelloName这个其实就是我们写的逻辑函数了,也就是php里面的执行逻辑类似。 + +>- 如果你以前是python程序员,那么你一定听说过tornado,这个代码和他是不是很像,对,没错,go就是拥有类似python这样动态语言的特性,写web应用很方便。 + +>- 如果你以前是ruby程序员,那么和ROR的/script/server启动有点类似。 + +我们看到我们通过简单的几行代码就已经运行起来一个web服务了,而且这个web服务内部已经支持了高并发的特性,我将会在接下来的两个小节里面详细的讲解一下go是如何实现web高并发的。 +