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.
}
ので、上記のコードで..私は、DBのEnvタイプを設定することだし、ルータ機能に渡します。そこから、別の関数を呼び出す必要があります。どうやってするか?私はe._GetUserId(電子メール)を呼び出すと
、それがこの問題を解決するために
cannot convert email (type interface {}) to type Env: need type assertion
どのように言います?。 Env型に対してstructの代わりにinferface {}を使用する必要がありますか?
い 'session.Get( "Eメール")'戻っ 'インタフェース{}'タイプ? yesの場合は、この 'e._GetUserId(電子メール。(文字列)) 'のような電子メールパラメータに「assertion」と入力します。 – jeevatkm
@jeevatkmそれが問題であれば、エラーメッセージは "変換できません...タイプ**の文字列**"と言うでしょうか? – smarx
私はエラーメッセージがこのコードと一致しないと思います...私が見ることができるところは、 'Env'があるはずの' email'と呼ばれるものです。 – smarx