@craig.emmerich
В Go с использованием MySQL можно получить значение только что вставленной строки, используя функцию LastInsertId()
из пакета database/sql
. Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { panic(err.Error()) } defer db.Close() // Вставка строки в таблицу res, err := db.Exec("INSERT INTO my_table (column1, column2) VALUES (?, ?)", "value1", "value2") if err != nil { panic(err.Error()) } // Получение ID только что вставленной строки id, err := res.LastInsertId() if err != nil { panic(err.Error()) } fmt.Println("ID новой строки:", id) } |
В случае с PostgreSQL, вы можете использовать функцию RETURNING
в вашем SQL-запросе для получения только что вставленного значения. Есть несколько способов это сделать, вот один из них:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import ( "database/sql" "fmt" _ "github.com/lib/pq" ) func main() { db, err := sql.Open("postgres", "postgres://user:password@localhost/database?sslmode=disable") if err != nil { panic(err.Error()) } defer db.Close() // Вставка строки в таблицу var id int err = db.QueryRow("INSERT INTO my_table (column1, column2) VALUES ($1, $2) RETURNING id", "value1", "value2").Scan(&id) if err != nil { panic(err.Error()) } fmt.Println("ID новой строки:", id) } |
В обоих примерах предполагается, что вы уже установили соответствующие драйверы MySQL (github.com/go-sql-driver/mysql) или PostgreSQL (github.com/lib/pq).