3 回答
TA贡献1827条经验 获得超7个赞
我认为不context应该用作 DI 容器:https : //golang.org/pkg/context/
包上下文定义了上下文类型,它在 API 边界和进程之间携带截止日期、取消信号和其他请求范围的值。
我宁愿使用:
package public
type PublicController struct {
Database *DB
}
func (c *PublicController) GetCurrentVotePack(context *gin.Context) {
votePack, err := c.Database.GetVotePack("c5039ecd-e774-4c19-a2b9-600c2134784d")
if err != nil{
context.String(404, "Votepack Not Found")
}
context.JSON(200, votePack)
}
并在 main 中配置您的控制器:
func main() {
pCtrl := PublicController { Database: models.NewDB("<connectionstring>") }
router := gin.New()
router.GET("/public/current-vote-pack", pCtrl.GetCurrentVotePack)
router.Run(":1000")
}
TA贡献1790条经验 获得超9个赞
其中的值context.Keys都是 type interface{},因此在db将 type*DB转换回该类型之前,将无法从 type 调用方法。
安全的方法:
db, ok := context.Keys["DB"].(*DB)
if !ok {
//Handle case of no *DB instance
}
// db is now a *DB value
不太安全的方法,如果context.Keys["DB"]不是 type 的值,它会恐慌*DB:
db := context.Keys["DB"].(*DB)
// db is now a *DB value
Effective Go有一个关于这个的部分。
TA贡献1851条经验 获得超5个赞
您需要类型断言才能将接口 (db := context.Keys["DB"]) 转换为有用的东西。例如,参见这篇文章:convert interface{} to int in Golang
- 3 回答
- 0 关注
- 222 浏览
添加回答
举报