golang-mysql自定义数据类型


本文摘自网络,作者hikerwu,侵删。

自定义数据类型时,需要支持Scan方法和Value方法;

struct slice

type ExampleStruct struct {
    Name  string
    Value string
}

type ExampleStructSlice []ExampleStruct

func (l ExampleStructSlice) Value() (driver.Value, error) {
    bytes, err := json.Marshal(l)
    return string(bytes), err
}

func (l *ExampleStructSlice) Scan(input interface{}) error {
    switch value := input.(type) {
    case string:
        return json.Unmarshal([]byte(value), l)
    case []byte:
        return json.Unmarshal(value, l)
    default:
        return errors.New("not supported")
    }
}

字符串slice

type ExampleStringSlice []string

func (l ExampleStringSlice) Value() (driver.Value, error) {
    bytes, err := json.Marshal(l)
    return string(bytes), err
}

func (l *ExampleStringSlice) Scan(input interface{}) error {
    switch value := input.(type) {
    case string:
        return json.Unmarshal([]byte(value), l)
    case []byte:
        return json.Unmarshal(value, l)
    default:
        return errors.New("not supported")
    }
}

代码参考:github.com/jinzhu/gorm@v1.9.12/scaner_test.go


相关阅读 >>

手撸Golang spring ioc/aop 之2

Golang如何释放map内存?

Go的切片(进阶版)

Golang读锁有什么用

Go并发处理

Go 语言是谷歌的,而非社区的

Golang语言可以做些什么

我的第一个Go程序:hello.Go

Go grpc 调试工具

关于Golang 全局sql数据库连接

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...