3 回答

TA貢獻1827條經驗 獲得超8個贊
我認為不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 關注
- 271 瀏覽
添加回答
舉報