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


相关阅读 >>

.Go是什么文件

slice

Golang slice如何拷贝

Go使用jwt构建用户认证系统

Golang 用olivere库操作elastic search

Go语言学习10-指针类型

龙芯GoGoGo!——龙芯平台上构建Go语言环境指南

聊聊Golang的ddd项目结构

Go-carbon1.3.3版本发布了

Go每日一库 [Go-rate] 速率限制器

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




打赏

取消

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

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

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

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

评论

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