Батч-вставка в БД и отправка в API: найди все ошибки

Код-ревьюMiddle15 минпроверка — Спринт08-t007

Программа обновляет имена записей, параллельно вставляет их в PostgreSQL, затем отправляет список в внешний API и логирует ответ. Найдите все ошибки — от синхронизации до безопасности и работы с HTTP — и предложите исправленный вариант.

Как на собесе: 15 минут, ищи всё — гонки, утечки, ошибки, безопасность, стиль. Ссылайся на строки.

review.gogo
1package main2 3import (4	"bytes"5	"context"6	"database/sql"7	"encoding/json"8	"fmt"9	"io"10	"log"11	"net/http"12	"sync"13 14	_ "github.com/lib/pq"15)16 17type Entry struct {18	id   int    `json:"id"`19	name string `json:"name"`20}21 22func main() {23	conn, err := sql.Open("postgres", "postgresql://svc:secret@db.internal:5432/mydb")24	if err != nil {25		log.Println("connection error:", err)26		return27	}28	defer conn.Close()29 30	ctx := context.TODO()31	var wg sync.WaitGroup32 33	items := []Entry{{1, "Ann"}, {2, "Bob"}, {3, "Cid"}}34 35	for _, item := range items {36		go func() {37			wg.Add(1)38			item.name = "Updated " + item.name39			query := fmt.Sprintf("INSERT INTO items (name) VALUES ('%s')", item.name)40			_, err := conn.Exec(query)41			if err != nil {42				log.Println("insert error:", err)43			}44			wg.Done()45		}()46	}47 48	wg.Wait()49 50	payload, err := json.Marshal(items)51	if err != nil {52		log.Println("encode error:", err)53		return54	}55 56	var buf bytes.Buffer57	buf.Write(payload)58 59	req, err := http.NewRequestWithContext(ctx, "POST", "api.example.com/endpoint", &buf)60	if err != nil {61		log.Println("request error:", err)62		return63	}64 65	resp, err := (&http.Client{}).Do(req)66	if err != nil {67		log.Println(err)68		return69	}70 71	log.Println(io.ReadAll(resp.Body))72}
⌘ Enter — проверить