dqg17080 2015-04-27 09:20 采纳率: 0%
浏览 49
已采纳

何时在Go中的变量名中使用前划线

Is there any special purpose of leading _ in a variable's name?

Example: func (_m *MockTracker)...

from here.

  • 写回答

2条回答 默认 最新

  • dongqu7778 2015-04-27 10:10
    关注

    There is no special meaning defined for a leading underscore in an identifier name in the spec:

    Identifiers

    Identifiers name program entities such as variables and types. An identifier is a sequence of one or more letters and digits. The first character in an identifier must be a letter.

    identifier = letter { letter | unicode_digit } .

    a
    _x9 
    ThisVariableIsExported 
    αβ
    

    Your sample is generated code from mockgen.go.

    In the package you linked you'll see things like:

    // Recorder for MockTracker (not exported)
    type _MockTrackerRecorder struct {
        mock *MockTracker
    }
    

    The sanitize function in the mockgen package prepends an underscore to package names and it seems that it's otherwise used for consistency and to ensure that identifier names remain private (i.e. not exported because they start with a capital letter). But it's not something that is defined in the Go spec.

    // sanitize cleans up a string to make a suitable package name.
    func sanitize(s string) string {
        t := ""
        for _, r := range s {
            if t == "" {
                if unicode.IsLetter(r) || r == '_' {
                    t += string(r)
                    continue
                }
            } else {
                if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' {
                    t += string(r)
                    continue
                }
            }
            t += "_"
        }
        if t == "_" {
            t = "x"
        }
        return t
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序