登录
首页 >  Golang >  Go问答

为何在函数 init 之前初始化 Args?

来源:stackoverflow

时间:2024-03-21 15:09:38 451浏览 收藏

在 Go 语言的 `src/os/proc.go` 文件中,`Args` 变量在 `init` 函数之前初始化。对于 Windows 操作系统,`Args` 在 `src/os/exec_windows.go` 文件中初始化,具体由 `syscall.GetCommandLine()` 函数负责获取命令行参数并将其转换为 UTF-16 字符串。随后,该字符串会被进一步处理以生成 `Args` 变量的最终值。

问题内容

src/os/proc.go

// Args hold the command-line arguments, starting with the program name.
var Args []string

func init() {
    if runtime.GOOS == "windows" {
        // Initialized in exec_windows.go.
        return
    }
    Args = runtime_args()
}

当我在这里调试时,我发现 args 在 init 函数之前初始化。它在哪里初始化?


解决方案


正如评论所述: // 在exec_windows.go.中初始化

src/os/exec_windows.go

func init() {
    p := syscall.GetCommandLine()
    cmd := syscall.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(p))[:])
    if len(cmd) == 0 {
        arg0, _ := Executable()
        Args = []string{arg0}
    } else {
        Args = commandLineToArgv(cmd)
    }
}

好了,本文到此结束,带大家了解了《为何在函数 init 之前初始化 Args?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>