ynifor

Untitled

May 27th, 2025
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.89 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "database/sql"
  5.     "flag"
  6.     "log"
  7.  
  8.     _ "github.com/lib/pq"
  9. )
  10.  
  11. func main() {
  12.     var name string
  13.     flag.StringVar(&name, "name", "default", "account name")
  14.  
  15.     db, err := sql.Open("postgres", "dataSourceName") // предположим, что параметры берем из конфига, здесь это опущенно. Не считаем за ошибку
  16.     if err != nil {
  17.         db.Close()
  18.         log.Println(err)
  19.         return
  20.     }
  21.  
  22.     tx, err := db.Begin()
  23.     if err != nil {
  24.         log.Println(err)
  25.         return
  26.     }
  27.  
  28.     id, err := CreateAccount(tx, name)
  29.     if err != nil {
  30.         log.Println(err)
  31.         return
  32.     }
  33.  
  34.     if err := NewAccountEvent(id); err != nil {
  35.         log.Println(err)
  36.         return
  37.     }
  38.  
  39.     ids, err := GetAccountIdsByName(tx, name)
  40.     if err != nil {
  41.         log.Println(err)
  42.         return
  43.     }
  44.  
  45.     for _, id := range ids {
  46.         // какие-либо обновления
  47.         _ = id
  48.     }
  49.  
  50.     tx.Commit()
  51.  
  52.     db.Close()
  53. }
  54.  
  55. package main
  56.  
  57. import (
  58.     "database/sql"
  59.     "fmt"
  60. )
  61.  
  62. func CreateAccount(tx *sql.Tx, name string) (int64, error) {
  63.     query := `INSERT INTO accounts VALUES (DEFAULT, &2) RETURNING id`
  64.  
  65.     var newID int64
  66.     if err := tx.QueryRow(query, name).Scan(newID); err != nil {
  67.         return 0, err
  68.     }
  69.  
  70.     return newID, nil
  71. }
  72.  
  73. func GetAccountIdsByName(tx *sql.Tx, name string) ([]int64, error) {
  74.     query := fmt.Sprintf(`SELECT * FROM accounts WHERE name = %s`, name)
  75.  
  76.     rows, err := tx.Query(query)
  77.     if err != nil {
  78.         return nil, err
  79.     }
  80.  
  81.     var res []int64
  82.     for rows.Next() {
  83.         var (
  84.             id   int64
  85.             name string
  86.         )
  87.         if err = rows.Scan(&id, &name); err != nil {
  88.             return nil, err
  89.         }
  90.         res = append(res, id)
  91.     }
  92.  
  93.     return res, nil
  94. }
  95.  
  96. func NewAccountEvent(id int64) error {
  97.     // нам не важна реализация этого метода
  98.     // предполагаем здесь отправку ивента в другой сервис через очередь
  99.     return nil
  100. }
Add Comment
Please, Sign In to add comment