猿问

在 golang 中实现 Scan 和 Value 函数

我正在尝试将一些 golang 对象存储在 SQL 数据库中,并按如下方式实现了扫描器和值接口:


func (attr *myStruct) Scan(src interface{}) error {

    switch v := src.(type) {

    case string:

        return json.Unmarshal([]byte(v), attr)

    case []byte:

        return json.Unmarshal(v, attr)

    }

    return fmt.Errorf("cannot convert %T to My struct", src)

}


//nolint:hugeParam

func (attr mystruct) Value() (driver.Value, error) {

    return json.Marshal(attr)

}


有没有一种方法可以通过Value()指针将参数传递给函数,因为在尝试将数据转换回我的结构时出现HugeParam错误,即传递给Value()函数的 attr 太大。


任何建议表示赞赏,谢谢!


更新:我试图通过标记一个 nolint 来忽略巨大的参数来解决这个问题,但错误仍然存在。这是错误消息:


golangci-lint run --deadline 300s


feedback-handler-test_1_fdc66eade9d0 | level=warning msg="[runner] The linter 'interfacer' is deprecated (since v1.38.0) due to: The repository of the linter has been archived by the owner. "


feedback-handler-test_1_fdc66eade9d0 | level=warning msg="[runner/nolint] Found unknown linters in //nolint directives: gocritic:hugeparam"


feedback-handler-test_1_fdc66eade9d0 | internal/app/domain/entity/feedbacks.go:61:7: hugeParam: attr is heavy (320 bytes); consider passing it by pointer (gocritic)


ibeautiful
浏览 425回答 1
1回答

天涯尽头无女友

使固定:/nolint // hugeParam: //insert explanationfunc (attr mystruct) Value() (driver.Value, error) {    return json.Marshal(attr)}
随时随地看视频慕课网APP

相关分类

Go
我要回答