我的目标是封装在一个模块/包中。
主要包裹:
package main
import (
"github.com/zenazn/goji"
"./routes"
)
func main(){
routes.Setup()
goji.Serve()
}
另一个包裹:
package routes
import "github.com/zenazn/goji"
func Setup() {
goji.Get("/static", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "static!")
})
}
我该怎么做?
答案 0 :(得分:3)
你不能像这样传递包裹。
如果您查看goji github page
你只需从你的Init函数调用goji.Get,然后从你的主函数调用goji.Serve
route.go
package route
import "route"
import "github.com/zenazn/goji"
func Init(){
goji.Get("/hello/:name", hello)
}
main.go
package main
import "github.com/zenazn/goji"
func main(){
route.Init()
goji.Serve()
}
答案 1 :(得分:3)
包含大写字母作为名称的go导出常量,变量,类型和函数中的包。程序包本身不是程序可直接操作的东西。
如果要从其他包直接访问,goji
包应该导出名为goji.Goji
的变量。更好的解决方案是在包中提供一些功能,允许您注册您的函数/帮助程序。
你也可以从goji
导出一个函数,如:
func Set(s string, func(w http.ResponseWriter, r *http.Request)) { ... }
可以被其他包使用:
goji.Set("/static", myFunc)
您遇到的错误"使用没有选择器的包goji"是说你不能使用包的名称而不指定你想从包中输出哪个值。它本身期待goji.something
而不是goji
。
go文件中的函数init()
具有特殊属性:请参阅http://golang.org/ref/spec#Program_initialization_and_execution