第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用 Go / GORM 在沒有預(yù)定義結(jié)構(gòu)的情況下打印 SELECT 查詢輸出

如何使用 Go / GORM 在沒有預(yù)定義結(jié)構(gòu)的情況下打印 SELECT 查詢輸出

Go
忽然笑 2023-01-03 16:02:17
我正在開發(fā)一個(gè) API,使用Go它連接到 MySQL 數(shù)據(jù)庫以執(zhí)行某些查詢。正在GORM用于數(shù)據(jù)庫操作。但是我堅(jiān)持打印SELECT沒有列名的表的查詢輸出。我的用例是,我需要在多個(gè)表上運(yùn)行查詢,而我不知道它們的列名和類型是什么。因此,我無法為所有可能添加的當(dāng)前和未來表預(yù)定義結(jié)構(gòu)。有沒有辦法在SELECT沒有預(yù)定義的情況下打印/保存查詢輸出struct?我嘗試使用空結(jié)構(gòu)做一些事情,但它對(duì)我沒有幫助。PS:我是圍棋的初學(xué)者    type Testing struct{}    var test Testing    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)    }    tx := db.Raw(query).Scan(&test)    if tx.Error != nil {        fmt.Println(tx.Error)    }    fmt.Println(test)
查看完整描述

2 回答

?
莫回?zé)o

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ù)使用類型。


查看完整回答
反對(duì) 回復(fù) 2023-01-03
?
揚(yáng)帆大魚

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))


查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 2 回答
  • 0 關(guān)注
  • 293 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)