go語言打造個人博客系統(一)
為什么選擇go語言?
聽說go語言是在幾年前,但真正深入了解他卻是在2017年,因為當時作為講師 ,需要准備go語言的課程,結果稍一接觸立刻就喜歡上這門語言了,作為長期的c/c++程序員來說,10年來參加了很多大型項目,用c來開發確實很苦逼,所以碰到go語言時,發現真的能夠上癮,新生的語言肯定會把作者對之前各種語言的痛點體現出來,尤其還是肯-湯普森這樣的大師。
go語言的優點很多:
- 代碼很簡潔
- 上手很容易
- 內存自回收
- 運行很高效
- 開發效率高
- 風格很統一
- 出身自名門
這或許就是很多人選擇go語言的原因吧,如果要做一個有后端的項目,相信go語言將成為很多程序員的首選吧。因為python,java等高級語言的優點,go都有,但是運行的效率更高。
為什么開發博客?
博客在早些年是比較火的,現在大多數程序員都養成了寫博客的習慣。其實博客是一個非常典型的互聯網應用,其中所用的最基本技術正是網絡編程中使用到的,在開發過程中也可以了解到一些開發的細節,同時還有對時下比較火爆的頭條,抖音等產品有更深刻的了解。
開發需要准備什么?
首選考慮數據存儲,寫好的博客需要存儲起來,那么首先要有個數據庫了,在這里我們選擇MongoDB數據庫,說到MongoDB,它的介紹很有意思,MongoDB是使用C++開發的一種分布式數據庫,它是非關系型數據庫中當中最像關系型的。使用MongoDB是因為它有一個document的概念,數據以文檔的形式存儲,當然也是key-value格式的。基於這樣我們需要安裝一個數據庫,在linux平台安裝非常簡單。
sudo apt-get install mongodb
數據庫的問題解決后,還要准備什么呢?可以動手了,剩下的就是在go語言里怎么寫http服務器了,在寫之前最好了解一下http協議,不然有些事情還是無法完全掌控。
go語言的數據庫操作
首先研究明白go語言當中如何操作MongoDB
- gopkg.in/mgo.v2 安裝
go get -u gopkg.in/mgo.v2/bson
- 連接到數據庫
type Mongo struct {
Session *mgo.Session
}
func (m *Mongo) Connect(url string) {
session, err := mgo.Dial(url)
if err != nil {
panic(err)
}
m.Session = session
}
文檔是MongoDB的核心構成,MongoDB編程基本上就是圍繞文檔進行增刪改查操作。
- 構造文檔
type Person struct {
Name string
Age int
}
tabName := "person"
ps := sess.DB("myblog").C(tabName)
文檔構造好之后,就可以基於這個文檔進行增刪改查操作了
- 增加文檔
增加一個人物信息,姓名和年齡
//添加一個perso
//func (c *Collection) Insert(docs ...interface{}) error
err = ps.Insert(&Person{"yekai", 30})
if err != nil {
panic(err)
}
- 修改文檔
//修改person
//func (c *Collection) Update(selector interface{}, update interface{}) error
err = ps.Update(bson.M{"name": "yekai"}, bson.M{"name": "yekai", "age": 35})
if err != nil {
panic(err)
}
- 刪除文檔
//刪除全部紀錄
//(c *Collection) RemoveAll(selector interface{}) (info *ChangeInfo, err error)
ps.RemoveAll(bson.M{"name": "yekai"})
- 查詢文檔
查詢與其他接口略有區別在需要處理查詢結果集,這在go語言中同樣非常簡單。
//查詢person
p1 := Person{}
//func (c *Collection) Find(query interface{}) *Query
ps.Find(bson.M{"name": "yekai"}).One(&p1)
fmt.Println(p1)
- 思路總結
在了解了go語言的優點和go語言的數據庫操作后,我們就可以開始個人博客系統的開發了,下次我們將分享這部分的內容。