2 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用匿名結(jié)構(gòu)
假設(shè)您有一個(gè)結(jié)構(gòu):
type User struct{
FirstName string
LastName string
}
查詢:
SELECT CONCAT(first_name,last_name) AS full_name from users;
注意新欄full_name
你可以簡(jiǎn)單地做
var fullName = struct{FullName string}{}
請(qǐng)注意我如何使用 pascal 大小寫 & FullName 必須是字段名稱
中間的大寫字母將表示_
字段是公共的,因此可以在外部訪問。
full_name(查詢)= FullName(字段)
將此 fullName 對(duì)象作為存儲(chǔ)桶傳遞給您的掃描,它應(yīng)該可以工作。
db.Raw(查詢).Scan(&全名)
編輯:
您的查詢會(huì)有一些結(jié)果嗎?
讓我假設(shè)你有
column_one,column_two... column_n
現(xiàn)在,要從所有列或選定的列中獲取數(shù)據(jù),您只需定義具有特定名稱的字段(在匿名結(jié)構(gòu)中)。在我們的例子中:
struct{ColumnOne,ColumnTwo,..ColumnN interface{}}{}
PS 我已經(jīng)使用過interface{},您可以根據(jù)列返回的數(shù)據(jù)使用類型。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
它通過使用帶有界面的地圖類型為我工作。這幫助我保存了SELECT沒有預(yù)定義結(jié)構(gòu)或列名的查詢結(jié)果。
dsn := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v", myds.DBuser, myds.DBpassword, myds.DBhost, myds.DBport, myds.DBname)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
}
var result []map[string]interface{}
tx := db.Raw(query).Scan(&result)
if tx.Error != nil {
fmt.Println(tx.Error)
return
}
bytes, _ := json.Marshal(result)
fmt.Println(string(bytes))
- 2 回答
- 0 關(guān)注
- 293 瀏覽
添加回答
舉報(bào)