- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想使用 Gorp 从包含专用类型的数据库中加载和保存结构。除其他外,这对于枚举字符串(例如角色)很有用:
type Role string
type Account struct {
User string
Role Role
}
这不是“开箱即用”的。引发错误消息,例如
panic: sql: converting Exec argument #0's type: unsupported type user.Role, a string
我怀疑我需要使用 gorp.TypeConverter
来解决这个问题,但是没有关于如何做到这一点的文档。
你能帮忙吗?
最佳答案
Valuer和 Scanner接口(interface)会做你想做的。这是一个工作示例:
package roleGorp
import (
"gopkg.in/gorp.v1"
"github.com/DATA-DOG/go-sqlmock"
"fmt"
"testing"
"database/sql/driver"
)
type Role string
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)); return nil }
func (r Role) Value() (driver.Value, error) { return string(r), nil }
type Account struct {
User string `db:"user"`
Role Role `db:"role"`
}
func TestRoleGorp(t *testing.T) {
db, err := sqlmock.New()
if err != nil {
panic(err)
}
dbMap := gorp.DbMap{
Db: db,
Dialect: gorp.MySQLDialect{
Engine: "InnoDB",
},
}
rows := sqlmock.NewRows([]string{"user", "role"}).AddRow("user1", "admin")
sqlmock.ExpectQuery(`SELECT \* FROM account LIMIT 1`).WillReturnRows(rows)
dbMap.AddTableWithName(Account{}, "account")
result := &Account{}
err = dbMap.SelectOne(result, "SELECT * FROM account LIMIT 1")
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", *result)
result2 := &Account{
User: "user2",
Role: Role("moderator"),
}
sqlmock.ExpectExec("insert into `account` \\(`user`,`role`\\) values \\(\\?,\\?\\);").WithArgs("user2", "moderator").WillReturnResult(sqlmock.NewResult(1, 1))
err = dbMap.Insert(result2)
if err != nil {
panic(err)
}
}
关于go - 我如何在 Gorp 中使用 TypeConverter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30890315/
见下文。 type User struct { Id int64 `db:"id" json:"id"` Name string `db:"name" json:"
如何使用 gorp 高效地插入多条记录?即不是一次插入一个,是否有批量插入? var User struct { Name string Email string Phone str
我在使用 gorp 更新我的 postgresql 数据库中的一行时遇到问题,我可以使用 db.Exec 成功运行更新,所有列都使用正确的信息进行更新,而使用 gorp 我只能更新非 sql.Null
您好,我正在使用 gorp 和 mysql。当插入 struct gorp 时返回 reflect.Value.Interface: 无法返回从未导出的字段或方法中获取的值 在 gorp 文档中说如果
在我的一个爱好项目中,我有一个这样的结构: type Resource struct { Id int ParentIds []int Title string Con
我正在尝试编写简单的程序以使用 gorp 将行插入表中,但在创建表时出现错误。 代码如下: package main import _ "github.com/mattn/go-sqlite3" im
我刚开始编程。 在 Go 中,我使用带有 lib pq 的 gorp.v1,因为我的数据库是 Postgres。我已经编写了一个 Postgres 函数并从 gorp 和 libpq 调用它。该函数返
我正在尝试从数据库中获取用户,如下所示, var users []User _, err := dbMap.Select(&users, "select id,username,acctstartti
嘿,我正在尝试安装 the gorp library , go get github.com/coopernurse/gorp 但出现以下错误: # github.com/coopernurse/go
尝试使用 Gorp-Go ORM 包创建表。能够在 MySql 中成功创建表,但未能附加列详细信息。 type Data struct { id int `db:"pid"` name
我想使用 Gorp 从包含专用类型的数据库中加载和保存结构。除其他外,这对于枚举字符串(例如角色)很有用: type Role string type Account struct { Use
我正在尝试使用带有 mysql 的 gorp 库运行以下查询 query = "SELECT SUM(outputoctets) FROM monthlyacct where date >= ? AN
我正在尝试使用 GORP 从 mySQL 数据库中执行 SELECT。我收到一条错误消息,显示 “reflect.Value.Interface:无法返回从未导出的字段或方法中获取的值”。我已经验证了
您好,我正在使用 gorp 并想在不知道其模式的情况下对任何表使用选择查询为此,我正在使用查询 db, err := sql.Open("mysql", "root:1234@tcp(localhos
我在尝试使用 gorp 进行选择时收到以下错误: No table found for type: Post 这是我的代码: type Post struct { Id int
我是一名优秀的程序员,十分优秀!