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

最受不了的就是 golang 中的 if...else 语句了

  •  1
     
  •   zhwguest · 10 小时 10 分钟前 · 2375 次点击

    代码密度太低了,经常要这么写:

    1: var val string
    2: if ok {
    3:	val = "okay"
    4: } else {
    5:	val = "fail"
    6: }
    

    即使优化一下,还有:

    1: val := okay
    2: if !ok {
    3:	val = "fail"
    4: }
    

    要是 kotlin,swift, java, c++, c ,来得多快啊,尤其很多个这种条件初始赋值的时候,看版面,就像在搞笑似的。

    38 条回复    2025-01-20 00:32:06 +08:00
    zhwguest
        1
    zhwguest  
    OP
       10 小时 4 分钟前
    java,c,c++也不错
    itakeman
        2
    itakeman  
       9 小时 57 分钟前 via Android
    喜欢 golang 喜欢的不得了
    poltao
        3
    poltao  
       9 小时 54 分钟前
    学会与自己和解,不要在意这些细节
    aloxaf
        4
    aloxaf  
       9 小时 50 分钟前   ❤️ 1
    google 的语言设计水平和 MS 比就是一坨翔(用 golang 和 dart 有感
    seth19960929
        5
    seth19960929  
       9 小时 50 分钟前
    楼上说得对, 试试 When(true, 1, 2)

    https://imgur.com/b1VdtLo
    seth19960929
        6
    seth19960929  
       9 小时 49 分钟前   ❤️ 2
    youyouzi
        7
    youyouzi  
       9 小时 45 分钟前
    前端表示很平和,和 js 逻辑一样
    kandaakihito
        8
    kandaakihito  
       9 小时 42 分钟前
    go 的设计思想确实神奇,缺少很多特性。一查为什么没有,固定回答基本都是 “你自己可以手搓,那样更加 clear”
    w568w
        9
    w568w  
       9 小时 36 分钟前
    @seth19960929 #6 这个很多时候不能平替条件运算符。比如如果 v1 、v2 是有副作用的,或者要执行很耗时的计算,那就没法用 When 了。

    ----

    另外 Go 就是 Google 做出来解决自己需求的,如果你觉得写起来难受,说明你的使用场景和 Google 那帮人不一样,就别硬用了。
    hefish
        10
    hefish  
       9 小时 35 分钟前
    这样不是挺好嘛,能把工作量提高啊。。。
    dobelee
        11
    dobelee  
       9 小时 35 分钟前
    这个确实很迷,还是保留 c++的三目运算符好一些。
    DefoliationM
        12
    DefoliationM  
       9 小时 28 分钟前
    推荐使用 java,没必要和自己过不去,用自己喜欢的就行了。
    kk2syc
        13
    kk2syc  
       9 小时 25 分钟前
    10 年前用 php 的时候也是有一群人喷不是强类型 = =| 其实不影响赚钱就行了,如果是自己的项目建议换自己喜欢的语言。
    guanzhangzhang
        14
    guanzhangzhang  
       9 小时 15 分钟前
    那要是来个说受不了其他语言作用域的呢
    doraemonki
        15
    doraemonki  
       9 小时 9 分钟前 via Android
    如无必要勿增实体
    xuxu555
        16
    xuxu555  
       9 小时 3 分钟前
    hhhh, golang 确实是这样。不过不得不说,除了这个 err 判断繁琐点,其他真的挺简洁了。
    csys
        17
    csys  
       8 小时 58 分钟前   ❤️ 1
    最简洁直观的:

    var val = if ok "okay" else "fail"

    或者

    var val = ok match {
    true => "okay",
    false => "fail"
    }
    liuliuliuliu
        18
    liuliuliuliu  
       8 小时 45 分钟前
    推荐试一下 C# 😊
    akira
        19
    akira  
       8 小时 13 分钟前
    这种小事情。。真不重要了。。
    zhwguest
        20
    zhwguest  
    OP
       8 小时 2 分钟前
    @csys #17 这是啥语言啊?
    Leviathann
        21
    Leviathann  
       6 小时 13 分钟前
    @doraemonki var val string 和下面的两处 val =,都属于无必要又增实体
    doraemonki
        22
    doraemonki  
       5 小时 47 分钟前 via Android
    @Leviathann 从 Go 语言的设计哲学出发考虑,引入三元表达式增加的复杂度远超带来的收益,增加了理解难度还带来了代码风格的问题(深度嵌套的写法一定会出现),普通的 if else 是最常用的写法,足够简洁,即使是初学者也能一眼看懂
    fregie
        23
    fregie  
       5 小时 36 分钟前   ❤️ 1
    代码密度高不一定是好事,越是简化的高级语法越难读,项目规模上来后简直是灾难
    满屏的高度浓缩三元表达不头疼吗
    xiaoyecreate
        24
    xiaoyecreate  
       5 小时 22 分钟前
    学会与自己和解,不要在意这些细节,能解决问题就可以了
    extrem
        25
    extrem  
       4 小时 24 分钟前
    总结一下就是,引入一般的三目运算符会导致在很多场景下与当前“go 哲学”相悖的用法出现,弊大于利,而在当前的计算机语言演进道路上又没有找到更好的办法了,所以索性维持现状
    extrem
        26
    extrem  
       4 小时 21 分钟前
    我之前也经常要吐槽但后来发现确实是没办法,这些软件构建的基础设施的设计要考虑的比让我们不爽的点多得多,所以少即使多,没有完美的语言只有完美的选择
    proxytoworld
        27
    proxytoworld  
       3 小时 57 分钟前
    没有三目运算符确实难受
    LaTero
        28
    LaTero  
       3 小时 24 分钟前 via Android
    @extrem 有更好的方法呀,把 if 从 statement 改成 expression 就行,很多现代语言都支持类似这样的:
    var v = if (pred) a else b
    ixixi
        29
    ixixi  
       3 小时 9 分钟前
    不喜欢就不要用,干嘛委屈自己
    zgcwkj
        30
    zgcwkj  
       3 小时 5 分钟前
    你是想说没有**三目运算符**?
    lekai63
        31
    lekai63  
       2 小时 32 分钟前 via iPhone
    比较适合“按代码行数算绩效”的公司使用 🐶
    victorc
        32
    victorc  
       1 小时 33 分钟前
    你去用两天 rust
    回来看 go 哪哪都好
    sealinfree
        33
    sealinfree  
       1 小时 12 分钟前
    改写为 go 的形式

    // When 三元表达式
    func When[T any](Check bool, TrueVal, FalseVal T) T {
    if Check {
    return TrueVal
    } else {
    return FalseVal
    }
    }
    sealinfree
        34
    sealinfree  
       1 小时 11 分钟前
    使用效果 aaa := When(1 == 1, 1, 2)
    aaa 值为 1
    sagaxu
        35
    sagaxu  
       1 小时 6 分钟前
    @sealinfree
    @seth19960929

    cond ? func1() : func2()

    自己封装的 When 具有短路效果吗?到达不了的分支不要计算
    redbule
        36
    redbule  
       35 分钟前
    如果你觉得不优雅,那么只有 pattern match 能满足你了。
    bzj
        37
    bzj  
       21 分钟前
    没看懂有什么问题
    bzj
        38
    bzj  
       20 分钟前
    你应该就属于那种认为 PHP 是全世界最好语言的群体
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1507 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.