ä¸ãéç¹å 容ï¼
ç¥è¯è¦ç¹æåªäºï¼
1ãäºè§£Ginæ¡æ¶
2ãå¯¼å ¥ä½¿ç¨Ginæ¡æ¶
3ãå°è¯é åGORMå¼å
4ãæ´åhtmlï¼cssï¼js
äºã详ç»ç¥è¯ç¹ä»ç»ï¼
1ãGinæ¡æ¶ä»ç»
â Ginæ¯ä¸ä¸ªgolangçå¾®æ¡æ¶ï¼å°è£ æ¯è¾ä¼é ï¼APIå好ï¼æºä»£ç æ¯è¾æç¡®ãå ·æå¿«éçµæ´»ï¼å®¹éæ¹ä¾¿çç¹ç¹ãå ¶å®å¯¹äºgolangèè¨ï¼webæ¡æ¶çä¾èµè¿æ¯Pythonï¼Javaä¹ç±»çè¦å°ãèªèº«çnet/http足å¤ç®åï¼æ§è½ä¹é常ä¸éãæ¡æ¶æ´åæ¯ä¸ä¸ªå¸¸ç¨å½æ°æè å·¥å ·çéåãåå©æ¡æ¶å¼åï¼ä¸ä» å¯ä»¥çå»å¾å¤å¸¸ç¨çå°è£ 带æ¥çæ¶é´ï¼ä¹æå©äºå¢éçç¼ç é£æ ¼åå½¢æè§èã
Ginå®æ¹ææ¡£å°å: https://gin-gonic.com/zh-cn/docs/
2ãå®è£ Gin
è¦å®è£ Gin 软件å ï¼éè¦å å®è£ Go 并设置 Go å·¥ä½åºã
1.ä¸è½½å¹¶å®è£ ginï¼
$ go get -u github.com/gin-gonic/gin
2.å° gin å¼å ¥å°ä»£ç ä¸ï¼
3ãåä½éªââå建ä¸ä¸ªget请æ±
代ç ï¼
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
// å建ä¸ä¸ªæå¡
ginServer := gin.Default()
// æ·»å ä¸ä¸ªgetååº
ginServer.GET("/hello", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{"msg": "hello world!"})
})
// æå¡å¨ç«¯å£
err := ginServer.Run(":8082")
if err != nil {
return
}
}
æµè¯ï¼
æµè§å¨è®¿é®ï¼localhost:8082/hello
æ§å¶å°æ¥å¿ï¼
4ãç®åçGORM+Ginç»å端åéMySQLä¸æ°æ®
代ç ï¼
package main
import (
"database/sql"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"log"
"net/http"
"time"
)
// User æ°æ®åºæ å°ç»æä½
type User struct {
ID uint
Name string
Email *string
Age uint8
Birthday *time.Time
MemberNumber sql.NullString
ActivatedAt sql.NullTime
CreatedAt time.Time
UpdatedAt time.Time
}
func main() {
// å建ä¸ä¸ªæå¡
ginServer := gin.Default()
// æ°æ®åºæä½
db, err := gorm.Open("mysql", "root:[email protected](127.0.0.1:3306)/mybatis?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
log.Println(err)
return
}
// æ¥è¯¢ID为2çæ°æ®
var u User
first := db.Where("id=?", 2).First(&u)
if first.Error != nil {
log.Println(first.Error)
}
// æ·»å ä¸ä¸ªgetååº
ginServer.GET("/hello", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{"name": u.Name, "age": u.Age, "id": u.ID})
})
// æå¡å¨ç«¯å£
err = ginServer.Run(":8082")
if err != nil {
return
}
}
æµè¯ï¼
æµè§å¨è®¿é®ï¼
æ§å¶å°æ¥å¿ï¼
æ°æ®åºæ¥çï¼
å¯ä»¥çå°æåå°æ°æ®åºçæ°æ®ååºç»æµè§å¨äºã
5ãå¾æ é ç½®ï¼
å¯¼å ¥ç¸åºå ï¼
$ go get -u github.com/thinkerou/favicon
使ç¨æ¬å°å¾æ ï¼
代ç ï¼
package main
import (
"github.com/gin-gonic/gin"
"github.com/thinkerou/favicon"
"log"
"net/http"
)
func main() {
// å建ä¸ä¸ªæå¡
ginServer := gin.Default()
// 使ç¨å¾æ
ginServer.Use(favicon.New("./static/åå©åå©.png"))
// æ·»å ä¸ä¸ªgetååº
ginServer.GET("/hello", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{"name": "æå", "age": 20})
})
// æå¡å¨ç«¯å£
err := ginServer.Run(":8082")
if err != nil {
log.Panicln(err)
return
}
}
æµè¯ï¼
6ãRestFul APIå¼å
get /user
post /user
put /user
delete /user
postæµè¯
å®è£ APIpostå·¥å ·ç¨äºæµè¯
代ç ï¼
package main
import (
"github.com/gin-gonic/gin"
"github.com/thinkerou/favicon"
"log"
"net/http"
)
func main() {
// å建ä¸ä¸ªæå¡
ginServer := gin.Default()
// 使ç¨å¾æ
ginServer.Use(favicon.New("./static/åå©åå©.png"))
// æ·»å ä¸ä¸ªgetååº
ginServer.GET("/hello", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{"name": "æå", "age": 20})
})
// æ·»å ä¸ä¸ªpostååº
ginServer.POST("/user", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{"msg": "post user"})
})
// æå¡å¨ç«¯å£
err := ginServer.Run(":8082")
if err != nil {
log.Panicln(err)
return
}
}
æµè¯ï¼
putæµè¯
åpostæµè¯ï¼
代ç ï¼
ginServer.PUT("/user", func(context *gin.Context) {
context.JSON(http.StatusOK, gin.H{"msg": "post user"})
})
æµè¯ï¼
7ãç»å端ååºhtml
å建htmlï¼
ä¸è¬æ¾å¨templatesç®å½ä¸ï¼
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>go web</title>
</head>
<body>
<h1>
Holleï¼ï¼ï¼
</h1>
å端åéçæ¶æ¯ï¼
{{.msg}}
<img src="https://ts1.cn.mm.bing.net/th?id=ORMS.125d9efb147fe32b7990b8282e6bd509&pid=Wdp&w=612&h=304&qlt=90&c=1&rs=1&dpr=0.9333299994468689&p=0">
</body>
</html>
代ç ï¼
package main
import (
"github.com/gin-gonic/gin"
"github.com/thinkerou/favicon"
"log"
"net/http"
)
func main() {
// å建ä¸ä¸ªæå¡
ginServer := gin.Default()
// 使ç¨å¾æ
ginServer.Use(favicon.New("./static/åå©åå©.png"))
// å è½½html
ginServer.LoadHTMLGlob("templates/*")
// ååºé¡µé¢ç»å端
ginServer.GET("/index", func(context *gin.Context) {
context.HTML(http.StatusOK, "index.html", gin.H{
"msg": "æå¡å¨åéçhtml",
})
})
// æå¡å¨ç«¯å£
err := ginServer.Run(":8082")
if err != nil {
log.Panicln(err)
return
}
}
æµè¯ï¼
å¯ä»¥çå°æåè¿åäºhtmlæ°æ®ã
8ãæ´åcssåjså°htmlç¶åååºç»å端
å建cssåjs
css:
js:
æ´åå°htmlï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>go web</title>
<!-- é¾æ¥ cssåjs-->
<link rel="stylesheet" href="../static/css/style.css">
<script src="../static/js/common.js"></script>
</head>
<body>
<h1>
Holleï¼ï¼ï¼
</h1>
å端åéçæ¶æ¯ï¼
{{.msg}}
<img src="https://ts1.cn.mm.bing.net/th?id=ORMS.125d9efb147fe32b7990b8282e6bd509&pid=Wdp&w=612&h=304&qlt=90&c=1&rs=1&dpr=0.9333299994468689&p=0">
</body>
</html>
代ç ï¼
// å è½½éæèµæº
ginServer.Static("/static", "./static")
// ååºé¡µé¢ç»å端
ginServer.GET("/index", func(context *gin.Context) {
context.HTML(http.StatusOK, "index.html", gin.H{
"msg": "æå¡å¨åéçhtml",
})
})
æµè¯ï¼
å¯ä»¥çå°å·²ç»ååºã
htmlä¹ååºã
ä¸ã课å个人æ»ç»ï¼
æ¤å¤å¦ä¹ äºgoçGinæ¡æ¶ï¼äºè§£äºginæ¡æ¶ç强大ï¼è®¾ç½®å¯ä»¥ç´æ¥ç¼è¯æexeæ件跨平å°è¿è¡ã