2 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
將指針傳遞給接口幾乎總是(如果不是總是)錯(cuò)誤的。即傳遞給你的函數(shù)的參數(shù)應(yīng)該已經(jīng)是一個(gè)指針。json.Unamrshal考慮到這一點(diǎn),您可以使用與或就此而言使用的相同方法(*gorm.DB).Find,即接受一個(gè)空接口并將結(jié)果解碼為該接口。并使用文檔通知用戶傳入的值必須是非零指針,否則代碼將失敗。
func GetRecord(db *gorm.DB, u interface{}) {
db.Find(u) // u must already be a pointer, therefore don't do &u here
}
var u User{}
GetRecord(db, &u) // pass a pointer here
bu := new(BigUser) // new returns a pointer
GetRecord(db, bu) // bu is a pointer already, no need for &bu here

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
要傳遞structureas UserInterface,您需要確保您的期望結(jié)構(gòu)實(shí)現(xiàn)所有接口方法。
示例代碼
package main
import "fmt"
type User struct {
ID uint
Email string
}
func (user *User) GetRecord() interface{} {
// get info from database here
return &User{
ID: user.ID,
Email: user.Email,
}
}
type BigUser struct {
ID uint
Username string
Role string
}
func (user *BigUser) GetRecord() interface{} {
// get info from database here
return &BigUser{
ID: user.ID,
Username: user.Username,
Role: user.Role,
}
}
// While declaring an interface,
// make sure that your desire structures have all those interface methods.
type UserInterface interface {
GetRecord() interface{}
}
// Function to print the values
func printValues(u UserInterface) {
fmt.Println(u.GetRecord())
}
func main() {
var x UserInterface
x = &User{
ID: 1,
Email: "abc@gmail.com",
}
printValues(x)
x = &BigUser{
ID: 2,
Username: "YouKnowWhoIam",
Role: "ADMIN",
}
printValues(x)
}
輸出
&{1 abc@gmail.com}
&{2 YouKnowWhoIam ADMIN}
- 2 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報(bào)