改进一些细节的问题

This commit is contained in:
xiemengjun
2013-01-16 13:43:19 +08:00
parent dbc5877e5b
commit 7d85092bf6
18 changed files with 24 additions and 24 deletions

View File

@@ -1,8 +1,8 @@
# 总结
# 1.5 总结
这一章中我们主要介绍了如何安装Go以及如何配置本地的`$GOPATH`,通过设置`$GOPATH`之后如何创建项目项目创建之后如何编译、如何安装接着介绍了一些Go的常用命令工具最后介绍了Go的开发工具希望能够通过有利的工具快速的开发Go应用。
## links
* [目录](<preface.md>)
* 上一节: [Go开发工具](<01.4.md>)
* 下一章: [go语言基础](<02.0.md>)
* 下一章: [Go语言基础](<02.0.md>)

View File

@@ -1,4 +1,4 @@
# 2.5面向对象
# 2.5 面向对象
前面两章我们介绍了函数和struct那你是否想过函数当作struct的字段一样来处理呢今天我们就讲解一下函数的另一种形态带有接收者的函数我们称为`method`
## method

View File

@@ -1,4 +1,4 @@
# 2.6interface
# 2.6 interface
## interface
Go语言里面设计最精妙的应该算interface它让面向对象内容组织实现非常的方便当你看完这一章你就会被interface的巧妙设计所折服。

View File

@@ -1,4 +1,4 @@
# 2.8总结
# 2.8 总结
这一章我们主要介绍了Go语言的一些语法通过语法我们可以发现Go是多么的简单只有二十五个关键字。让我们再来回顾一下这些关键字都是用来干什么的。

12
03.1.md
View File

@@ -36,17 +36,17 @@ URL(Uniform Resource Locator)是“统一资源定位符”的英文缩写,用
更详细的DNS解析的过程如下这个过程有助于我们理解DNS的工作模式
1、在浏览器中输入www.qq.com域名操作系统会先检查自己本地的hosts文件是否有这个网址映射关系如果有就先调用这个IP地址映射完成域名解析。
1. 在浏览器中输入www.qq.com域名操作系统会先检查自己本地的hosts文件是否有这个网址映射关系如果有就先调用这个IP地址映射完成域名解析。
2、如果hosts里没有这个域名的映射则查找本地DNS解析器缓存是否有这个网址映射关系如果有直接返回完成域名解析。
2. 如果hosts里没有这个域名的映射则查找本地DNS解析器缓存是否有这个网址映射关系如果有直接返回完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系首先会找TCP/IP参数中设置的首选DNS服务器在此我们叫它本地DNS服务器此服务器收到查询时如果要查询的域名包含在本地配置区域资源中则返回解析结果给客户机完成域名解析此解析具有权威性。
3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系首先会找TCP/IP参数中设置的首选DNS服务器在此我们叫它本地DNS服务器此服务器收到查询时如果要查询的域名包含在本地配置区域资源中则返回解析结果给客户机完成域名解析此解析具有权威性。
4、如果要查询的域名不由本地DNS服务器区域解析但该服务器已缓存了此网址映射关系则调用这个IP地址映射完成域名解析此解析不具有权威性。
4. 如果要查询的域名不由本地DNS服务器区域解析但该服务器已缓存了此网址映射关系则调用这个IP地址映射完成域名解析此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效则根据本地DNS服务器的设置是否设置转发器进行查询如果未用转发模式本地DNS就把请求发至 “根DNS服务器”“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后如果自己无法解析它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后就会找qq.com域服务器重复上面的动作进行查询直至找到www.qq.com主机。
5. 如果本地DNS服务器本地区域文件与缓存解析都失效则根据本地DNS服务器的设置是否设置转发器进行查询如果未用转发模式本地DNS就把请求发至 “根DNS服务器”“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后如果自己无法解析它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后就会找qq.com域服务器重复上面的动作进行查询直至找到www.qq.com主机。
6、如果用的是转发模式此DNS服务器就会把请求转发至上一级DNS服务器由上一级服务器进行解析上一级服务器如果不能解析或找根DNS或把转请求转至上上级以此循环。不管是本地DNS服务器用是是转发还是根提示最后都是把结果返回给本地DNS服务器由此DNS服务器再返回给客户机。
6. 如果用的是转发模式此DNS服务器就会把请求转发至上一级DNS服务器由上一级服务器进行解析上一级服务器如果不能解析或找根DNS或把转请求转至上上级以此循环。不管是本地DNS服务器用是是转发还是根提示最后都是把结果返回给本地DNS服务器由此DNS服务器再返回给客户机。
![](images/3.1.dns_inquery.png?raw=true)

View File

@@ -1,4 +1,4 @@
# 3.5小结
# 3.5 小结
这一章我们介绍了HTTP协议, DNS解析的过程, 如何用go实现一个简陋的web server。并深入到net/http包的源码中为大家揭开如何实现此server的秘密。
我希望通过这一章的学习你能够对Go开发Web有了初步的了解我们也看到相应的代码了Go开发Web应用是很方便的同时又是相当的灵活。

View File

@@ -1,4 +1,4 @@
# 4.1处理表单的输入
# 4.1 处理表单的输入
先来看一个表单递交的例子我们有如下的表单内容命名成文件login.gtpl(放入当前新建项目的目录里面)

View File

@@ -1,4 +1,4 @@
# 4.2验证表单的输入
# 4.2 验证表单的输入
开发Web的一个原则就是不能信任用户输入的任何信息所以验证和过滤用户的输入信息就变得非常重要我们经常会在微博、新闻中听到某某网站被入侵了存在什么漏洞这些大多是是因为网站对于用户输入的信息没有做严格的验证引起的所以为了编写出安全可靠的Web程序验证表单输入的意义重大。

View File

@@ -1,4 +1,4 @@
# 4.4防止多次递交表单
# 4.4 防止多次递交表单
不知道你是否曾经看到过一个论坛或者博客,在一个帖子或者文章后面出现多条重复的记录,这些大多数是因为用户重复递交了留言的表单引起的。由于种种原因,用户经常会重复递交表单。通常这只是鼠标的误操作,如双击了递交按钮,也可能是为了编辑或者再次核对填写过的信息,点击了浏览器的后退按钮,然后又再次点击了递交按钮而不是浏览器的前进按钮。当然,也可能是故意的——比如,在某项在线调查或者博彩活动中重复投票。那我们如何有效的防止用户多次递交相同的表单呢?

View File

@@ -1,4 +1,4 @@
# 4.5处理文件上传
# 4.5 处理文件上传
你想处理一个由用户上传的文件比如你正在建设一个类似Instagram的网站你需要存储用户拍摄的照片。这种需求该如何实现呢
要使表单能够上传文件首先第一步就是要添加form的`enctype`属性,`enctype`属性有如下三种情况:

View File

@@ -1,4 +1,4 @@
# 5.2使用MySQL数据库
# 5.2 使用MySQL数据库
目前Internet上流行的网站构架方式是LAMP其中的M即MySQL, 作为数据库MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。
## MySQL驱动

View File

@@ -1,4 +1,4 @@
# 5.3使用SQLite数据库
# 5.3 使用SQLite数据库
SQLite 是一个开源的嵌入式关系数据库实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决方案SQLite是绝对值得考虑。SQLite可以是说开源的Access。

View File

@@ -1,4 +1,4 @@
# 5.4使用PostgreSQL数据库
# 5.4 使用PostgreSQL数据库
PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和对专有系统比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server的一种选择。

View File

@@ -1,4 +1,4 @@
# 5.5使用beedb库进行ORM开发
# 5.5 使用beedb库进行ORM开发
beedb是我开发的一个Go进行ORM操作的库它采用了Go style方式对数据库进行操作实现了struct到数据表记录的映射。beedb是一个十分轻量级的Go ORM框架开发这个库的本意降低复杂的ORM学习曲线尽可能在ORM的运行效率和功能之间寻求一个平衡beedb是目前开源的Go ORM框架中实现比较完整的一个库而且运行效率相当不错功能也基本能满足需求。但是目前还不支持关系关联这个是接下来版本升级的重点。
beedb是支持database/sql标准接口的ORM库所以理论上来说只要数据库驱动支持database/sql接口就可以无缝的接入beedb。目前我测试过的驱动包括下面几个

View File

@@ -1,4 +1,4 @@
# 5.6NOSQL数据库操作
# 5.6 NOSQL数据库操作
NoSQL(Not Only SQL)指的是非关系型的数据库。随着Web2.0的兴起传统的关系数据库在应付Web2.0网站特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
而Go语言作为21世纪的C语言对NOSQL的支持也是很好目前流行的NOSQL主要有redis、mongoDB、Cassandra和Membase等。这些数据库都有高性能、高并发读写等特点目前已经广泛应用于各种应用中。我接下来主要讲解一下redis和mongoDB的操作。

View File

@@ -1,4 +1,4 @@
# 5.7小结
# 5.7 小结
这一章我们讲解了Go如何设计database/sql接口然后介绍了各种第三方关系型数据库驱动的使用。接着介绍了beedb一种基于关系型数据库的ORM库如何对数据库进行简单的操作。最后介绍了NOSQL的一些知识目前Go对于NOSQL支持还是不错因为Go作为21世纪的C语言那么对于21世纪的数据库也是支持的相当好。
通过这一章的学习我们学会了如何操作各种数据库那么就解决了我们数据存储的问题这是Web里面最重要的一部分所以希望大家能够深入的去了解database/sql的设计思想。

View File

@@ -1,7 +1,7 @@
# 12.3 应用部署
程序开发完毕之后我们现在要部署Web应用程序了但是我们如何来部署这些应用程序呢因为Go程序编译之后是一个可执行文件编写过C程序的读者一定知道采用daemon就可以完美的实现程序后台持续运行但是目前Go还无法完美的实现daemon因此针对Go的应用程序部署我们可以利用第三方工具来管理第三方的工具有很多例如Supervisord、upstart、daemontools等这小节我介绍目前自己系统中采用的工具Supervisord。
## daemon
目前Go程序如果要实现daemon还不行详细的见这个Go语言的bug<http://code.google.com/p/go/issues/detail?id=227>大概的意思说很难从现有的使用的线程中fork一个出来因为没有一种简单的方法来确保所有已经使用的线程的状态一致性问题。
目前Go程序如果要实现daemon还不行详细的见这个Go语言的bug<`http://code.google.com/p/go/issues/detail?id=227`>大概的意思说很难从现有的使用的线程中fork一个出来因为没有一种简单的方法来确保所有已经使用的线程的状态一致性问题。
但是我们可以看到很多网上的一些实现daemon的方法例如下面两种方式

View File

@@ -4,4 +4,4 @@
## links
* [目录](<preface.md>)
* 上一章: [实现博客的增删改](<13.5.md>)
* 下一节: [扩展博客管理系统](<14.0.md>)
* 下一节: [扩展Web框架](<14.0.md>)