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好用的类型转换第三方组件

nginx 服务搭建

Go三色回收

Go - 统一定义 api 错误码

手撸Golang 基本数据结构与算法 二叉查找树

Golang的压测工具 hey

kubernetes-helm详细介绍及使用

awesome Go!高玩Gopher都会参考的Go资源集合

Golang cron 定时使用指南

手撸Golang 行为型设计模式 迭代器模式

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




打赏

取消

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

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

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

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

评论

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