miniKeys——鑰匙庫項目系列一(項目介紹以及Go項目部署)
項目介紹:
背景
互聯網上需要賬號太多太繁瑣,對應的密碼也就比較多,而且每個網站上面對應的規則也都不同,導致每個人的密碼太多,雖然說瀏覽器在一定程度上可以緩解這個問題,但是如果更換設備就會導致密碼全部丟失等問題,而手機端則不會丟失,所以開發出來一套miniKeys來解決這一痛點,目前主要是爲了自己使用(確實有點奢侈了,一個這個玩意兒,花了9塊錢買了域名[坐等升值],服務器用老早已經買給林楷項目的),這樣既可以鍛鍊自己的代碼能力,也可以爲簡歷和github上增添色彩,雖然Go語言也啥也沒學會,只是通過幾天看了下菜鳥教程,然後就找對應的框架寫後端。
初衷&&對Go的一些理解
miniKeys說實話,就是主要用來練手和找工作使用的,對Go語言的熟練程度也只能是瞭解的程度,更談不上熟悉。大三大四的那時候就聽過Go語言,也對挺看好Go語言的前景,但是在寫這個項目的時間裏,一直處於一種糾結的狀態,Go的語法確實有點“彆扭”,就這種方法、變量的聲明方式就夠喝一壺的,然後再加上存在指針,就更不友好了。在判斷對象是否爲空的時候(什麼對象,Go裏面只有Struct,曾有人說Go語言是一種面向過程的語言。),不能使用對象==nil判斷,你得使用&對象 ==nil判斷纔行:
password := c.PostForm("password")
fmt.Println(password)
if &password==nil || password=="" {
c.JSON(http.StatusOK,gin.H{
"error":"參數錯誤",
})
}else{
user, err := model.GetUserInfo(password)
if err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
}else {
c.JSON(http.StatusOK, user)
}
}
寫Demo的過程中,一度在想我在幹什麼,感覺寫這些的意義不大,當時就一直想用Java寫的話多好寫,不過不用加分號確實簡單好多,就是可讀性不太高(在這裏只針對Gin框架)。
完成功能
miniKeys後端的代碼由Go完成,Web框架採用的是Gin框架,數據映射採用Gorm框架,最終完成的功能:
1. 完成登錄驗證,不支持微信登錄(只支持指定密碼,只有我自己知道**:smile:**)
2. 完成對密碼的新增
3. 完成對密碼的更新
4. 完成對密碼的刪除
5. 查看單個密碼和所有密碼
功能挺簡單,就是實現起來比較坎坷,主要的困難點在Go語言不怎麼熟悉。
待完善
整個Demo完成下來,還有很多要完善的:
- 嚴格分層,將controller和model等層分的更清晰。
- controller裏面需要分開,將user相關的和key相關的訪問路徑分別放在兩個controller文件中
- 整個項目需要將連接數據庫的代碼提煉出來,只連接一次而不是訪問一次接口連接一下,數據庫連接代碼重複太多。
部署項目
建議使用本地編譯的方式部署到服務器上,另一種是在服務器上編譯,它需要在服務器上裝Go的環境等,太麻煩了,針對miniKeys這種小型的項目直接本地編譯就行。
在main.go的同級目錄下輸入這些指令就行了:
set GOARCH=amd64
set GOOS=linux
go build main.go
然後會出現main文件,沒有任何後綴,然後將main上傳到服務器上(記得改端口)。
nohup ./main &
這樣服務就起來了: