import (
"database/sql"
"fmt"
"github.com/didi/gendry/scanner"
)
type Person struct {
Name string `ddb:"name"`
Age int `ddb:"m_age"`
}
rows,_ := db.Query("select name,m_age from person")
var students []Person
err := scanner.Scan(rows, &students)
for _,student := range students {
fmt.Println(student)
}
Убедитесь, что вторым параметром Scan является ссылка.
ScanClose работает так же, как Scan, но также закрывает строки, поэтому вам не нужно беспокоиться о закрытии строк самостоятельно.
ScanMap возвращает результат в виде []map[string]interface{}, иногда это может быть более удобно.
rows,_ := db.Query("select name,m_age from person")
result,err := scanner.ScanMap(rows)
for _,record := range result {
fmt.Println(record["name"], record["m_age"])
}
Если вы не хотите определять структуру, ScanMap может быть полезен. Но возвращаемая карта имеет тип map[string]interface{} и interface{} довольно неясен, как void * в C или Object в JAVA, это рано или поздно вас разочарует.
ScanMapClose работает так же, как ScanMap, но также закрывает строки.
Map преобразует структуру в карту, которую можно легко использовать для вставки.
Тестовые случаи ниже могут иметь смысл.
package scaner
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestMap(t *testing.T) {
type Person struct {
Name string `ddb:"name"`
Age int `ddb:"age"`
foo byte `ddb:"foo"`
}
a := Person{"deen", 22, 1}
b := &Person{"caibirdme", 23, 1}
c := &b
mapA, err := Map(a, DefaultTagName)
ass := assert.New(t)
ass.NoError(err)
ass.Equal("deen", mapA["name"])
ass.Equal(22, mapA["age"])
_, ok := mapA["foo"]
ass.False(ok)
mapB, err := Map(c, "")
ass.NoError(err)
ass.Equal("caibirdme", mapB["Name"])
ass.Equal(23, mapB["Age"])
}
Неэкспортированные поля будут игнорироваться. Тип Ptr будет игнорироваться. Разрешить указатель автоматически. Второй параметр указывает, какой тег имени вы использовали при определении структуры. Если передана пустая строка, FieldName будет возвращено в качестве ключа карты.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )