例如,在检查两个字符串的相等性时,有两个选项(如我所见,请赐教),我想知道在Go to中它是否是首选/惯用的:

将两个字符串分配给内存中的变量,例如:

var thing01 := strings.ToLower(strings.Replace(line, "\"", "", -1 ))[:lenEval]
var thing02 := strings.Join(p.FieldsOrder[:p.CheckNHeaders], string(p.Delimiter))

if thing01 == thing02 {
    // do stuff...
}

要么
if strings.ToLower(strings.Replace(line, "\"", "", -1 ))[:lenEval] == strings.Join(p.FieldsOrder[:p.CheckNHeaders], string(p.Delimiter)) {
    // do stuff...
}

请不要花时间思考thing01thing02完成什么,只要说出它们是否相等,就可以解决。

问题是,哪个是首选?分配给内存时(只有一点点同意)提高了可读性,或者只是“去做”并在运行时直接在if语句中检查?

如果我忽略了第三种选择,我也很想知道。谢谢大家!

阅读所有很棒的反馈后进行编辑:

有几个启发性的回答,我感谢所有花时间考虑我的问题的人。得到教训:
  • 仅仅因为一个人没有分配给变量,就不会从
    去堆栈(duh)。
  • 对于其他贡献者,甚至您自己的 future ,始终要考虑其可读性和可维护性!
  • 使用好的变量名
  • 如果没有GC,Compiler等的高级知识,偏爱更快的事情就是树错了树。

  • 我修改后的方法:
    lineFrontSplit := strings.ToLower(strings.Replace(line, `"`, "", -1 ))[:lenLineEval]
    colsFrontSplit := strings.Join(p.FieldsOrder[:p.CheckNHeaders], string(p.Delimiter))
    if lineFrontSplit == colsFrontSplit {
        return result, nil
    }
    

    对于我为此道歉感到烦恼的人,只是一个新手,他们正在寻找社区的真知灼见。如果我违反了发布指南,请告诉我。

    再次谢谢大家。

    最佳答案

    在您的情况下,第二个版本的可读性要差得多。如果为变量指定一个明智的名称(而不是thing),则您的意图会变得很清楚。

    正如您所说,我什至不会考虑“分配给内存”的任何可能的开销,因为首先您不知道编译器是否对此进行了优化,更重要的是,即使没有这样做,这也不是程序的瓶颈,不是视频编辑工具的内在循环,不是服务器中负责每秒处理十亿个请求的部分,或者不是速度真正重要的任何其他示例。

    始终比更喜欢可读性,而可能会更慢。

    如果您确实对程序的速度或内存使用有疑问,则可以考虑对其进行改进(针对实际情况,而不是通过“内联”变量进行),但是在这种情况下,您首先必须实际分析瓶颈所在。

    综上所述,您甚至可以进一步提高程序的可读性。根据实际情况,您可以考虑给strings.Replace(line, "\"", "", -1 )它自己的变量或p.FieldsOrder[:p.CheckNHeaders]部分。这些乍一看对我来说还不清楚。它们可能不适用于您程序的其他读者,例如在六个月内完成自己。

    还有一点:您的程序说var thing01 := ...在语法上是不正确的。您可以说thing01 := ...var thing01 = ...。查看=:=之间的区别。

    10-08 04:44