1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/didiopensource-gendry

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 2.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:21 9bf2a9e

Сканер

Сканирование

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

ScanClose работает так же, как Scan, но также закрывает строки, поэтому вам не нужно беспокоиться о закрытии строк самостоятельно.

ScanMap

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

ScanMapClose работает так же, как ScanMap, но также закрывает строки.

Map

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/didiopensource-gendry.git
git@api.gitlife.ru:oschina-mirror/didiopensource-gendry.git
oschina-mirror
didiopensource-gendry
didiopensource-gendry
master