У меня возникли проблемы с получением строк таблицы MS SQL для повторения значений по запросу для вызова API. Я пробовал использовать альтернативные типы сканирования sqlx (MapScan()
) для получения того, что мне нужно. Он вернет правильные имена ключей столбцов на карте, но не правильные значения. Я получил пример кода отсюда: https://jmoiron.github.io/sqlx/
MS SQL вывод с использованием MapScan:
map[DB_Name:[104 100 99 118 99 108 48 53 48 48 51]
Project_DB_Name:[67 121 116 111 114 105]
Status:[78 111 116 32 83 116 97 114 116 101 100]]
Вопрос в том, создает карту - лучший маршрут для итерации по API, или мне следует создать структуру db:
или json:
? Мой план состоит в том, чтобы выполнить итерацию DB_Name
для одного вызова API, а вывод добавить к карте или структуре [], чтобы я мог повторять output
, DB_Name
и Project_DB_Name
для другого вызова API.
ОБНОВЛЕНИЕ:
Я читал, что создание структуры быстрее с точки зрения производительности, и поэтому создал структуру db:
. После получения строк из таблицы возвращается тип []main.DBS
.
type DBS struct {
ProjectDBName string `db:"Project_DB_Name"`
DBName string `db:"DB_Name"`
Status string `db:"Status"`
}
func main() {
Databases, err := ReadTrkgTbl(SQLServer, Database, TrkgTbl, BatchSize)
if err != nil {
log.Fatal(err)
}
m, _ := json.Marshal(Databases)
s := string(m)
fmt.Println(s)
}
ВЫХОД:
[{"ProjectDBName":"Project1","DBName":"db19156","Status":"Not Started"},
{"ProjectDBName":"Project2","DBName":"db10231","Status":"Not Started"},
{"ProjectDBName":"Project3","DBName":"db18134","Status":"Not Started"}]
Мой второй вопрос: как взять значения из ключа DBName и повторять его по функции.
func DBId(session *Credentials, DBName string) (string, error) {
r, err := session.Get(fmt.Sprintf("/mssql/db?name=%s", DBName))
if err != nil {
log.Fatal(err)
}
// do something with r
}
Нужно ли мне создавать новую структуру с "id"
(строка)? Как я могу использовать значения []main.DBS
с "id"
для следующей функции, которая использует ProjectDBName
, DBName
и "id"
?