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 关注
- 373 浏览
添加回答
举报
