提交 31022493 编写于 作者: X xiemengjun

修改文件名重新组织结构

上级 a1a6fb9a
文件已添加
# 1 GO环境配置
## 目录
* 1. [Go安装](1.1.md)
* 2. [GOPATH与工作空间](1.2.md)
* 3. [Go命令](1.3.md)
* 4. [Go开发工具](1.4.md)
* 5. [小结](1.5.md)
* 1. [Go安装](01.1.md)
* 2. [GOPATH与工作空间](01.2.md)
* 3. [Go命令](01.3.md)
* 4. [Go开发工具](01.4.md)
* 5. [小结](01.5.md)
欢迎来到Go的世界,让我们开始吧!
......@@ -23,4 +23,4 @@ Go试图成为结合解释型编程的轻松、动态类型语言的高效以及
## links
* [目录](<preface.md>)
* 下一节: [Go安装](<1.1.md>)
* 下一节: [Go安装](<01.1.md>)
......@@ -9,7 +9,7 @@ Go有多种安装方式,你可以选择自己喜欢的。这里我们介绍三
最后,如果你想在同一个系统中安装多个版本的Go,你可以参考第三方工具[GVM](https://github.com/moovweb/gvm),这是目前在这方面做得最好的工具,除非你知道怎么处理。
### Go源码安装
## Go源码安装
在Go的源代码中,有些部分是用Plan 9 C和AT&T汇编写的,因此假如你要想从源码安装,就必须安装C的编译工具。
在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具。
......@@ -132,8 +132,8 @@ homebrew是Mac系统下面目前使用最多的管理软件的工具,目前已
## links
* [目录](<preface.md>)
* 上一节: [Go环境配置](<1.md>)
* 下一节: [GOPATH 与工作空间](<1.2.md>)
* 上一节: [Go环境配置](<01.0.md>)
* 下一节: [GOPATH 与工作空间](<01.2.md>)
[downlink]: http://code.google.com/p/go/downloads/list "Go安装包下载"
[hg]: http://mercurial.selenic.com/downloads/ "Mercurial下载"
......@@ -156,5 +156,5 @@ go get本质上可以理解为首先第一步是通过源码工具clone代码到
[1] Windows系统中环境变量的形式为`%GOPATH%`,本书主要使用Unix形式,Windows用户请自行替换。
## links
* [目录](<preface.md>)
* 上一节: [GO安装](<1.1.md>)
* 下一节: [GO 命令](<1.3.md>)
* 上一节: [GO安装](<01.1.md>)
* 下一节: [GO 命令](<01.3.md>)
......@@ -104,5 +104,5 @@
## links
* [目录](<preface.md>)
* 上一节: [GOPATH与工作空间](<1.2.md>)
* 下一节: [Go开发工具](<1.4.md>)
* 上一节: [GOPATH与工作空间](<01.2.md>)
* 下一节: [Go开发工具](<01.4.md>)
......@@ -299,5 +299,5 @@ gocode的github地址:
## links
* [目录](<preface.md>)
* 上一节: [Go 命令](<1.3.md>)
* 下一节: [总结](<1.5.md>)
* 上一节: [Go 命令](<01.3.md>)
* 下一节: [总结](<01.5.md>)
......@@ -4,5 +4,5 @@
## links
* [目录](<preface.md>)
* 上一节: [Go开发工具](<1.4.md>)
* 下一章: [go语言基础](<2.md>)
* 上一节: [Go开发工具](<01.4.md>)
* 下一章: [go语言基础](<02.0.md>)
# 2 Go语言基础
## 目录
* 1. [你好,Go](2.1.md)
* 2. [Go基础](2.2.md)
* 3. [流程和函数](2.3.md)
* 4. [struct类型](2.4.md)
* 5. [面向对象](2.5.md)
* 6. [interface](2.6.md)
* 7. [并发](2.7.md)
* 8. [小结](2.8.md)
* 1. [你好,Go](02.1.md)
* 2. [Go基础](02.2.md)
* 3. [流程和函数](02.3.md)
* 4. [struct类型](02.4.md)
* 5. [面向对象](02.5.md)
* 6. [interface](02.6.md)
* 7. [并发](02.7.md)
* 8. [小结](02.8.md)
Go是一门类似C的编译型语言,但是它的编译速度非常快。这门语言的关键字总共也就二十五个,比英文字母还少一个,这对于我们的学习来说就简单了很多。先让我们看一眼这些关键字都长什么样:
......@@ -23,5 +23,5 @@ Go是一门类似C的编译型语言,但是它的编译速度非常快。这
## links
* [目录](<preface.md>)
* 上一章: [第一章总结](<1.5.md>)
* 下一节: [你好,Go](<2.1.md>)
* 上一章: [第一章总结](<01.5.md>)
* 下一节: [你好,Go](<02.1.md>)
......@@ -48,5 +48,5 @@ Go使用`package`(和Python的模块类似)来组织代码。`main.main()`
## links
* [目录](<preface.md>)
* 上一节: [Go语言基础](<2.md>)
* 下一节: [Go基础](<2.2.md>)
* 上一节: [Go语言基础](<02.0.md>)
* 下一节: [Go基础](<02.2.md>)
......@@ -445,5 +445,5 @@ slice有一些简便的操作
## links
* [目录](<preface.md>)
* 上一章: [你好,Go](<2.1.md>)
* 下一节: [流程和函数](<2.3.md>)
* 上一章: [你好,Go](<02.1.md>)
* 下一节: [流程和函数](<02.3.md>)
......@@ -514,5 +514,5 @@ Go程序会自动调用`init()`和`main()`,所以你不需要在任何地方
## links
* [目录](<preface.md>)
* 上一章: [Go基础](<2.2.md>)
* 下一节: [struct类型](<2.4.md>)
* 上一章: [Go基础](<02.2.md>)
* 下一节: [struct类型](<02.4.md>)
......@@ -203,5 +203,5 @@ Go里面很简单的解决了这个问题,最外层的优先访问,也就是
## links
* [目录](<preface.md>)
* 上一章: [流程和函数](<2.3.md>)
* 下一节: [面向对象](<2.5.md>)
* 上一章: [流程和函数](<02.3.md>)
* 下一节: [面向对象](<02.5.md>)
......@@ -317,5 +317,5 @@ method的语法如下:
通过这些内容,我们可以设计出基本的面向对象的程序了,但是Go里面的面向对象是如此的简单,没有任何的私有、公有关键字,通过大小写来实现(大写开头的为共有,小写开头的为私有),方法也同样适用这个原则。
## links
* [目录](<preface.md>)
* 上一章: [struct类型](<2.4.md>)
* 下一节: [interface](<2.6.md>)
* 上一章: [struct类型](<02.4.md>)
* 下一节: [interface](<02.6.md>)
......@@ -391,5 +391,5 @@ Go语言实现了反射,所谓反射就是动态运行时的状态。我们一
## links
* [目录](<preface.md>)
* 上一章: [面向对象](<2.5.md>)
* 下一节: [并发](<2.7.md>)
* 上一章: [面向对象](<02.5.md>)
* 下一节: [并发](<02.7.md>)
......@@ -235,5 +235,5 @@ runtime包中有几个处理goroutine的函数:
## links
* [目录](<preface.md>)
* 上一章: [interface](<2.6.md>)
* 下一节: [总结](<2.8.md>)
* 上一章: [interface](<02.6.md>)
* 下一节: [总结](<02.8.md>)
......@@ -27,5 +27,5 @@
## links
* [目录](<preface.md>)
* 上一节: [并发](<2.7.md>)
* 下一章: [Web基础](<3.md>)
* 上一节: [并发](<02.7.md>)
* 下一章: [Web基础](<03.0.md>)
# 3 Web基础
## 目录
* 1. [web工作方式](3.1.md)
* 2. [GO搭建一个简单的web服务](3.2.md)
* 3. [Go如何使得web工作](3.3.md)
* 4. [Go的http包详解](3.4.md)
* 5. [小结](3.5.md)
* 1. [web工作方式](03.1.md)
* 2. [GO搭建一个简单的web服务](03.2.md)
* 3. [Go如何使得web工作](03.3.md)
* 4. [Go的http包详解](03.4.md)
* 5. [小结](03.5.md)
学习基于Web的编程可能正是你读本书的原因。事实上,如何通过Go来编写Web应用也是我编写这本书的初衷。前面已经介绍过,Go目前已经拥有了成熟的Http处理包,这使得编写能做任何事情的动态Web程序易如反掌。在接下来的各章中将要介绍的内容,都是属于Web编程的范畴。本章则集中讨论一些与Web相关的概念和Go如何运行Web程序的话题。
## links
* [目录](<preface.md>)
* 上一章: [第二章总结](<2.8.md>)
* 下一节: [web工作方式](<3.1.md>)
* 上一章: [第二章总结](<02.8.md>)
* 下一节: [web工作方式](<03.1.md>)
......@@ -142,5 +142,5 @@ Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同
## links
* [目录](<preface.md>)
* 上一节: [Web基础](<3.md>)
* 下一节: [GO搭建一个web服务器](<3.2.md>)
* 上一节: [Web基础](<03.0.md>)
* 下一节: [GO搭建一个web服务器](<03.2.md>)
......@@ -60,5 +60,5 @@
## links
* [目录](<preface.md>)
* 上一节: [Web工作方式](<3.1.md>)
* 下一节: [Go如何使得web工作](<3.3.md>)
* 上一节: [Web工作方式](<03.1.md>)
* 下一节: [Go如何使得web工作](<03.3.md>)
......@@ -46,5 +46,5 @@ Handler:处理请求和生成返回信息的处理逻辑
## links
* [目录](<preface.md>)
* 上一节: [GO搭建一个简单的web服务](<3.2.md>)
* 下一节: [Go的http包详解](<3.4.md>)
* 上一节: [GO搭建一个简单的web服务](<03.2.md>)
* 下一节: [Go的http包详解](<03.4.md>)
......@@ -153,5 +153,5 @@ handler是一个接口,但是前一小节中的`sayhelloName`函数并没有
## links
* [目录](<preface.md>)
* 上一节: [Go如何使得web工作](<3.3.md>)
* 下一节: [小结](<3.5.md>)
* 上一节: [Go如何使得web工作](<03.3.md>)
* 下一节: [小结](<03.5.md>)
......@@ -5,5 +5,5 @@
## links
* [目录](<preface.md>)
* 上一节: [Go的http包详解](<3.4.md>)
* 下一章: [表单](<4.md>)
* 上一节: [Go的http包详解](<03.4.md>)
* 下一章: [表单](<04.0.md>)
# 4 表单
## 目录
* 1. [处理表单的输入](4.1.md)
* 2. [验证表单的输入](4.2.md)
* 3. [预防跨站脚本](4.3.md)
* 4. [防止多次递交表单](4.4.md)
* 5. [处理文件上传](4.5.md)
* 6. [小结](4.6.md)
* 1. [处理表单的输入](04.1.md)
* 2. [验证表单的输入](04.2.md)
* 3. [预防跨站脚本](04.3.md)
* 4. [防止多次递交表单](04.4.md)
* 5. [处理文件上传](04.5.md)
* 6. [小结](04.6.md)
表单是我们平常编写Web应用常用的工具,通过表单我们可以方便的让客户端和服务器进行数据的交互。对于以前开发过Web的用户来说表单都非常熟悉,但是对于C/C++程序员来说,这可能是一个有些陌生的东西,那么什么是表单呢?
......@@ -27,5 +27,5 @@ HTTP协议是一种无状态的协议,那么如何才能辨别是否是同一
## links
* [目录](<preface.md>)
* 上一章: [第三章总结](<3.5.md>)
* 下一节: [处理表单的输入](<4.1.md>)
* 上一章: [第三章总结](<03.5.md>)
* 下一节: [处理表单的输入](<04.1.md>)
......@@ -99,5 +99,5 @@ Request本身也提供了FormValue()函数来获取用户提交的参数。如r.
## links
* [目录](<preface.md>)
* 上一节: [表单](<4.md>)
* 下一节: [验证表单的输入](<4.2.md>)
* 上一节: [表单](<04.0.md>)
* 下一节: [验证表单的输入](<04.2.md>)
......@@ -159,5 +159,5 @@ Go里面提供了一个time的处理包,我们可以把用户的输入年月
## links
* [目录](<preface.md>)
* 上一节: [处理表单的输入](<4.1.md>)
* 下一节: [预防跨站脚本](<4.3.md>)
* 上一节: [处理表单的输入](<04.1.md>)
* 下一节: [预防跨站脚本](<04.3.md>)
......@@ -62,5 +62,5 @@ Go的html/template包默认帮你过滤了html标签,但是有时候你只想
## links
* [目录](<preface.md>)
* 上一节: [验证的输入](<4.2.md>)
* 下一节: [防止多次递交表单](<4.4.md>)
* 上一节: [验证的输入](<04.2.md>)
* 下一节: [防止多次递交表单](<04.4.md>)
......@@ -52,5 +52,5 @@
## links
* [目录](<preface.md>)
* 上一节: [预防跨站脚本](<4.3.md>)
* 下一节: [处理文件上传](<4.5.md>)
* 上一节: [预防跨站脚本](<04.3.md>)
* 下一节: [处理文件上传](<04.5.md>)
......@@ -150,5 +150,5 @@
## links
* [目录](<preface.md>)
* 上一节: [防止多次递交表单](<4.4.md>)
* 下一节: [小结](<4.6.md>)
* 上一节: [防止多次递交表单](<04.4.md>)
* 下一节: [小结](<04.6.md>)
......@@ -5,5 +5,5 @@
## links
* [目录](<preface.md>)
* 上一节: [处理文件上传](<4.5.md>)
* 下一章: [访问数据库](<5.md>)
* 上一节: [处理文件上传](<04.5.md>)
* 下一章: [访问数据库](<05.0.md>)
......@@ -6,15 +6,15 @@ Go没有内置的驱动支持任何的数据库,但是Go定义了database/sql
目前NOSQL已经成为Web开发的一个潮流,很多应用采用了NOSQL作为数据库,而不是以前的缓存,5.6小节将介绍MongoDB和Redis两种NOSQL数据库。
## 目录
* 1. [database/sql接口](5.1.md)
* 2. [使用MySQL数据库](5.2.md)
* 3. [使用SQLite数据库](5.3.md)
* 4. [使用PostgreSQL数据库](5.4.md)
* 5. [使用beedb库进行ORM开发](5.5.md)
* 6. [NOSQL数据库操作](5.6.md)
* 7. [小结](5.7.md)
* 1. [database/sql接口](05.1.md)
* 2. [使用MySQL数据库](05.2.md)
* 3. [使用SQLite数据库](05.3.md)
* 4. [使用PostgreSQL数据库](05.4.md)
* 5. [使用beedb库进行ORM开发](05.5.md)
* 6. [NOSQL数据库操作](05.6.md)
* 7. [小结](05.7.md)
## links
* [目录](<preface.md>)
* 上一章: [第四章总结](<4.6.md>)
* 下一节: [database/sql接口](<5.1.md>)
* 上一章: [第四章总结](<04.6.md>)
* 下一节: [database/sql接口](<05.1.md>)
......@@ -200,5 +200,5 @@ database/sql在database/sql/driver提供的接口基础上定义了一些更高
## links
* [目录](<preface.md>)
* 上一节: [访问数据库](<5.md>)
* 下一节: [使用MySQL数据库](<5.2.md>)
* 上一节: [访问数据库](<05.0.md>)
* 下一节: [使用MySQL数据库](<05.2.md>)
......@@ -133,5 +133,5 @@ stmt.Exec()函数用来执行stmt准备好的SQL语句
## links
* [目录](<preface.md>)
* 上一节: [database/sql接口](<5.1.md>)
* 下一节: [使用SQLite数据库](<5.3.md>)
* 上一节: [database/sql接口](<05.1.md>)
* 下一节: [使用SQLite数据库](<05.3.md>)
......@@ -114,5 +114,5 @@ Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接
## links
* [目录](<preface.md>)
* 上一节: [使用MySQL数据库](<5.2.md>)
* 下一节: [使用PostgreSQL数据库](<5.4.md>)
* 上一节: [使用MySQL数据库](<05.2.md>)
* 下一节: [使用PostgreSQL数据库](<05.4.md>)
......@@ -120,5 +120,5 @@ package main
## links
* [目录](<preface.md>)
* 上一节: [使用SQLite数据库](<5.3.md>)
* 下一节: [使用beedb库进行ORM开发](<5.5.md>)
* 上一节: [使用SQLite数据库](<05.3.md>)
* 下一节: [使用beedb库进行ORM开发](<05.5.md>)
......@@ -245,5 +245,5 @@ Having:用来指定having执行的时候的条件
## links
* [目录](<preface.md>)
* 上一节: [使用PostgreSQL数据库](<5.4.md>)
* 下一节: [NOSQL数据库操作](<5.6.md>)
* 上一节: [使用PostgreSQL数据库](<05.4.md>)
* 下一节: [NOSQL数据库操作](<05.6.md>)
......@@ -108,5 +108,5 @@ MongoDB是一个高性能,开源,无模式的文档型数据库,是一个
## links
* [目录](<preface.md>)
* 上一节: [使用beedb库进行ORM开发](<5.5.md>)
* 下一节: [小结](<5.7.md>)
* 上一节: [使用beedb库进行ORM开发](<05.5.md>)
* 下一节: [小结](<05.7.md>)
......@@ -5,5 +5,5 @@
## links
* [目录](<preface.md>)
* 上一节: [NOSQL数据库操作](<5.6.md>)
* 下一章: [session和数据存储](<6.md>)
* 上一节: [NOSQL数据库操作](<05.6.md>)
* 下一章: [session和数据存储](<06.0.md>)
......@@ -4,13 +4,13 @@ Web开发中一个很重要的议题就是如何做好用户的整个浏览过
6.1小节里面讲介绍session机制和cookie机制的关系和区别,6.2讲解Go语言如何来实现session,里面讲实现一个简易的session管理器,6.3小节讲解如何防止session被劫持的情况,如何有效的保护session。我们知道session其实可以存储在任何地方,6.3小节里面实现的session是存储在内存中的,但是如果我们的应用进一步扩展了,要实现应用的session共享,那么我们可以把session存储在数据库中(memcache或者redis),6.4小节将详细的讲解如何实现这些功能。
## 目录
* 1. [session和cookie](6.1.md)
* 2. [Go如何使用session](6.2.md)
* 3. [session存储](6.3.md)
* 4. [预防session劫持](6.4.md)
* 5. [小结](6.5.md)
* 1. [session和cookie](06.1.md)
* 2. [Go如何使用session](06.2.md)
* 3. [session存储](06.3.md)
* 4. [预防session劫持](06.4.md)
* 5. [小结](06.5.md)
## links
* [目录](<preface.md>)
* 上一章: [第五章总结](<5.7.md>)
* 下一节: [session和cookie](<6.1.md>)
* 上一章: [第五章总结](<05.7.md>)
* 下一节: [session和cookie](<06.1.md>)
......@@ -95,5 +95,5 @@ session机制本身并不复杂,然而其实现和配置上的灵活性却使
## links
* [目录](<preface.md>)
* 上一节: [session和数据存储](<6.md>)
* 下一节: [Go如何使用session](<6.2.md>)
* 上一节: [session和数据存储](<06.0.md>)
* 下一节: [Go如何使用session](<06.2.md>)
......@@ -211,5 +211,5 @@ SessionStart函数返回的是一个满足Session接口的变量,那么我们
## links
* [目录](<preface.md>)
* 上一节: [session和cookie](<6.1.md>)
* 下一节: [session存储](<6.3.md>)
* 上一节: [session和cookie](<06.1.md>)
* 下一节: [session存储](<06.3.md>)
......@@ -133,5 +133,5 @@
## links
* [目录](<preface.md>)
* 上一节: [Go如何使用session](<6.2.md>)
* 下一节: [预防session劫持](<6.4.md>)
* 上一节: [Go如何使用session](<06.2.md>)
* 下一节: [预防session劫持](<06.4.md>)
......@@ -77,5 +77,5 @@ session启动后,我们设置了一个值,用于记录生成sessionID的时
## links
* [目录](<preface.md>)
* 上一节: [session存储](<6.3.md>)
* 下一节: [小结](<6.5.md>)
* 上一节: [session存储](<06.3.md>)
* 下一节: [小结](<06.5.md>)
......@@ -2,5 +2,5 @@
这章我们学习了什么是session,什么是cookie,以及他们两者之间的关系。但是目前Go官方标准包里面不支持session,所以我们设计了一个session管理器,实现了session从创建到销毁的整个过程。然后定义了Provider的接口,使得可以支持各种后端的session存储,然后我们在第三小节里面介绍了如何使用内存存储来实现session的管理。第四小节我们讲解了session劫持的过程,以及我们如何有效的来防止session劫持。通过这一章的讲解,希望能够让读者了解整个sesison的执行原理以及如何实现,而且是如何更加安全的使用session。
## links
* [目录](<preface.md>)
* 上一节: [session存储](<6.4.md>)
* 下一章: [文本处理](<7.md>)
* 上一节: [session存储](<06.4.md>)
* 下一章: [文本处理](<07.0.md>)
......@@ -4,15 +4,15 @@ Web开发中对于文本处理是非常重要的一部分,我们往往需要
XML是目前很多标准接口的交互语言,很多时候和一些Java编写的webserver进行交互都是基于XML标准进行交互,7.1小节将介绍如何处理XML文本,我们使用XML之后发现它太复杂了,现在很多互联网企业对外的API大多数采用了JSON格式,这种格式描述简单,但是又能很好的表达意思,7.2小节我们将讲述如何来处理这样的JSON格式数据。正则是一个让人又爱又恨的工具,它处理文本的能力非常强大,我们在前面表单验证里面已经有所领略它的强大,7.3小节将详细的更深入的讲解如何利用好Go的正则。Web开发中一个很重要的部分就是MVC分离,在Go语言的Web开发中V有一个专门的包来支持`template`,7.4小节将详细的讲解如何使用模版来进行输出内容。7.5小节讲详细介绍如何进行文件和文件夹的操作。7.6小结介绍了字符串的相关操作。
## 目录
* 1. [XML处理](7.1.md)
* 2. [JSON处理](7.2.md)
* 3. [正则处理](7.3.md)
* 4. [模板处理](7.4.md)
* 5. [文件操作](7.5.md)
* 6. [字符串处理](7.6.md)
* 7. [小结](7.7.md)
* 1. [XML处理](07.1.md)
* 2. [JSON处理](07.2.md)
* 3. [正则处理](07.3.md)
* 4. [模板处理](07.4.md)
* 5. [文件操作](07.5.md)
* 6. [字符串处理](07.6.md)
* 7. [小结](07.7.md)
## links
* [目录](<preface.md>)
* 上一章: [第六章总结](<6.5.md>)
* 下一节: [XML处理](<7.1.md>)
* 上一章: [第六章总结](<06.5.md>)
* 下一节: [XML处理](<07.1.md>)
......@@ -217,5 +217,5 @@ Go语言的反射机制,可以利用这些tag信息来将来自XML文件中的
## links
* [目录](<preface.md>)
* 上一节: [文本处理](<7.md>)
* 下一节: [Json处理](<7.2.md>)
* 上一节: [文本处理](<07.0.md>)
* 下一节: [Json处理](<07.2.md>)
......@@ -218,5 +218,5 @@ Marshal函数只有在转换成功的时候才会返回数据,在转换的过
## links
* [目录](<preface.md>)
* 上一节: [XML处理](<7.1.md>)
* 下一节: [正则处理](<7.3.md>)
* 上一节: [XML处理](<07.1.md>)
* 下一节: [正则处理](<07.3.md>)
......@@ -233,5 +233,5 @@ CompilePOSIX和Compile的不同点在于POSIX必须使用POSIX语法,它使用
## links
* [目录](<preface.md>)
* 上一节: [Json处理](<7.2.md>)
* 下一节: [模板处理](<7.4.md>)
* 上一节: [Json处理](<07.2.md>)
* 下一节: [模板处理](<07.4.md>)
......@@ -344,5 +344,5 @@ Unix用户已经很熟悉什么是`pipe`了,`ls | grep "beego"`类似这样的
## links
* [目录](<preface.md>)
* 上一节: [正则处理](<7.3.md>)
* 下一节: [文件操作](<7.5.md>)
* 上一节: [正则处理](<07.3.md>)
* 下一节: [文件操作](<07.5.md>)
......@@ -149,5 +149,5 @@ Go语言里面删除文件和删除文件夹是同一个函数
## links
* [目录](<preface.md>)
* 上一节: [模板处理](<7.4.md>)
* 下一节: [字符串处理](<7.6.md>)
\ No newline at end of file
* 上一节: [模板处理](<07.4.md>)
* 下一节: [字符串处理](<07.6.md>)
\ No newline at end of file
......@@ -153,5 +153,5 @@
## links
* [目录](<preface.md>)
* 上一节: [文件操作](<7.5.md>)
* 下一节: [小结](<7.7.md>)
\ No newline at end of file
* 上一节: [文件操作](<07.5.md>)
* 下一节: [小结](<07.7.md>)
\ No newline at end of file
......@@ -3,5 +3,5 @@
## links
* [目录](<preface.md>)
* 上一节: [字符串处理](<7.6.md>)
* 下一节: [Web服务](<8.md>)
* 上一节: [字符串处理](<07.6.md>)
* 下一节: [Web服务](<08.0.md>)
......@@ -12,13 +12,13 @@ SOAP是W3C在跨网络信息传递和远程计算机函数调用方面的一个
Go语言是21世纪的C语言,我们追求的是性能、简单,所以我们在8.1小节里面介绍如何使用Socket编程,很多游戏服务都是采用Socket来编写服务段,因为HTTP协议相对而言比较耗费性能,让我们看看Go语言如何来Socket编程。目前随着HTML5的发展,webSockets也逐渐的成为很多页游公司接下来开发的一些手段,我们将在8.2小节里面讲解Go语言如何编写webSockets的代码。
## 目录
* 1. [Socket编程](8.1.md)
* 2. [WebSocket](8.2.md)
* 3. [REST](8.3.md)
* 4. [RPC](8.4.md)
* 5. [小结](8.5.md)
* 1. [Socket编程](08.1.md)
* 2. [WebSocket](08.2.md)
* 3. [REST](08.3.md)
* 4. [RPC](08.4.md)
* 5. [小结](08.5.md)
## links
* [目录](<preface.md>)
* 上一章: [第七章总结](<7.5.md>)
* 下一节: [Socket编程](<8.1.md>)
* 上一章: [第七章总结](<07.5.md>)
* 下一节: [Socket编程](<08.1.md>)
......@@ -322,5 +322,5 @@ Go语言包中处理UDP Socket和TCP Socket不同的地方就是在服务器端
## links
* [目录](<preface.md>)
* 上一节: [Web服务](<8.md>)
* 下一节: [WebSocket](<8.2.md>)
* 上一节: [Web服务](<08.0.md>)
* 下一节: [WebSocket](<08.2.md>)
......@@ -141,5 +141,5 @@ WebSocket分为客户端和服务端,接下来我们将实现一个简单的
## links
* [目录](<preface.md>)
* 上一节: [Socket编程](<8.1.md>)
* 下一节: [REST](<8.3.md>)
* 上一节: [Socket编程](<08.1.md>)
* 下一节: [REST](<08.3.md>)
......@@ -105,5 +105,5 @@ REST是一种架构风格,汲取了WWW的成功经验:无状态,以资源
## links
* [目录](<preface.md>)
* 上一节: [WebSocket](<8.2.md>)
* 下一节: [RPC](<8.4.md>)
* 上一节: [WebSocket](<08.2.md>)
* 下一节: [RPC](<08.4.md>)
......@@ -386,5 +386,5 @@ Go已经提供了对RPC的良好支持,通过上面HTTP、TCP、JSON RPC的实
## links
* [目录](<preface.md>)
* 上一节: [REST](<8.3.md>)
* 下一节: [小结](<8.5.md>)
* 上一节: [REST](<08.3.md>)
* 下一节: [小结](<08.5.md>)
......@@ -2,5 +2,5 @@
这一章我们介绍了目前流行的几种主要的网络应用开发方式,第一小节介绍了网络编程中的基础:Socket编程,因为现在网络正在朝云的方向快速进化,作为这一技术演进的基石的的socket知识,作为开发者的你,是必须要掌握的。第二小节介绍了正愈发流行的HTML5中一个重要的特性WebSocket,通过它,服务器可以实现主动的push消息,以简化以前ajax轮询的模式。第三小节介绍了REST编写模式,这种模式特别适合来开发网络应用API,目前移动应用的快速发展,我觉得将来会是一个潮流。第四小节介绍了Go实现的RPC相关知识,对于上面四种开发方式,Go都已经提供了良好的支持,net包及其子包,是所有涉及到网络编程的工具的所在地。如果你想更加深入的了解相关实现细节,可以尝试阅读这个包下面的源码。
## links
* [目录](<preface.md>)
* 上一节: [RPC](<8.4.md>)
* 下一章: [安全与加密](<9.md>)
* 上一节: [RPC](<08.4.md>)
* 下一章: [安全与加密](<09.0.md>)
......@@ -12,15 +12,15 @@
加密的本质就是扰乱数据,某些不可恢复的数据扰乱我们称为单项加密或者散列算法。另外还有一种双向加密方式,也就是可以对加密后的数据进行解密。我们将会在9.6小节介绍如何实现这种双向加密方式。
## 目录
* 1 [预防CSRF攻击](9.1.md)
* 2 [确保输入过滤](9.2.md)
* 3 [避免XSS攻击](9.3.md)
* 4 [避免SQL注入](9.4.md)
* 5 [存储密码](9.5.md)
* 6 [加密和解密数据](9.6.md)
* 7 [小结](9.7.md)
* 1 [预防CSRF攻击](09.1.md)
* 2 [确保输入过滤](09.2.md)
* 3 [避免XSS攻击](09.3.md)
* 4 [避免SQL注入](09.4.md)
* 5 [存储密码](09.5.md)
* 6 [加密和解密数据](09.6.md)
* 7 [小结](09.7.md)
## links
* [目录](<preface.md>)
* 上一章: [第八章总结](<8.5.md>)
* 下一节: [预防CSRF攻击](<9.1.md>)
* 上一章: [第八章总结](<08.5.md>)
* 下一节: [预防CSRF攻击](<09.1.md>)
......@@ -87,5 +87,5 @@ CSRF的防御可以从服务端和客户端两方面着手,防御效果是从
## links
* [目录](<preface.md>)
* 上一节: [安全与加密](<9.md>)
* 下一节: [确保输入过滤](<9.2.md>)
* 上一节: [安全与加密](<09.0.md>)
* 下一节: [确保输入过滤](<09.2.md>)
......@@ -68,5 +68,5 @@
## links
* [目录](<preface.md>)
* 上一节: [预防CSRF攻击](<9.1.md>)
* 下一节: [避免XSS攻击](<9.3.md>)
* 上一节: [预防CSRF攻击](<09.1.md>)
* 下一节: [避免XSS攻击](<09.3.md>)
......@@ -48,5 +48,5 @@ XSS漏洞是相当有危害的,在开发Web应用的时候,一定要记住
## links
* [目录](<preface.md>)
* 上一节: [确保输入过滤](<9.2.md>)
* 下一节: [避免SQL注入](<9.4.md>)
* 上一节: [确保输入过滤](<09.2.md>)
* 下一节: [避免SQL注入](<09.4.md>)
......@@ -65,5 +65,5 @@ SQL注入攻击的危害这么大,那么该如何来防治呢?下面这些建
## links
* [目录](<preface.md>)
* 上一节: [避免XSS攻击](<9.3.md>)
* 下一节: [存储密码](<9.5.md>)
* 上一节: [避免XSS攻击](<09.3.md>)
* 下一节: [存储密码](<09.5.md>)
......@@ -85,5 +85,5 @@ Go语言对这三种加密算法的实现如下所示:
## links
* [目录](<preface.md>)
* 上一节: [确保输入过滤](<9.4.md>)
* 下一节: [加密和解密数据](<9.6.md>)
* 上一节: [确保输入过滤](<09.4.md>)
* 下一节: [加密和解密数据](<09.6.md>)
......@@ -118,5 +118,5 @@ Go语言的`crypto`里面支持对称加密的高级加解密包有:
## links
* [目录](<preface.md>)
* 上一节: [存储密码](<9.5.md>)
* 下一节: [小结](<9.7.md>)
* 上一节: [存储密码](<09.5.md>)
* 下一节: [小结](<09.7.md>)
......@@ -5,5 +5,5 @@
## links
* [目录](<preface.md>)
* 上一节: [加密和解密数据](<9.6.md>)
* 下一节: [国际化和本地化](<10.md>)
* 上一节: [加密和解密数据](<09.6.md>)
* 下一节: [国际化和本地化](<10.0.md>)
文件已移动
......@@ -81,5 +81,5 @@ GO语言默认采用"UTF-8"编码集,所以我们实现i18n时不考虑第三
## links
* [目录](<preface.md>)
* 上一节: [国际化和本地化](<10.md>)
* 上一节: [国际化和本地化](<10.0.md>)
* 下一节: [本地化资源](<10.2.md>)
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -3,4 +3,4 @@
## links
* [目录](<preface.md>)
* 上一节: [国际化站点](<10.3.md>)
* 下一节: [错误处理,故障排除和测试](<11.md>)
* 下一节: [错误处理,故障排除和测试](<11.0.md>)
文件已移动
......@@ -183,5 +183,5 @@ Go在错误处理上采用了与C类似的检查返回值的方式,而不是
## links
* [目录](<preface.md>)
* 上一节: [错误处理,调试和测试](<11.md>)
* 上一节: [错误处理,调试和测试](<11.0.md>)
* 下一节: [使用GDB调试](<11.2.md>)
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -4,4 +4,4 @@
## links
* [目录](<preface.md>)
* 上一节: [Go怎么写测试用例](<11.3.md>)
* 下一节: [部署与维护](<12.md>)
\ No newline at end of file
* 下一节: [部署与维护](<12.0.md>)
\ No newline at end of file
文件已移动
......@@ -162,5 +162,5 @@ seelog支持自定义日志处理,下面是我基于它自定义的日志处
## links
* [目录](<preface.md>)
* 上一章: [部署与维护](<12.md>)
* 上一章: [部署与维护](<12.0.md>)
* 下一节: [网站错误处理](<12.2.md>)
\ No newline at end of file
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -15,4 +15,4 @@
## links
* [目录](<preface.md>)
* 上一章: [备份和恢复](<12.4.md>)
* 下一节: [构建博客系统](<13.md>)
\ No newline at end of file
* 下一节: [构建博客系统](<13.0.md>)
\ No newline at end of file
文件已移动
......@@ -43,5 +43,5 @@
本小节介绍了博客系统从设置GOPATH到目录建立这样的基础信息,也简单介绍了框架结构采用的MVC模式,博客系统中数据流的执行流程,最后通过这些流程设计了博客系统的目录结构,至此,我们基本完成一个框架的搭建,接下来的几个小节我们将会逐个实现。
## links
* [目录](<preface.md>)
* 上一章: [构建博客系统](<13.md>)
* 上一章: [构建博客系统](<13.0.md>)
* 下一节: [自定义路由器设计](<13.2.md>)
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
......@@ -4,4 +4,4 @@
## links
* [目录](<preface.md>)
* 上一章: [实现博客的增删改](<13.5.md>)
* 下一节: [扩展博客管理系统](<14.md>)
\ No newline at end of file
* 下一节: [扩展博客管理系统](<14.0.md>)
\ No newline at end of file
文件已移动
......@@ -66,5 +66,5 @@ Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。Boot
## links
* [目录](<preface.md>)
* 上一节: [扩展Web框架](<14.md>)
* 上一节: [扩展Web框架](<14.0.md>)
* 下一节: [Session支持](<14.2.md>)
\ No newline at end of file
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
文件模式从 100644 更改为 100755
* 1.[Go环境配置](1.md)
- 1.1. [Go安装](1.1.md)
- 1.2. [GOPATH 与工作空间](1.2.md)
- 1.3. [Go 命令](1.3.md)
- 1.4. [Go开发工具](1.4.md)
- 1.5. [小结](1.5.md)
* 2.[Go语言基础](2.md)
- 2.1. [你好,Go](2.1.md)
- 2.2. [Go基础](2.2.md)
- 2.3. [流程和函数](2.3.md)
- 2.4. [struct](2.4.md)
- 2.5. [面向对象](2.5.md)
- 2.6. [interface](2.6.md)
- 2.7. [并发](2.7.md)
- 2.8. [小结](2.8.md)
* 3.[Web基础](3.md)
- 3.1 [web工作方式](3.1.md)
- 3.2 [Go搭建一个简单的web服务](3.2.md)
- 3.3 [Go如何使得web工作](3.3.md)
- 3.4 [Go的http包详解](3.4.md)
- 3.5 [小结](3.5.md)
* 4.[表单](4.md)
- 4.1 [处理表单的输入](4.1.md)
- 4.2 [验证表单的输入](4.2.md)
- 4.3 [预防跨站脚本](4.3.md)
- 4.4 [防止多次递交表单](4.4.md)
- 4.5 [处理文件上传](4.5.md)
- 4.6 [小结](4.6.md)
* 5.[访问数据库](5.md)
- 5.1 [database/sql接口](5.1.md)
- 5.2 [使用MySQL数据库](5.2.md)
- 5.3 [使用SQLite数据库](5.3.md)
- 5.4 [使用PostgreSQL数据库](5.4.md)
- 5.5 [使用beedb库进行ORM开发](5.5.md)
- 5.6 [NOSQL数据库操作](5.6.md)
- 5.7 [小结](5.7.md)
* 6.[session和数据存储](6.md)
- 6.1 [session和cookie](6.1.md)
- 6.2 [Go如何使用session](6.2.md)
- 6.3 [session存储](6.3.md)
- 6.4 [预防session劫持](6.4.md)
- 6.5 [小结](6.5.md)
* 7.[文本文件处理](7.md)
- 7.1 [XML处理](7.1.md)
- 7.2 [JSON处理](7.2.md)
- 7.3 [正则处理](7.3.md)
- 7.4 [模板处理](7.4.md)
- 7.5 [文件操作](7.5.md)
- 7.6 [字符串处理](7.6.md)
- 7.7 [小结](7.7.md)
* 8.[Web服务](8.md)
- 8.1 [Socket编程](8.1.md)
- 8.2 [WebSocket](8.2.md)
- 8.3 [REST](8.3.md)
- 8.4 [RPC](8.4.md)
- 8.5 [小结](8.5.md)
* 9.[安全与加密](9.md)
- 9.1 [预防CSRF攻击](9.1.md)
- 9.2 [确保输入过滤](9.2.md)
- 9.3 [避免XSS攻击](9.3.md)
- 9.4 [避免SQL注入](9.4.md)
- 9.5 [存储密码](9.5.md)
- 9.6 [加密和解密数据](9.6.md)
- 9.7 [小结](9.7.md)
* 10.[国际化和本地化](10.md)
* 1.[Go环境配置](01.0.md)
- 1.1. [Go安装](01.1.md)
- 1.2. [GOPATH 与工作空间](01.2.md)
- 1.3. [Go 命令](01.3.md)
- 1.4. [Go开发工具](01.4.md)
- 1.5. [小结](01.5.md)
* 2.[Go语言基础](02.0.md)
- 2.1. [你好,Go](02.1.md)
- 2.2. [Go基础](02.2.md)
- 2.3. [流程和函数](02.3.md)
- 2.4. [struct](02.4.md)
- 2.5. [面向对象](02.5.md)
- 2.6. [interface](02.6.md)
- 2.7. [并发](02.7.md)
- 2.8. [小结](02.8.md)
* 3.[Web基础](03.0.md)
- 3.1 [web工作方式](03.1.md)
- 3.2 [Go搭建一个简单的web服务](03.2.md)
- 3.3 [Go如何使得web工作](03.3.md)
- 3.4 [Go的http包详解](03.4.md)
- 3.5 [小结](03.5.md)
* 4.[表单](04.0.md)
- 4.1 [处理表单的输入](04.1.md)
- 4.2 [验证表单的输入](04.2.md)
- 4.3 [预防跨站脚本](04.3.md)
- 4.4 [防止多次递交表单](04.4.md)
- 4.5 [处理文件上传](04.5.md)
- 4.6 [小结](04.6.md)
* 5.[访问数据库](05.0.md)
- 5.1 [database/sql接口](05.1.md)
- 5.2 [使用MySQL数据库](05.2.md)
- 5.3 [使用SQLite数据库](05.3.md)
- 5.4 [使用PostgreSQL数据库](05.4.md)
- 5.5 [使用beedb库进行ORM开发](05.5.md)
- 5.6 [NOSQL数据库操作](05.6.md)
- 5.7 [小结](05.7.md)
* 6.[session和数据存储](06.0.md)
- 6.1 [session和cookie](06.1.md)
- 6.2 [Go如何使用session](06.2.md)
- 6.3 [session存储](06.3.md)
- 6.4 [预防session劫持](06.4.md)
- 6.5 [小结](06.5.md)
* 7.[文本文件处理](07.0.md)
- 7.1 [XML处理](07.1.md)
- 7.2 [JSON处理](07.2.md)
- 7.3 [正则处理](07.3.md)
- 7.4 [模板处理](07.4.md)
- 7.5 [文件操作](07.5.md)
- 7.6 [字符串处理](07.6.md)
- 7.7 [小结](07.7.md)
* 8.[Web服务](08.0.md)
- 8.1 [Socket编程](08.1.md)
- 8.2 [WebSocket](08.2.md)
- 8.3 [REST](08.3.md)
- 8.4 [RPC](08.4.md)
- 8.5 [小结](08.5.md)
* 9.[安全与加密](09.0.md)
- 9.1 [预防CSRF攻击](09.1.md)
- 9.2 [确保输入过滤](09.2.md)
- 9.3 [避免XSS攻击](09.3.md)
- 9.4 [避免SQL注入](09.4.md)
- 9.5 [存储密码](09.5.md)
- 9.6 [加密和解密数据](09.6.md)
- 9.7 [小结](09.7.md)
* 10.[国际化和本地化](10.0.md)
- 10.1 [设置默认地区](10.1.md)
- 10.2 [本地化资源](10.2.md)
- 10.3 [国际化站点](10.3.md)
- 10.4 [小结](10.4.md)
* 11.[错误处理,调试和测试](11.md)
* 11.[错误处理,调试和测试](11.0.md)
- 11.1 [错误处理](11.1.md)
- 11.2 [使用GDB调试](11.2.md)
- 11.3 [Go怎么写测试用例](11.3.md)
- 11.4 [小结](11.4.md)
* 12.[部署与维护](12.md)
* 12.[部署与维护](12.0.md)
- 12.1 [应用日志](12.1.md)
- 12.2 [网站错误处理](12.2.md)
- 12.3 [应用部署](12.3.md)
- 12.4 [备份和恢复](12.4.md)
- 12.5 [小结](12.5.md)
* 13.[如何设计一个Web框架](13.md) 
* 13.[如何设计一个Web框架](13.0.md) 
- 13.1 [项目规划](13.1.md) 
- 13.2 [自定义路由器设计](13.2.md)
- 13.3 [controller设计](13.3.md)
- 13.4 [日志和配置设计](13.4.md)
- 13.5 [实现博客的增删改](13.5.md)
- 13.6 [小结](13.6.md) 
* 14.[扩展Web框架](14.md)
* 14.[扩展Web框架](14.0.md)
- 14.1 [静态文件支持](14.1.md)
- 14.2 [Session支持](14.2.md)
- 14.3 [表单支持](14.3.md)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册