go run

作者: JunChow520 | 来源:发表于2021-12-25 17:25 被阅读0次

    源码文件

    Golang源码文件分为三种类型,分别是命令源码文件、库源码文件、测试源码文件

    命令源码文件

    • 命令源码文件总应该属于main代码包,即必须包含一个无参声明且无结果声明的main函数。
    • 单个命令源码文件可以被单独编译,也可以被单独安装,也可以被单独安装。

    go run

    go run命令包含了两个动作:编译命令源码文件、运行对应的可执行文件

    go run

    go run命令用于编译源码并直接执行源码的main()函数,同时不会再当前目录下留下可执行文件。其它语言比如Python、Lua必须借助虚拟机在不输出二进制的情况下直接执行代码,而Golang不使用虚拟机。

    $ go help run
    usage: go run [build flags] [-exec xprog] package [arguments...]
    
    • go run命令可以编译并运行命令源码文件,由于包含了编译动作,因此可接受用于go build命令的标记。
    • go run命令只接受Golang源码文件作为参数,不会接受代码包作为参数。
    • go run命令不允许多个命令源码文件作为参数,即使他们在同一个代码包,因为每个命令源码包都具有一个main函数声明。

    go run命令会在执行时检查源码文件的类型,若参数没有或存在多个命令源码文件,则会打印错误提示并退出。通过参数检查go run会编译参数中的命令源码文件,并将编译后的可执行文件存放到临时工作目录中。

    go run命令不会在运行目录下生成任何文件,可执行文件会被放在临时文件中被执行,工作目录会被设置为的当前目录。若需编译运行包则需要通过go build生成可执行文件,然后运行可执行文件。

    标记 描述
    -a 强制编译相关代码,无论编译结果是否是最新的。
    -n 打印编译过程中所需运行的命令,但并不会真正执行它们。
    -x 打印编译过程中所需运行的命令并执行
    -p n 并行编译,n为并行数量,通常为CPU逻辑核心数量。
    -v 打印被编译的代码包名称
    --work 打印编译时创建的临时工作目录路径且不删除

    go run -n

    go run -n用于打印相关命令而不实际执行

    $ go run -n main.go
    #
    # command-line-arguments
    #
    
    mkdir -p $WORK\b001\
    cat >$WORK\b001\_gomod_.go << 'EOF' # internal
    ...
    

    #注释信息中command-line-arguments表示虚拟代码包信息,go build编译命令在分析参数时若发现第一个参数是Go源码文件而非代码包则会在内部生成一个名为command-line-arguments的虚拟代码包。

    $WORK表示临时工作目录的绝对路径 ,为了存放虚拟代码包command-line-arguments的编译结果,命令会在临时工作目录中创建名为command-line-arguments的子目录,并在其下创建_obj子目录和_obj/exe子目录。

    go run -x

    $ go run -x main.go
    

    go run命令的-x标记可用于查询过程中执行的命令,同时这些命令会被真正被执行,这是和-n不同的地方。

    go run --work

    go run命令的--work标记可以打印运行命令源码文件过程中临时工作目录的位置。

    $ go run --work main.go
    WORK=C:\Users\junchow\AppData\Local\Temp\go-build2651005799
    arg1: C:\Users\junchow\AppData\Local\Temp\go-build2651005799\b001\exe\main.exe
    

    相关文章

      网友评论

          本文标题:go run

          本文链接:https://www.haomeiwen.com/subject/qaidqrtx.html