我有一个现有的mysql表,它使用mysql的UUID_SHORT()函数来生成唯一的ID。该表的简化版本:和golang调用mysql函数
CREATE TABLE `users` (
`user_uuid` bigint(20) unsigned NOT NULL,
`user_name` varchar(64) NOT NULL
);
新用户将通过创建:
INSERT INTO users (user_uuid, user_name) values (UUID_SHORT(), "new user name");
我开始使用gorm来实现的DB模式和我在一片空白上如何分辨gorm和database/sql在创建User的新实例时调用UUID_SHORT()。
从模型/ users.go:
package model
type User struct {
UserUUID uint64 `gorm:"column:user_uuid;primary_key:yes";sql:"notnull;default:uuid_short"`
UserName string `sql:"notnull"`
}
func (user User) TableName() string {
return "users"
}
从模型/ users_test.go:
package model_test
import (
"testing"
".../model"
".../model/testutil"
)
func TestUserCreate(t *testing.T) {
user := model.User{
// UserUUID: **HOW DO I CALL UUID_SHORT() HERE?**,
UserName: "Go Test",
}
// testutil.DB is the successful result of gorm.Open("mysql", ...)
testutil.DB.Create(&user)
}
我怎么能说UUID_SHORT()为user_uuid列当实例被保存?
我最终做了类似的事情,完全忘记了这个问题。感谢您抽出一年半的时间回答它:-) – tobiash
@tobiash很高兴听到它解决了! _(而且这种类型的东西可能还有更高效的方法......)_ – summea