【学習記録】GormのAuto Increment設定

usersテーブルにcreate処理を行う際、Auto Incrementを指定しているuser_idカラムの値が一回のSQLで取れず苦戦してたのですが、Goの構造体の書き方を修正したらusers_idの値も取れました。
忘れないようにメモします。

Auto Incrementが上手くいった時の構造体の定義は以下です。

type User struct {
    UserID       *int    `gorm:"column:staff_id;primary_key" json:"user_id";primary_key"`
    UserName     *string `json:"user_name"`
    UserPassword *string `json:"user_password"`
    EmailAddress *string `json:"mail_address"`
    Note         *string `json:"note"`
    IconImage    *string `json:"icon_image"`
}

上記の設定で以下のコードを実行すると、Create(&data)の後にdata.UserIDにDBに登録された値が入っていました。

func AddNewUser(param domain.RequestParam) (domain.ResponseParam, error) {

    db := db.CreateDBConnection()
    defer db.Close()

    data := domain.User{
        UserName:     param.UserName,
        UserPassword: param.Password,
        EmailAddress: param.EmailAddress,
        Note:         param.Note,
        // IconImageは未実装
        IconImage: nil,
    }

    err := db.Table("users").
        Create(&data).Error

    if err != nil {
        return domain.ResponseParam{}, err
    }

    res := domain.ResponseParam{
        UserID:    data.UserID,
        UserName:  data.UserName,
        Note:      data.Note,
        IconImage: data.IconImage,
    }

    return res, nil
}

前回上手くいかなかった時はcolumn:staff_idの部分を書いていなかったので、それが原因なのかと考えてますが、詳細まではわかってないです。
GormというORマッパーを使用しているのでGormのソースコードを読んでみたら何かわかるかも知れませんが、時間がかかりそうなのでそれは後回しにします。

とりあえず一つ問題解決できたので良かったです。
ユーザー新規登録のAPIでユーザー登録のSQLとユーザーIDだけ取得するSQLの二つに分けていましたが、一回のSQLで要件を満たせるようになったのでコード量を減らせました。