
本文旨在阐明 Go 语言并非传统意义上的脚本语言,而是需要编译成可执行文件后才能运行。我们将探讨 Go 程序的编译和运行方式,并简要介绍一些尝试将 Go 用作脚本的工具,但强调其并非 Go 语言的典型用法。
Go 语言,虽然语法简洁易懂,但与 Python 或 Bash 等脚本语言不同,它是一种编译型语言。这意味着 Go 代码需要先经过编译器的处理,生成可执行文件,然后才能运行。直接将 Go 代码作为脚本执行,通常会遇到 "bad interpreter: Permission denied" 这样的错误。
Go 程序的编译与运行
标准的 Go 程序需要包含 package main 和 func main() 函数。下面是一个简单的 "Hello, World!" 程序的示例:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}要运行这个程序,首先需要将其保存为 .go 文件,例如 hello.go。然后,可以使用 go run 命令直接运行:
go run hello.go
go run 命令实际上会先编译 hello.go 文件,然后在内存中运行生成的可执行文件。如果需要生成独立的可执行文件,可以使用 go build 命令:
go build hello.go
这会在当前目录下生成一个名为 hello (或 hello.exe 在 Windows 系统上) 的可执行文件。可以直接运行这个文件:
本文档主要讲述的是使用JSON进行网络数据交换传输;JSON(JavaScript ObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON的数据格式非常简单,您可以用 JSON 传输一个简单的 St
./hello
为什么不能像脚本一样直接运行 Go 代码?
直接在 Go 代码文件顶部添加 Shebang 行(例如 #!/usr/bin/env go)并尝试直接运行,会失败的原因在于:
- Go 编译器未参与: 操作系统尝试将该文件作为脚本执行,但它并不知道如何处理 Go 代码。
- 缺少可执行文件: 脚本解释器(例如 /bin/bash)会尝试执行文件中的命令,但 Go 代码并不是有效的 shell 命令。
将 Go 作为脚本的尝试
虽然 Go 不是脚本语言,但有一些工具尝试使其能够以类似脚本的方式运行。例如,gorun 就是一个这样的工具。使用 gorun,你可以这样编写 Go 代码:
#!/usr/bin/gorun
package main
func main() {
println("Hello world!")
}然后,你可以直接运行这个文件:
./hello.go
注意事项:
- gorun 并不是 Go 官方支持的工具,使用时需要额外安装。
- 这种方式本质上仍然是对 Go 代码进行编译,只是 gorun 简化了编译和运行的步骤。
- 这种方式并不符合 Go 的典型使用场景。
总结
Go 语言是一种强大的编译型语言,通过 go run 或 go build 命令可以方便地编译和运行 Go 程序。虽然有一些工具可以使 Go 代码以类似脚本的方式运行,但 Go 的核心优势仍然在于其编译后的性能和可靠性。在大多数情况下,建议采用标准的 Go 编译和运行方式。 理解 Go 的编译型本质对于编写和部署 Go 程序至关重要。









