gpt4 book ai didi

go - 需要对函数进行类型断言

转载 作者:行者123 更新时间:2023-12-02 17:37:58 25 4
gpt4 key购买 nike

我正在尝试学习类型断言和转换。这对我来说有点复杂。

我有这个例子:(我使用gin框架)

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.
}

所以,在上面的代码中..我设置 db Env 类型并将其传递给路由器函数。从那里,我需要调用另一个函数。如何做到这一点?

当我调用 e._GetUserId(email) 时,它说

cannot convert email (type interface {}) to type Env: need type assertion

如何解决这个问题?对于 Env 类型,我需要使用 inferface{} 而不是 struct 吗?

最佳答案

根据我的评论中的对话起草答案。

方法 session.Get("email") 返回 interface{} 类型。

方法 e._GetUserId() 接受字符串参数,因此您需要像 string 那样进行类型断言 -

e._GetUserId(email.(string))

关于go - 需要对函数进行类型断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44600570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com