2 回答

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

TA貢獻1799條經驗 獲得超9個贊
它通過使用帶有界面的地圖類型為我工作。這幫助我保存了SELECT沒有預定義結構或列名的查詢結果。
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 關注
- 281 瀏覽
添加回答
舉報