0
我想學習類型斷言和轉換。對我來說有點複雜。需要類型斷言的功能
我有這樣的例子:(我使用杜松子酒框架)
type Env struct {
db *sql.DB
}
func main() {
r := gin.Default()
// Initiate session management (cookie-based)
store := sessions.NewCookieStore([]byte("secret"))
r.Use(sessions.Sessions("mysession", store))
db, _ := sql.Open("sqlite3", "./libreread.db")
defer db.Close()
env := &Env{db: db}
r.GET("/", env.GetHomePage)
}
func (e *Env) _GetUserId(email string) int64 {
rows, err := e.db.Query("SELECT `id` FROM `user` WHERE `email` = ?", email)
CheckError(err)
var userId int64
if rows.Next() {
err := rows.Scan(&userId)
CheckError(err)
}
rows.Close()
return userId
}
func (e *Env) GetHomePage(c *gin.Context) {
session := sessions.Default(c)
email := session.Get("email")
if email != nil {
name := c.Param("bookname")
userId := e._GetUserId(email) // I'm stuck here.
}
所以,在上面的代碼..我設置分貝的Env類型並將它傳遞給路由器功能。從那裏,我需要調用另一個函數。怎麼做?
當我打電話e._GetUserId(電子郵件),它說
cannot convert email (type interface {}) to type Env: need type assertion
如何解決這個問題?我需要使用inferface {}來代替Env類型的結構嗎?
是否'session.Get( 「電子郵件」)''返回接口{}'型?如果是,那麼輸入斷言作爲電子郵件參數,例如'e._GetUserId(email。(string))'。 – jeevatkm
@jeevatkm如果這是問題,不會錯誤消息說「不能轉換...鍵入**字符串**」? – smarx
我不認爲錯誤信息與此代碼相匹配......我無法看到的地方是'Env'應該使用的所謂'email'。 – smarx