Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "database/sql"
- "flag"
- "log"
- _ "github.com/lib/pq"
- )
- func main() {
- var name string
- flag.StringVar(&name, "name", "default", "account name")
- db, err := sql.Open("postgres", "dataSourceName") // предположим, что параметры берем из конфига, здесь это опущенно. Не считаем за ошибку
- if err != nil {
- db.Close()
- log.Println(err)
- return
- }
- tx, err := db.Begin()
- if err != nil {
- log.Println(err)
- return
- }
- id, err := CreateAccount(tx, name)
- if err != nil {
- log.Println(err)
- return
- }
- if err := NewAccountEvent(id); err != nil {
- log.Println(err)
- return
- }
- ids, err := GetAccountIdsByName(tx, name)
- if err != nil {
- log.Println(err)
- return
- }
- for _, id := range ids {
- // какие-либо обновления
- _ = id
- }
- tx.Commit()
- db.Close()
- }
- func CreateAccount(tx *sql.Tx, name string) (int64, error) {
- query := `INSERT INTO accounts VALUES (DEFAULT, &2) RETURNING id`
- var newID int64
- if err := tx.QueryRow(query, name).Scan(newID); err != nil {
- return 0, err
- }
- return newID, nil
- }
- func GetAccountIdsByName(tx *sql.Tx, name string) ([]int64, error) {
- query := fmt.Sprintf(`SELECT * FROM accounts WHERE name = %s`, name)
- rows, err := tx.Query(query)
- if err != nil {
- return nil, err
- }
- var res []int64
- for rows.Next() {
- var (
- id int64
- name string
- )
- if err = rows.Scan(&id, &name); err != nil {
- return nil, err
- }
- res = append(res, id)
- }
- return res, nil
- }
- func NewAccountEvent(id int64) error {
- // нам не важна реализация этого метода
- // предполагаем здесь отправку ивента в другой сервис через очередь
- return nil
- }
Add Comment
Please, Sign In to add comment