创建 GORM 自定义数据类型,如何在扫描中获取上下文?

我正在尝试编写 Gorm 自定义数据类型:https ://gorm.io/docs/data_types.html


type MyDataType struct {}


func (f *MyDataType) Scan(value interface{}) error {

    //

}


func (f MyDataType) Value() (driver.Value, error) {

    //

}

由于某些原因,我需要访问上下文Scan或能够检索字段标签。


有没有办法做到这一点 ?谢谢


慕尼黑的夜晚无繁华
浏览 173回答 3
3回答

jeck猫

值基于用户空间,您可能需要将代码更改为:type MyDataType struct {}func (f *MyDataType) Scan(context context.Context, value interface{}) error {    // proceed the context right there}func (f MyDataType) Value() (driver.Value, error) {    //}

人到中年有点甜

您不能更改参数func Scan或func Value尝试这样做会破坏MyDataType'sql.Scanner和sql.Valuer实施。可以通过嵌入来context.Context完成MyDataType。type MyDataType struct {    context.Context}func (f *MyDataType) Scan(value interface{}) error {    ctx := context.Background()    ctx = context.WithValue(ctx, "key", value)    f.Context = ctx    return nil}func (f MyDataType) Value() (driver.Value, error) {    value := f.Context.Value("key")    return value, nil}

小怪兽爱吃肉

您需要访问什么上下文?Scan(...) 用于将数据库原始数据转换为您的自定义字段类型。你应该知道格式。Value() 是另一种方式,它将您的自定义字段转换为应放置在数据库中的任何内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go