我尝试将一个范围读取为json,但在执行json. unmarshal时发现了一个问题。
下面是一个测试代码-
import (
"encoding/json"
"testing"
"github.com/jackc/pgtype"
"github.com/stretchr/testify/assert"
)
type TestHealthPreference struct {
HealthRange pgtype.Int4range `json:"health_range"`
ID string `json:"id"`
}
// just a test to make sure unmarshaling works
func TestPreferenceUpdateUnmarshal(t *testing.T) {
jsonData := `{
"health_range": "[20,30)",
"id": "123"
}`
var update TestHealthPreference
err := json.Unmarshal([]byte(jsonData), &update)
if err != nil {
t.Errorf("Error while unmarshalling JSON: %v", err)
}
assert.Equal(t, 20, update.HealthRange.Lower)
}
字符串
错误-
Error while unmarshalling JSON: json: cannot unmarshal string into Go struct field TestPreference.health_range of type pgtype.Int4range.
型
是否可以将其读作pgtype.Int4range?我猜这种类型是数据库使用的唯一?fwiw,我正在使用pgx github.com/jackc/pgx/v4
1条答案
按热度按时间ff29svar1#
它不起作用,因为
"[20,30)"
不是结构pgtype.Int4range
的有效JSON值,并且pgtype.Int4range没有实现json.Unmarshaler接口。你必须自己实现接口来解组
"[20,30)"
:字符串
BTW
型
比较两种不同类型,应更正为:
型
查看完整的demo:https://go.dev/play/p/gGNj3kOBB8k的数据。