Merge branch 'master' of https://github.com/jameswpm/build-web-application-with-golang
4
.gitignore
vendored
@@ -2,3 +2,7 @@
|
|||||||
pkg/*
|
pkg/*
|
||||||
*.html
|
*.html
|
||||||
*.exe
|
*.exe
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
|||||||
8
.gitignore.orig
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
*~
|
||||||
|
pkg/*
|
||||||
|
*.html
|
||||||
|
*.exe
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
# Multiple Language Versions
|
# Multiple Language Versions
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
* [English](en/)
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
* [French](fr/)
|
* [French](fr/)
|
||||||
* [Spanish](es/)
|
* [Spanish](es/)
|
||||||
* [中文](zh/)
|
* [中文](zh/)
|
||||||
@@ -29,6 +33,11 @@ BBS:[http://golanghome.com/](http://golanghome.com/)
|
|||||||
- [polaris](https://github.com/polaris1119)(review书)
|
- [polaris](https://github.com/polaris1119)(review书)
|
||||||
- [雨痕](https://github.com/qyuhen)(review第二章)
|
- [雨痕](https://github.com/qyuhen)(review第二章)
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
Translator:
|
||||||
|
- [LarryBattle](https://github.com/LarryBattle)
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
## License
|
## License
|
||||||
Book License: [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/)
|
Book License: [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/)
|
||||||
|
|
||||||
|
|||||||
46
README.md.orig
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Multiple Language Versions
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
* [English](en/)
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
* [French](fr/)
|
||||||
|
* [Spanish](es/)
|
||||||
|
* [中文](zh/)
|
||||||
|
* [日本語](ja/)
|
||||||
|
* [Turkish](tr/)
|
||||||
|
* [Português - Brasil](pt-br/)
|
||||||
|
* [German](de/)
|
||||||
|
* [Русский](ru/)
|
||||||
|
|
||||||
|
# Donate
|
||||||
|
|
||||||
|
AliPay: <img src="zh/images/alipay.png" alt="alipay" width="100" height="100">
|
||||||
|
|
||||||
|
English Donate:[donate](http://beego.me/donate)
|
||||||
|
|
||||||
|
## Community
|
||||||
|
QQ群:148647580
|
||||||
|
|
||||||
|
BBS:[http://golanghome.com/](http://golanghome.com/)
|
||||||
|
|
||||||
|
## Acknowledgments
|
||||||
|
|
||||||
|
- [四月份平民](https://plus.google.com/110445767383269817959) (review代码)
|
||||||
|
- [Hong Ruiqi](https://github.com/hongruiqi) (review代码)
|
||||||
|
- [BianJiang](https://github.com/border) (编写go开发工具Vim和Emacs的设置)
|
||||||
|
- [Oling Cat](https://github.com/OlingCat)(review代码)
|
||||||
|
- [Wenlei Wu](mailto:spadesacn@gmail.com)(提供一些图片展示)
|
||||||
|
- [polaris](https://github.com/polaris1119)(review书)
|
||||||
|
- [雨痕](https://github.com/qyuhen)(review第二章)
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
Translator:
|
||||||
|
- [LarryBattle](https://github.com/LarryBattle)
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
## License
|
||||||
|
Book License: [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/)
|
||||||
|
|
||||||
|
Code License: [BSD 3-Clause License](<https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md>)
|
||||||
|
|
||||||
|
|
||||||
12
en/13.5.md
@@ -127,7 +127,11 @@ func (this *EditController) Get() {
|
|||||||
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||||
this.Data["Post"] = models.GetBlog(id)
|
this.Data["Post"] = models.GetBlog(id)
|
||||||
this.Layout = "layout.tpl"
|
this.Layout = "layout.tpl"
|
||||||
|
<<<<<<< HEAD
|
||||||
this.TplNames = "new.tpl"
|
this.TplNames = "new.tpl"
|
||||||
|
=======
|
||||||
|
this.TplNames = "edit.tpl"
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *EditController) Post() {
|
func (this *EditController) Post() {
|
||||||
@@ -150,9 +154,17 @@ type DeleteController struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *DeleteController) Get() {
|
func (this *DeleteController) Get() {
|
||||||
|
<<<<<<< HEAD
|
||||||
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||||
this.Data["Post"] = models.DelBlog(id)
|
this.Data["Post"] = models.DelBlog(id)
|
||||||
this.Ctx.Redirect(302, "/")
|
this.Ctx.Redirect(302, "/")
|
||||||
|
=======
|
||||||
|
id, _ := strconv.Atoi(this.Ctx.Input.Params[":id"])
|
||||||
|
blog := models.GetBlog(id)
|
||||||
|
this.Data["Post"] = blog
|
||||||
|
models.DelBlog(blog)
|
||||||
|
this.Ctx.Redirect(302, "/")
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
307
en/13.5.md.orig
Normal file
@@ -0,0 +1,307 @@
|
|||||||
|
# 13.5 Adding, deleting and updating blogs
|
||||||
|
|
||||||
|
We've already introduced the entire concept behind the Beego framework through examples and pseudo-code. This section will describe how to implement a blogging system using Beego, including the ability to browse, add, modify and delete blog posts.
|
||||||
|
|
||||||
|
## Blog directory
|
||||||
|
|
||||||
|
Our blog's directory structure can be seen below:
|
||||||
|
|
||||||
|
```
|
||||||
|
/main.go
|
||||||
|
/views:
|
||||||
|
/view.tpl
|
||||||
|
/new.tpl
|
||||||
|
/layout.tpl
|
||||||
|
/index.tpl
|
||||||
|
/edit.tpl
|
||||||
|
/models/model.go
|
||||||
|
/controllers:
|
||||||
|
/index.go
|
||||||
|
/view.go
|
||||||
|
/new.go
|
||||||
|
/delete.go
|
||||||
|
/edit.go
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Blog routing
|
||||||
|
|
||||||
|
Our blog's main routing rules are as follows:
|
||||||
|
|
||||||
|
```
|
||||||
|
//Show blog Home
|
||||||
|
beego.RegisterController("/", &controllers.IndexController{})
|
||||||
|
//View blog details
|
||||||
|
beego.RegisterController("/view/: id([0-9]+)", &controllers.ViewController{})
|
||||||
|
//Create blog Bowen
|
||||||
|
beego.RegisterController("/new", &controllers.NewController{})
|
||||||
|
//Delete Bowen
|
||||||
|
beego.RegisterController("/delete/: id([0-9]+)", &controllers.DeleteController{})
|
||||||
|
//Edit Bowen
|
||||||
|
beego.RegisterController("/edit/: id([0-9]+)", &controllers.EditController{})
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Database structure
|
||||||
|
|
||||||
|
A trivial database table to store basic blog information:
|
||||||
|
|
||||||
|
```
|
||||||
|
CREATE TABLE entries (
|
||||||
|
id INT AUTO_INCREMENT,
|
||||||
|
title TEXT,
|
||||||
|
content TEXT,
|
||||||
|
created DATETIME,
|
||||||
|
primary key (id)
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Controller
|
||||||
|
|
||||||
|
IndexController:
|
||||||
|
|
||||||
|
```
|
||||||
|
type IndexController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *IndexController) Get() {
|
||||||
|
this.Data["blogs"] = models.GetAll()
|
||||||
|
this.Layout = "layout.tpl"
|
||||||
|
this.TplNames = "index.tpl"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
ViewController:
|
||||||
|
|
||||||
|
```
|
||||||
|
type ViewController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *ViewController) Get() {
|
||||||
|
inputs := this.Input()
|
||||||
|
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||||
|
this.Data["Post"] = models.GetBlog(id)
|
||||||
|
this.Layout = "layout.tpl"
|
||||||
|
this.TplNames = "view.tpl"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
NewController
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
type NewController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *NewController) Get() {
|
||||||
|
this.Layout = "layout.tpl"
|
||||||
|
this.TplNames = "new.tpl"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *NewController) Post() {
|
||||||
|
inputs := this.Input()
|
||||||
|
var blog models.Blog
|
||||||
|
blog.Title = inputs.Get("title")
|
||||||
|
blog.Content = inputs.Get("content")
|
||||||
|
blog.Created = time.Now()
|
||||||
|
models.SaveBlog(blog)
|
||||||
|
this.Ctx.Redirect(302, "/")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
EditController
|
||||||
|
|
||||||
|
```
|
||||||
|
type EditController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *EditController) Get() {
|
||||||
|
inputs := this.Input()
|
||||||
|
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||||
|
this.Data["Post"] = models.GetBlog(id)
|
||||||
|
this.Layout = "layout.tpl"
|
||||||
|
<<<<<<< HEAD
|
||||||
|
this.TplNames = "new.tpl"
|
||||||
|
=======
|
||||||
|
this.TplNames = "edit.tpl"
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *EditController) Post() {
|
||||||
|
inputs := this.Input()
|
||||||
|
var blog models.Blog
|
||||||
|
blog.Id, _ = strconv.Atoi(inputs.Get("id"))
|
||||||
|
blog.Title = inputs.Get("title")
|
||||||
|
blog.Content = inputs.Get("content")
|
||||||
|
blog.Created = time.Now()
|
||||||
|
models.SaveBlog(blog)
|
||||||
|
this.Ctx.Redirect(302, "/")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
DeleteController
|
||||||
|
|
||||||
|
```
|
||||||
|
type DeleteController struct {
|
||||||
|
beego.Controller
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *DeleteController) Get() {
|
||||||
|
<<<<<<< HEAD
|
||||||
|
id, _ := strconv.Atoi(this.Ctx.Params[":id"])
|
||||||
|
this.Data["Post"] = models.DelBlog(id)
|
||||||
|
this.Ctx.Redirect(302, "/")
|
||||||
|
=======
|
||||||
|
id, _ := strconv.Atoi(this.Ctx.Input.Params[":id"])
|
||||||
|
blog := models.GetBlog(id)
|
||||||
|
this.Data["Post"] = blog
|
||||||
|
models.DelBlog(blog)
|
||||||
|
this.Ctx.Redirect(302, "/")
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Model layer
|
||||||
|
|
||||||
|
```
|
||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"github.com/astaxie/beedb"
|
||||||
|
_ "github.com/ziutek/mymysql/godrv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Blog struct {
|
||||||
|
Id int `PK`
|
||||||
|
Title string
|
||||||
|
Content string
|
||||||
|
Created time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetLink() beedb.Model {
|
||||||
|
db, err := sql.Open("mymysql", "blog/astaxie/123456")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
orm := beedb.New(db)
|
||||||
|
return orm
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetAll() (blogs []Blog) {
|
||||||
|
db := GetLink()
|
||||||
|
db.FindAll(&blogs)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetBlog(id int) (blog Blog) {
|
||||||
|
db := GetLink()
|
||||||
|
db.Where("id=?", id).Find(&blog)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveBlog(blog Blog) (bg Blog) {
|
||||||
|
db := GetLink()
|
||||||
|
db.Save(&blog)
|
||||||
|
return bg
|
||||||
|
}
|
||||||
|
|
||||||
|
func DelBlog(blog Blog) {
|
||||||
|
db := GetLink()
|
||||||
|
db.Delete(&blog)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## View layer
|
||||||
|
|
||||||
|
layout.tpl
|
||||||
|
|
||||||
|
```
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>My Blog</title>
|
||||||
|
<style>
|
||||||
|
#menu {
|
||||||
|
width: 200px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<ul id="menu">
|
||||||
|
<li><a href="/">Home</a></li>
|
||||||
|
<li><a href="/new">New Post</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{{.LayoutContent}}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
index.tpl
|
||||||
|
|
||||||
|
```
|
||||||
|
<h1>Blog posts</h1>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{{range .blogs}}
|
||||||
|
<li>
|
||||||
|
<a href="/view/{{.Id}}">{{.Title}}</a>
|
||||||
|
from {{.Created}}
|
||||||
|
<a href="/edit/{{.Id}}">Edit</a>
|
||||||
|
<a href="/delete/{{.Id}}">Delete</a>
|
||||||
|
</li>
|
||||||
|
{{end}}
|
||||||
|
</ul>
|
||||||
|
```
|
||||||
|
|
||||||
|
view.tpl
|
||||||
|
|
||||||
|
```
|
||||||
|
<h1>{{.Post.Title}}</h1>
|
||||||
|
{{.Post.Created}}<br/>
|
||||||
|
|
||||||
|
{{.Post.Content}}
|
||||||
|
```
|
||||||
|
|
||||||
|
new.tpl
|
||||||
|
|
||||||
|
```
|
||||||
|
<h1>New Blog Post</h1>
|
||||||
|
<form action="" method="post">
|
||||||
|
Title:<input type="text" name="title"><br>
|
||||||
|
Content<textarea name="content" colspan="3" rowspan="10"></textarea>
|
||||||
|
<input type="submit">
|
||||||
|
</form>
|
||||||
|
```
|
||||||
|
|
||||||
|
edit.tpl
|
||||||
|
|
||||||
|
```
|
||||||
|
<h1>Edit {{.Post.Title}}</h1>
|
||||||
|
|
||||||
|
<h1>New Blog Post</h1>
|
||||||
|
<form action="" method="post">
|
||||||
|
Title:<input type="text" name="title" value="{{.Post.Title}}"><br>
|
||||||
|
Content<textarea name="content" colspan="3" rowspan="10">{{.Post.Content}}</textarea>
|
||||||
|
<input type="hidden" name="id" value="{{.Post.Id}}">
|
||||||
|
<input type="submit">
|
||||||
|
</form>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- [Directory](preface.md)
|
||||||
|
- Previous section: [Logs and configurations](13.4.md)
|
||||||
|
- Next section: [Summary](13.6.md)
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
<<<<<<< 2b65ffe75a66a23ea074aa13de82d219774d01bf
|
<<<<<<< 2b65ffe75a66a23ea074aa13de82d219774d01bf
|
||||||
# Go Web 编程
|
# Go Web 编程
|
||||||
Go web编程是因为我喜欢Web编程,所以写了这本书,希望大家喜欢
|
Go web编程是因为我喜欢Web编程,所以写了这本书,希望大家喜欢
|
||||||
=======
|
=======
|
||||||
|
=======
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
***Build Web Application with Golang***
|
***Build Web Application with Golang***
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
@@ -39,6 +42,7 @@ BBS:[http://golanghome.com/](http://golanghome.com/)
|
|||||||
|
|
||||||
This book is licensed under the [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/),
|
This book is licensed under the [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/),
|
||||||
the code is licensed under a [BSD 3-Clause License](<https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md>), unless otherwise specified.
|
the code is licensed under a [BSD 3-Clause License](<https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md>), unless otherwise specified.
|
||||||
|
<<<<<<< HEAD
|
||||||
<<<<<<< de3c5bdaa45425ed37306a45067d55eba7dcedc2
|
<<<<<<< de3c5bdaa45425ed37306a45067d55eba7dcedc2
|
||||||
|
|
||||||
### Get Started
|
### Get Started
|
||||||
@@ -47,3 +51,5 @@ the code is licensed under a [BSD 3-Clause License](<https://github.com/astaxie/
|
|||||||
>>>>>>> add english version
|
>>>>>>> add english version
|
||||||
=======
|
=======
|
||||||
>>>>>>> update the readme
|
>>>>>>> update the readme
|
||||||
|
=======
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
|||||||
55
en/README.md.orig
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<<<<<<< HEAD
|
||||||
|
<<<<<<< 2b65ffe75a66a23ea074aa13de82d219774d01bf
|
||||||
|
# Go Web 编程
|
||||||
|
Go web编程是因为我喜欢Web编程,所以写了这本书,希望大家喜欢
|
||||||
|
=======
|
||||||
|
=======
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
|
***Build Web Application with Golang***
|
||||||
|
======================================
|
||||||
|
|
||||||
|
### Purpose
|
||||||
|
|
||||||
|
Because I'm interested in web application development, I used my free time to write this book as an open source version. It doesn't mean that I have a very good ability to build web applications; I would like to share what I've done with Go in building web applications.
|
||||||
|
|
||||||
|
- For those of you who are working with PHP/Python/Ruby, you will learn how to build a web application with Go.
|
||||||
|
- For those of you who are working with C/C++, you will know how the web works.
|
||||||
|
|
||||||
|
I believe the purpose of studying is sharing with others. The happiest thing in my life is sharing everything I've known with more people.
|
||||||
|
|
||||||
|
# Donate
|
||||||
|
|
||||||
|
AliPay: <img src="../zh/images/alipay.png" alt="alipay" width="100" height="100">
|
||||||
|
|
||||||
|
English Donate:[donate](http://beego.me/donate)
|
||||||
|
|
||||||
|
## Community
|
||||||
|
QQ群:386056972
|
||||||
|
|
||||||
|
BBS:[http://golanghome.com/](http://golanghome.com/)
|
||||||
|
|
||||||
|
### Acknowledgments
|
||||||
|
|
||||||
|
- [四月份平民 April Citizen](https://plus.google.com/110445767383269817959) (review code)
|
||||||
|
- [洪瑞琦 Hong Ruiqi](https://github.com/hongruiqi) (review code)
|
||||||
|
- [边 疆 BianJiang](https://github.com/border) (write the configurations about Vim and Emacs for Go development)
|
||||||
|
- [欧林猫 Oling Cat](https://github.com/OlingCat)(review code)
|
||||||
|
- [吴文磊 Wenlei Wu](mailto:spadesacn@gmail.com)(provide some pictures)
|
||||||
|
- [北极星 Polaris](https://github.com/polaris1119)(review whole book)
|
||||||
|
- [雨 痕 Rain Trail](https://github.com/qyuhen)(review chapter 2 and 3)
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
This book is licensed under the [CC BY-SA 3.0 License](http://creativecommons.org/licenses/by-sa/3.0/),
|
||||||
|
the code is licensed under a [BSD 3-Clause License](<https://github.com/astaxie/build-web-application-with-golang/blob/master/LICENSE.md>), unless otherwise specified.
|
||||||
|
<<<<<<< HEAD
|
||||||
|
<<<<<<< de3c5bdaa45425ed37306a45067d55eba7dcedc2
|
||||||
|
|
||||||
|
### Get Started
|
||||||
|
|
||||||
|
[Index](./eBook/preface.md)
|
||||||
|
>>>>>>> add english version
|
||||||
|
=======
|
||||||
|
>>>>>>> update the readme
|
||||||
|
=======
|
||||||
|
>>>>>>> eead24cf064976b648de5826eab51880c803b0fa
|
||||||
BIN
en/images/1.1.cmd.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
en/images/1.1.linux.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
en/images/1.1.mac.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
en/images/1.3.go.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
en/images/1.4.eclipse1.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
en/images/1.4.eclipse2.png
Normal file
|
After Width: | Height: | Size: 213 KiB |
BIN
en/images/1.4.eclipse3.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
en/images/1.4.eclipse4.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
en/images/1.4.eclipse5.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
en/images/1.4.eclipse6.png
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
en/images/1.4.emacs.png
Normal file
|
After Width: | Height: | Size: 299 KiB |
BIN
en/images/1.4.idea1.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
en/images/1.4.idea2.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
en/images/1.4.idea3.png
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
en/images/1.4.idea4.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
en/images/1.4.idea5.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
en/images/1.4.liteide.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
en/images/1.4.sublime1.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
en/images/1.4.sublime2.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
en/images/1.4.sublime3.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
en/images/1.4.sublime4.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
en/images/1.4.vim.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
en/images/13.1.gopath.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
en/images/13.1.gopath2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
en/images/13.4.beego.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
en/images/14.1.bootstrap.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
en/images/14.1.bootstrap2.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
en/images/14.1.bootstrap3.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
en/images/14.4.github.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
en/images/14.4.github2.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
en/images/14.4.github3.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
en/images/14.6.pprof.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
en/images/14.6.pprof2.png
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
en/images/14.6.pprof3.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
en/images/2.2.array.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
en/images/2.2.basic.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
en/images/2.2.makenew.png
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
en/images/2.2.slice.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
en/images/2.2.slice2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
en/images/2.3.init.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
en/images/2.4.student_struct.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
en/images/2.5.rect_func_without_receiver.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
en/images/2.5.shapes_func_with_receiver_cp.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
en/images/2.5.shapes_func_without_receiver.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
en/images/3.1.dns2.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
en/images/3.1.dns_hierachy.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
en/images/3.1.dns_inquery.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
en/images/3.1.http.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
en/images/3.1.httpPOST.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
en/images/3.1.response.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
en/images/3.1.web.png
Normal file
|
After Width: | Height: | Size: 361 KiB |
BIN
en/images/3.1.web2.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
en/images/3.2.goweb.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
en/images/3.3.http.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
en/images/3.3.illustrator.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
en/images/4.1.login.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
en/images/4.1.slice.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
en/images/4.3.escape.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
en/images/4.4.token.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
en/images/4.5.upload.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
en/images/4.5.upload2.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
en/images/5.6.mongodb.png
Normal file
|
After Width: | Height: | Size: 243 KiB |
BIN
en/images/6.1.cookie.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
en/images/6.1.cookie2.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
en/images/6.1.session.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
en/images/6.4.cookie.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
en/images/6.4.hijack.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
en/images/6.4.hijacksuccess.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
en/images/6.4.setcookie.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
en/images/7.4.template.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
en/images/8.1.socket.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
en/images/8.2.websocket.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
en/images/8.2.websocket2.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
en/images/8.2.websocket3.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
en/images/8.3.rest.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
en/images/8.3.rest2.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
en/images/8.3.rest3.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
en/images/8.4.rpc.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
en/images/9.1.csrf.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
en/images/cover.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
en/images/ebook.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
en/images/navi1.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
en/images/navi10.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
en/images/navi11.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
en/images/navi12.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
en/images/navi13.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
en/images/navi14.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
en/images/navi2.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
en/images/navi3.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
en/images/navi4.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
en/images/navi5.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
en/images/navi6.png
Normal file
|
After Width: | Height: | Size: 39 KiB |