demo連結:http://120.27.8.8:3000/page/welcome
go初學者,這篇是筆記,記錄和分享go入門實踐的歷程。
初學一門語言實踐自然從blog開始,個人打算是按照本站laravel教程入門實戰來搭個sample類微博小站。現在才開頭哈。
基礎文件讀完,差不多臉熟了一下go的語法,實踐環節要選框架,我沒多想就是gin+gorm,原因很簡單啊,本站文件裡就有iris、gin、gorm的這3個文件,iris和gin比起來我更傾向gin,因為iris看起來是個大而全的框架,laravel就是個大而全的框架了,學習go我想從小而精的gin開始。
以下是這幾天學習的路程步驟^_^
- gin+gorm搭簡單的mvc
- html模板
- session 登陸,自定義Auth中介軟體
- 密碼使用bcrypt加密驗證
- 分頁列表
- 結構優化,api介面和web動作分組
- 部署到阿里雲伺服器
gin+gorm搭簡單的mvc
新建專案,我的專案名叫go-sample
新建main.go,開啟gin的文件,複製“快速開始”的程式碼到這個檔案
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 在 0.0.0.0:8080 上監聽並服務
}
這時候已經可以跑起來了
# 執行 main.go 並在瀏覽器上訪問 0.0.0.0:8080/ping
$ go run main.go
接下來要拆分程式碼了,新建route目錄和apis目錄,這個apis目錄其實就是controller層了,翻了好幾個go專案,叫apis的比較多,我也叫這個吧
新建 router/router.go
package router
import (
"github.com/gin-gonic/gin"
"go-sample/apis"
)
// SetupRouter index
func SetupRouter() *gin.Engine {
r := gin.Default()
r.GET("/welcome", apis.Welcome)
return r
}
新建 apis/welcome.go
package apis
import (
"github.com/gin-gonic/gin"
"net/http"
)
func Welcome(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"code": 1,
"data": "hello-world",
})
}
main.go改成
package main
import (
"go-sample/router"
)
func main() {
r := router.SetupRouter()
r.Run(":3000") // 預設在 0.0.0.0:8080 上監聽並服務
}
這時候訪問 127.0.0.1:3000/welcome
然後是gorm,新建models目錄
新建檔案 models/init.go
package models
import (
"fmt"
_ "github.com/go-sql-driver/mysql" //載入mysql
"github.com/jinzhu/gorm"
)
var DB *gorm.DB
func Setup() {
var err error
// var user userModel.User
DB, err = gorm.Open("mysql", "root:12345678@/iu56?charset=utf8&parseTime=True&loc=Local&timeout=10ms")
if err != nil {
fmt.Printf("mysql connect error %v", err)
}
if DB.Error != nil {
fmt.Printf("database error %v", DB.Error)
}
AutoMigrateAll()
}
func AutoMigrateAll() {
DB.AutoMigrate(&User{})
}
新建檔案 models/user.go
package models
import (
"github.com/jinzhu/gorm"
)
type User struct {
gorm.Model
Name string `json:"name"`
Password string `json:"password"`
Email string `json:"email"`
Gender string `json:"gender"`
}
main.go改成
package main
import (
"go-sample/models"
"go-sample/router"
)
func init() {
models.Setup()
}
func main() {
r := router.SetupRouter()
r.Run(":3000") // 預設在 0.0.0.0:8080 上監聽並服務
}
router/router.go改成
package router
import (
"github.com/gin-gonic/gin"
"go-sample/apis"
)
func SetupRouter() *gin.Engine {
r := gin.Default()
r.GET("/welcome",apis.Welcome)
user := r.Group("/user")
{
user.GET("/index", apis.UserIndex)
}
return r
}
新建 apis/user.go
package apis
import (
"github.com/gin-gonic/gin"
"go-sample/models"
"net/http"
)
func UserIndex(c *gin.Context) {
var user models.User
result := models.DB.Take(&user).Value //開頭就寫最簡單的,獲取一條記錄,不指定排序
c.JSON(http.StatusOK, gin.H{
"code": 1,
"data": result,
})
}
這時候訪問127.0.0.1:3000/user/index
當前檔案目錄
go-sample/
├── apis
│ └── user.go
├── models
│ ├── init.go
│ └── user.go
├── router
│ └── router.go
├── main.go
知識點
- 要在
$GOPATH/src
下新建專案 - 要加深對
package
的理解
--
寫不完了