О каких хранимках идёт речь?
В postgres есть собственная метафора хранимок, скомпилированных и живущих на postgres сервере. В Go пакет стандартной библиотеки sql сделан кросс-sql-движковым и ближайший аналог это
sql.Stmt
https://pkg.go.dev/database/sql#Stmt (в документации есть примеры кода). Вы можете скомпилировать sql стейтмент единожды в контексте соединения или транзакции и использовать многократно и потоко-безопасно пока жив контекст. Это даёт выигрыш в производительности.
Если я правильно вопрос)
Наивный код
script, err := ioutil.ReadFile("path/to/procedure.sql")
if err != nil {
log.Fprintf(os.Stderr, "Error reading SQL script file: %v\n", err)
}
stmt, err := db.PrepareContext(context.Background(), string(script)) //компилируем стейтмент как шаблон c плейсхолдерами аргументов
if err != nil {
log.Fatal(err)
}
_, err = stmt.ExecContext(ctx, args) //применяем стейтмент к аргументам args... в контексте ctx
if err != nil {
log.Fprintf(os.Stderr, "Error executing SQL script: %v\n", err)
}
Шаблон (path/to/procedure.sql) может выглядеть так
SELECT username FROM users WHERE id = ?
Вопросительный знак ? это плейсхолдер для аргумента