2015-04-14 3 views
0

Есть ли библиотека PostgreSQL для языка Go, поддерживающая PostgreSQL версии 9.4. PostgreSQL 9.4 имеет поддержку типа данных JSON и задавался вопросом, можно ли его использовать с Go Language?Go language и PostgreSQL 9.4

Спасибо.

ответ

0

Я использую jmoiron/sqlx. Для любых несовместимых типов данных вы можете реализовать интерфейсы valuer и scanner. Я сделал это для географических пунктов с Postgis, используя этот пакет.

2

Да, 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... 
} 
+3

Пожалуйста, не игнорировать ошибки в «примере» код (это почти неверный код определения). Вы знаете, что какой-то дурак будет слепо вырезать-в-вставить его и привыкнуть к этому так, а потом затруднить жизнь какой-либо другой SO-автору, задав вопрос, заполненный кодом, игнорируя ошибки, которые бы сказали им, что их проблема была , –

+1

@DaveC: Конечно, это законно, но я честно разорван на эту тему. Обычно я стараюсь писать как можно меньше кода, чтобы четко продемонстрировать мое намерение (вместо того, чтобы утопить его подробно), поэтому такие вещи, как обработка ошибок и очистка, часто опускаются. Должна ли я нести ответственность за то, чтобы дурак, который врезался в ноль, не ударил его собственной ногой? – maerics

+0

@DaveC: Я отправил мета-вопрос, потому что я думаю, что вы на самом деле действительны. Http://meta.stackoverflow.com/questions/290223/should-i-demonstrate-best-practices-in-example-code- или-opt-for-conciseness – maerics

Смежные вопросы