Есть ли библиотека PostgreSQL для языка Go, поддерживающая PostgreSQL версии 9.4. PostgreSQL 9.4 имеет поддержку типа данных JSON и задавался вопросом, можно ли его использовать с Go Language?Go language и PostgreSQL 9.4
Спасибо.
Есть ли библиотека PostgreSQL для языка Go, поддерживающая PostgreSQL версии 9.4. PostgreSQL 9.4 имеет поддержку типа данных JSON и задавался вопросом, можно ли его использовать с Go Language?Go language и PostgreSQL 9.4
Спасибо.
Я использую jmoiron/sqlx. Для любых несовместимых типов данных вы можете реализовать интерфейсы valuer
и scanner
. Я сделал это для географических пунктов с Postgis, используя этот пакет.
Да, go pq
library должен поддерживать PostgreSQL v9.4 и имеет базовую поддержку типов JSON в виде строк (которые, похоже, были added in v9.2).
// CREATE TABLE foo (id SERIAL PRIMARY KEY, stuff json);
// INSERT INTO foo (stuff) VALUES ('{"x":123}');
type Foo struct {
Id int,
Stuff string,
}
rows, err := db.Query("SELECT * FROM foo LIMIT 1") // TODO: handle error
defer rows.Close()
for rows.Next() {
foo := Foo{}
err = rows.Scan(&foo.Id, &foo.Stuff) // TODO: handle error
# main.Foo{Id:1, Stuff:"{\"x\":123}"}
}
Вы можете постобработки строку JSON или создать пользовательский тип с обычаем метод «Scan»:
type Foo struct {
Id int,
Stuff MyStuff,
}
func (e *MyStuff) Scan(value interface{}) error {
// Value should be a []byte of the JSON string.
// Do whatever you want with it here...
}
Пожалуйста, не игнорировать ошибки в «примере» код (это почти неверный код определения). Вы знаете, что какой-то дурак будет слепо вырезать-в-вставить его и привыкнуть к этому так, а потом затруднить жизнь какой-либо другой SO-автору, задав вопрос, заполненный кодом, игнорируя ошибки, которые бы сказали им, что их проблема была , –
@DaveC: Конечно, это законно, но я честно разорван на эту тему. Обычно я стараюсь писать как можно меньше кода, чтобы четко продемонстрировать мое намерение (вместо того, чтобы утопить его подробно), поэтому такие вещи, как обработка ошибок и очистка, часто опускаются. Должна ли я нести ответственность за то, чтобы дурак, который врезался в ноль, не ударил его собственной ногой? – maerics
@DaveC: Я отправил мета-вопрос, потому что я думаю, что вы на самом деле действительны. Http://meta.stackoverflow.com/questions/290223/should-i-demonstrate-best-practices-in-example-code- или-opt-for-conciseness – maerics