创建一个叫做 main
的 go
文件。
mkdir syntax/helloworld // 创建存储helloworld示例的文件夹
啰嗦一下 Go 的命名规则。Go 源文件总是用全小写字母形式的短小单词命名,并且以.go 扩展名结尾。以下是Go文件命名规则的主要要点:
_
),但不推荐在文件名中使用下划线。通常,Go文件名应该是简单的单词,以描述文件内容或包功能为主。if
、else
、for
等)冲突。如果要在源文件的名字中使用多个单词,我们通常直接是将多个单词连接起来作为源文件名,而不是使用其他分隔符,比如下划线。也就是说,我们通常使用 helloworld.go 作为文件名而不是 hello_world.go。
因为下划线这种分隔符,在 Go 源文件命名中有特殊作用,在Go语言中使用下划线作为源文件命名的分隔符,主要是为了进行包范围控制,避免命名冲突。
这里我们创建一个名为 main.go 的源文件
touch syntax/helloworld/main.go
打开刚刚创建的 main.go 文件,键入下面这些代码:
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
写完后,我们保存文件并回到终端窗口,然后在 Linux 或 macOS 系统中,你就可以通过输入下面这个命令来编译和运行这个文件了:
go build main.go
./main
如果是在 Windows 系统中呢,你需要把上面命令中的./main
替换为.\main.exe
。
go build main.go
main.exe
输出结果如下:
首先,第一个值得注意的部分是这个:
package main
这行代码定义了 Go 中的一个包 package
。包是 Go
语言的基本组成单元,通常使用单个的小写单词命名,一个 Go 程序本质上就是一组包的集合。所有 Go 代码都有自己隶属的包,在这里我们的“hello,world”示例的所有代码都在一个名为 main 的包中。main 包在 Go 中是一个特殊的包,整个 Go 程序中仅允许存在一个名为 main 的包。
**主程序函数:**main 包中的主要代码是 main 函数:
func main() {
fmt.Println("hello, world")
}
main入口:
导入包
import "fmt"
在 main 函数体中,通过 fmt 这个限定标识符(Qualified Identifier)调用 Println 函数。虽然两处都使用了“fmt”这个字面值,但在这两处“fmt”字面值所代表的含义却是不一样的:
通常导入路径的最后一个分段名与包名是相同的,这里很容易让人误解 import 声明语句中的“fmt”指的是包名,其实并不是这样的,只有 fmt.Println 函数调用一行中的“fmt”代表的则是包名。
main 函数体中之所以可以调用 fmt 包的 Println 函数,还有最后一个原因,那就是 Println 函数名的首字母是大写的。在 Go 语言中,只有首字母为大写的标识符才是导出的(Exported),才能对包外的代码可见;如果首字母是小写的,那么就说明这个标识符仅限于在声明它的包内可见。
func main()
刚刚我在运行"hello, world"程序之前,输入了 go build 命令,还有它附带的源文件名参数来编译它:
$go build main.go
打开终端,可以通过输入下面这个 ls 命令看到刚刚生成的可执行文件:
$ls
main main.go
和python 等其他语言不通的是,最终将mian
运行在没有安装 Go 的环境中。如果是python 项目的话还需要安装python解释器和项目依赖等。
Go 是一种编译型语言,这意味着只有你编译完 Go 程序之后,才可以将生成的可执行文件交付于其他人吗,Go程序的编译过程可以总结为以下几个关键步骤:
具体请参考链接:Go程序是如何编译运行的