V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wunonglin
V2EX  ›  Go 编程语言

如何判断 struct 的值知否存在

  •  
  •   wunonglin · 2020-06-20 11:03:43 +08:00 · 2335 次点击
    这是一个创建于 1404 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://stackblitz.com/edit/typescript-zlwtyj 如何才能像 ts 这样判断值

    struct 中的 int 值初始化为 0,string 值初始化是"",这样子怎么判断接口有没有传进来啊,因为接口也是可以接收 0 和空字符串的

    8 条回复    2020-06-21 13:53:50 +08:00
    thefack
        1
    thefack  
       2020-06-20 11:13:04 +08:00
    加个状态变量
    felix021
        2
    felix021  
       2020-06-20 11:26:08 +08:00 via Android
    struct 的成员用指针

    struct{
    Ts *int
    }
    scnace
        3
    scnace  
       2020-06-20 11:26:37 +08:00 via Android
    用*int 和 *string (逃
    wunonglin
        4
    wunonglin  
    OP
       2020-06-20 11:41:20 +08:00
    @felix021 #2
    @scnace #3

    nice,直接返回 nil
    kaifang
        5
    kaifang  
       2020-06-20 13:05:20 +08:00
    也可以用校验器校验 https://github.com/go-playground/validator


    type user struct{
    id int `validate:"required"`
    name string `validate:"required"`
    age int `validate:"required,min=16,max=100"`
    }


    validate := validator.New()
    if err := validate.Struct(user); err == nil {
    fmt.Println("校验成功")
    } else {
    fmt.Println("校验失败")
    }
    wunonglin
        6
    wunonglin  
    OP
       2020-06-20 13:12:47 +08:00
    @kaifang #5 因为是做 update,传入字段是动态的,所以不能用 required 只能用上面 2 、3 楼的指针了。要是是 create 的话那就可以用 required
    RH
        7
    RH  
       2020-06-20 21:03:14 +08:00
    也可以尝试用这个 github.com/guregu/null
    joesonw
        8
    joesonw  
       2020-06-21 13:53:50 +08:00
    所以你看到很多库, 例如 aws, 传参都是 *string, *int
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5613 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:32 · PVG 11:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.