一、引入 gin 框架

import "ginhub.com/gin-gonic/gin

二、渲染页面

router := gin.Default()    router.LoadHTMLGlob("view/*")    router.GET("/upload",func(c *gin.Context) {        c.HTML(http.StatusOK,"upload.tmpl",gin.H{})    })

三、解决上传文件

router.POST("/upload", func(c *gin.Context) {        // Source        file, err := c.FormFile("file")        if err != nil {            c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))            return        }        basePath := "./upload/"        filename := basePath + filepath.Base(file.Filename)        if err := c.SaveUploadedFile(file, filename); err != nil {            c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))            return        }        c.String(http.StatusOK,fmt.Sprintf("文件 %s 上传胜利 ", file.Filename))    })

全副代码:

package mainimport (    "github.com/gin-gonic/gin"    "net/http"    "fmt"    "path/filepath")func main() {    router := gin.Default()    router.LoadHTMLGlob("view/*")    router.GET("/upload",func(c *gin.Context) {        c.HTML(http.StatusOK,"upload.tmpl",gin.H{})    })    router.MaxMultipartMemory = 8 << 20 // 8 MiB    router.POST("/upload", func(c *gin.Context) {        file, err := c.FormFile("file")        if err != nil {            c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))            return        }        basePath := "./upload/"        filename := basePath + filepath.Base(file.Filename)        if err := c.SaveUploadedFile(file, filename); err != nil {            c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))            return        }        c.String(http.StatusOK,fmt.Sprintf("文件 %s 上传胜利 ", file.Filename))    })    router.Run(":8080")}

文档链接:https://github.com/gin-gonic/...