我尝试使用Gin框架(用于Golang的框架)。 https://github.com/gin-gonic/gin
然后我从官方github复制了示例代码。 就像这样。
package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { router := gin.Default() router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) }) router.Run(":8080") }
但是我得到了错误。
# go run main.go # command-line-arguments ./main.go:12: c.Param undefined (type *gin.Context has no field or method Param)
有谁知道我该如何解决这个问题?
・ CentOS7
・ go版本go1.6.3 linux / amd64
我实际上使用了滑行,但我将杜松子酒更新为全局。并更新到1.7,但仍然出现相同的错误:
# go get -u -v github.com/gin-gonic/gin github.com/gin-gonic/gin (download) github.com/golang/protobuf (download) Fetching https://gopkg.in/go-playground/validator.v8?go-get=1 https fetch failed: Get https://gopkg.in/go-playground/validator.v8?go-get=1: dial tcp: lookup gopkg.in on 192.168.11.1:53: dial udp 192.168.11.1:53: i/o timeout gopkg.in/go-playground/validator.v8 (download) Fetching https://gopkg.in/yaml.v2?go-get=1 https fetch failed: Get https://gopkg.in/yaml.v2?go-get=1: dial tcp: lookup gopkg.in on 192.168.11.1:53: dial udp 192.168.11.1:53: i/o timeout gopkg.in/yaml.v2 (download) github.com/manucorporat/sse (download) Fetching https://golang.org/x/net/context?go-get=1 Parsing meta tags from https://golang.org/x/net/context?go-get=1 (status code 200) get "golang.org/x/net/context": found meta tag main.metaImport{Prefix:"golang.org/x/net", VCS:"git", RepoRoot:"https://go.googlesource.com/net"} at https://golang.org/x/net/context?go-get=1 get "golang.org/x/net/context": verifying non-authoritative meta tag Fetching https://golang.org/x/net?go-get=1 Parsing meta tags from https://golang.org/x/net?go-get=1 (status code 200) golang.org/x/net (download) # go version go version go1.7 linux/amd64 # go run test.go # command-line-arguments ./test.go:12: c.Param undefined (type *gin.Context has no field or method Param)
编辑:OP具有旧版本的软件包的“由Glide创建的供应商目录”。并通过删除该文件夹解决了问题(更新供应商软件包)。
注意:go get请勿签出或更新存储在供应商目录中的代码。
go get
c.Param(key)是的快捷方式c.Params.ByName(key),请参阅c.Param(key)文档:
c.Param(key)
c.Params.ByName(key)
// Param returns the value of the URL param. // It is a shortcut for c.Params.ByName(key) // router.GET("/user/:id", func(c *gin.Context) { // // a GET request to /user/john // id := c.Param("id") // id == "john" // }) func (c *Context) Param(key string) string { return c.Params.ByName(key) }
您需要更新 github.com/gin-gonic/gin软件包,请尝试:
github.com/gin-gonic/gin
go get -u github.com/gin-gonic/gin
并确保没有任何vendor,并尝试删除所有文件和供应商目录,除了main.go然后go build(或更新您的供应商包)。
vendor
main.go
go build
您的代码在go1.7以下方面运行良好:
go1.7
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) }) router.Run(":8080") }
在浏览器中打开http://127.0.0.1:8080/user/World 输出:
http://127.0.0.1:8080/user/World
Hello World