V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kiwi95  ›  全部回复第 2 页 / 共 41 页
回复总数  809
1  2  3  4  5  6  7  8  9  10 ... 41  
160 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
@Nazz 你看 wsl 最近的 issue ,就有一个更新 win10 后 wsl 挂了的
160 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
还有可能 os 更新就导致 wsl 挂了,wsl 自己更新也可能导致启动失败,遇到了也很糟心。wsl 是个好东西,但离最好很差得远。
160 天前
回复了 Nazz 创建的主题 Windows Windows10 已经成为了最好的 Linux 发行版
可以正常编译运行和最好还差很远吧,虽然我也日常用 wsl2 ,但是稳定性和便利性还是有问题的,wslg 也有不少奇怪的问题,反正遇到了就挺麻烦,就比如 wsl2 最近新增的 mirrored network 特性,看起来很好简单实用也很棒,但开发网络服务就会遇到奇怪的问题
176 天前
回复了 freepoint 创建的主题 阅读 《增广贤文》常读常新
就像“命里有时终须有命里无时莫强求”这局。什么叫命里有,什么叫命里无,抛头颅洒热血是强求吗,不强求岂不是大清能活到现在。
176 天前
回复了 freepoint 创建的主题 阅读 《增广贤文》常读常新
都是废话,传统人情世故那套东西看多了免不得让人恶心。
凭直觉是骗子,鼻炎老大难问题哪有这么好治的。
远离可能是唯一的解,你和你男友没有那个能力解决这种家庭问题,因为需要很多钱很多精力。不如狠心一点,就当从你这代开始全新开局。其实很庆幸的一点是 LZ 还是个很优秀的人,有自己的独立价值判断,不过做选择的时候还是要谨慎些,因为你以后几十年的人生很可能就是这一两年你的选择就决定了。彩礼这个事情,如果你想平等独立的和你的爱人相处,最好不要拿,除非是对等的你们家也出钱,但这看起来不太可能。
@BeautifulSoap #173 如果牵涉面这么广的话,魔改 json 包很可能 break 别的功能吧,基于你的需求,写了一个 toy validator 刚传到 GH ,通过 strcut tag 在`json.Unmarshal` 之前验证: https://github.com/wuxu92/json-validator
楼里很多人确实理解错 OP 的问题了,但是楼主因为这个需求魔改 json 包的做法是在难以认同,这不是又给自己挖一个更大的坑,直接问 chatgpt 得到的方案都更好。

When using `json.Unmarshal` in Go, you can define a custom struct type that matches the structure of the JSON data you want to parse. You can also define custom types that implement the `json.Unmarshaler` interface to handle more complex parsing scenarios.

In your case, you can define a custom type for the `int` field that can handle the `null` value. Here's an example:

```go
type NullableInt struct {
Value int
Valid bool
}

func (ni *NullableInt) UnmarshalJSON(data []byte) error {
if string(data) == "null" {
ni.Valid = false
return nil
}
err := json.Unmarshal(data, &ni.Value)
if err != nil {
return err
}
ni.Valid = true
return nil
}
```

In this example, we define a `NullableInt` type that has two fields: `Value` and `Valid`. `Value` holds the integer value if it is not `null`, and `Valid` is a boolean flag that indicates whether the value is valid or not.

The `UnmarshalJSON` method on the `NullableInt` type implements the `json.Unmarshaler` interface. In this method, we first check if the input data is `null`. If it is, we set `Valid` to `false` and return `nil`. If the input data is not `null`, we use `json.Unmarshal` to parse the integer value into `Value`, and set `Valid` to `true`.

With this custom type in place, you can use it in your struct definition to handle `null` values for integer fields:

```go
type MyStruct struct {
MyInt NullableInt `json:"my_int"`
}
```

Now, when you call `json.Unmarshal` on a JSON string that contains a `null` value for `my_int`, the `MyInt` field in the resulting `MyStruct` instance will have `Valid` set to `false`.
这只能说是标准库的一种取舍,对你可能不方便,但是对大部分人可能是一种更可接受的行为。并且标准库文档是有明确说明这种行为的 `// By convention, to approximate the behavior of [Unmarshal] itself, // Unmarshalers implement UnmarshalJSON([]byte("null")) as a no-op.`

https://cs.opensource.google/go/go/+/master:src/encoding/json/decode.go;l=117-121;drc=dac9b9ddbd5160c5f4552410f5f8281bd5eed38c

对于 LZ 这种场景,比较好的方案是自己定义一个类型别名,然后给这个类型实现自己的 Unmarshal 接口,实现很简单。如果 LZ 的场景有很多的类型都要考虑 null 要报错,那我觉得可能是设计上有点问题了。

```
type Int int

func (i *Int) UnmarshalJSON(bs []byte) error {
if len(bs) == 0 || bytes.Equal(bs, []byte("null")) {
return fmt.Errorf("need a value")
}
val, err := strconv.ParseInt(string(bs), 10, 64)
if err != nil {
return err
}
*i = Int(val)
return nil
}

type Req struct {
ID Int `json:"id"`
}

var _ json.Unmarshaler = (*Int)(nil)

func TestNULLJSON(t *testing.T) {
var r Req
var args = []struct {
payload []byte
err bool
}{
{
[]byte(`{"id": null}`),
true,
},
{
[]byte(`{"id": 0}`),
false,
},
}
for idx, arg := range args {
if err := json.Unmarshal(arg.payload, &r); (err == nil) == arg.err {
t.Fatalf("%d: want err: %v, but got: %+v", idx, arg.err, err)
}
}
}

```
230 天前
回复了 iorilu 创建的主题 程序员 有多少人完全使用命令行管理 git 得
@msg7086 啊对对对,你说的对。从事实上说,你说的挺对,字符画的是 gui 。
231 天前
回复了 iorilu 创建的主题 程序员 有多少人完全使用命令行管理 git 得
@msg7086 tmux 下面也有状态栏,主窗口也是所见即所得,所以 tmux 也是图形界面终端复用器,你是不是有点魔怔为了反对而反对了
231 天前
回复了 iorilu 创建的主题 程序员 有多少人完全使用命令行管理 git 得
@msg7086 #91 cli 用不明白就觉得 cli 做不了吗,git 的命令行选项太多了,所谓 gui 的复杂操作自动化还不是一个选项组合的事,各有习惯而已何必觉得是别人和你争,难道不是你自己跳出来和别人争
249 天前
回复了 zhwguest 创建的主题 Go 编程语言 恨死 go 的导出变量命名规则了
id 改 ID ,那再加一个 ID()方法是最简单的。GetID()命名不是推荐的 style 。再说 op 是要暴露给外界读,那加一个方法不是本来就是最优设计?


@ohwind #86 憎恨/恨死了这样的用语可能我用的少,无法共情你们。
250 天前
回复了 zhwguest 创建的主题 Go 编程语言 恨死 go 的导出变量命名规则了
@ohwind 厌恶可以,恨死就极端了吧。你有见过完美的语言吗?我很想知道 op 或者你换到什么语言了
250 天前
回复了 jack274 创建的主题 随想 小儿感冒发烧,是不是过度医疗了
@domainnamesir #163 如果自己判断是小感冒,小孩精神状态也好,更好一点如果能吃能喝能跑能跳,就还不放心要弄到医院去让小孩遭一遍罪,这还不正是楼主说的过度医疗吗?重视当然是要的,重视不代表是送去医院

现代人都要有风险判断的意识吧,过马路有风险开车有风险,小孩感冒当然有恶化的风险,出门就有车祸风险大家还是会出门,怎么到小孩这就紧张到那种地步。
250 天前
回复了 jack274 创建的主题 随想 小儿感冒发烧,是不是过度医疗了
@jlkm2010 #139 怎么感觉是你听不进去楼主和其他人的分析,你自己意淫出来了其他人不信任国内的假象。你们这样的人是不是就特希望别人是崇洋媚外的人,然后站出来把别人批判一番显得自己多能耐多爱国?
250 天前
回复了 zhwguest 创建的主题 Go 编程语言 恨死 go 的导出变量命名规则了
情绪这么不稳定还是不要编程了,一个大写导出就“恨死了”,再写下去早晚得抑郁。
251 天前
回复了 jack274 创建的主题 随想 小儿感冒发烧,是不是过度医疗了
很多家长就是让自己省心自己安心,更倾向于给孩子吃药挂水住院,一是希望快点恢复正常不要烦我了,二是我该做的都做了再有什么问题我也没办法了的心态吧。

我觉得还是要具体情况具体分析,再加一些经验就可以了。一般发烧两三天内我们是不去医院的,退热贴加美林退热。不过有一次半夜突然打寒颤,急忙送去了急诊,其实也是没经验,这只是发烧的前奏,自己在家也能处理的,去急诊也不过是验血然后开了美林退烧(外搭几百块中药给你)。总结就是该去就去,但不要太紧张,生活规律平日没什么毛病的,那种奇奇怪怪的病其实很难发生的。
1  2  3  4  5  6  7  8  9  10 ... 41  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5488 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 36ms · UTC 01:36 · PVG 09:36 · LAX 18:36 · JFK 21:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.