GO - HelloWorld
- 第2行:定义此代码所属的包名,在一个项目中有且只有一个名为main的包。(最佳实践:包名由简短且小写的字母构成)
- 包名为源代码文件所属的目录名。即同一包的所有的代码文件必须放在以此包名为目录名的目录下。
- 在包的定义声明中只能有一个包名,这与Java、C#是不一样的(注:在Java中的包定义是从根依次引入的)
- 第5~7行:定义此代码所依赖的其它包。(关键字import等同于Java中的import)
- 可以引入多个包,并支持放在同一行,彼此之间以逗号“,”分隔。
- 最佳实践:包的引入按标准库包,自定义包,第三方包的顺序定义
- 第10行:为程序的入口函数,类似于C,Java中的main方法。
- 第12行:调用标准库fmt中的Println函数将字符串输出到标准输出设备上。
- 此库中还有几个类型的函数,如:Printf(), Fprint()等。
- 在Go的注释方式支持两种,与C,Java相同。
- 单行的注释://
- 多行的注释:/* */
- 在包定义、包引入、全局变量/常量、函数定义上面的注释可以用godoc来查看或生成说明文档(注:注释与声明间不能有空行)
- Go为了减少编码的输入,让代码更简洁。它允许每一行的最后可以省略分号“;"。
- 最后编译链接后生成一个可执行二事制文件,如在Windows平台上为.exe文件。(注:此文件中包含了Go的运行时环境 -- 这使发布此程序变量的简单,不需要客户机上单独安装运行环境)
- 通用的标准是:$GOROOT\pkg\$GOOS_$GOARCH
- Windows:$GOROOT\pkg\windows_386
- Linux:$GORROT\pkg\linux_amd32/64
- 编译顺序为:c.go -> b.go -> a.go
- 当只编译a.go时,编译器只需读取b.o文件,而不需要c.o。
- 当没有以/开始时(如"fmt","container/list"),Go编译器会到Go的标准库中搜索此包。
- 当以./开始时,则从当前路径为起始目录开始搜索。
- 当以/开始时,则从系统的根目录开始搜索。
- 以大写字母开始的标识,在包外可见。即当使用import引用包时,这些标准可以在客户代码中直接调用(引用)。也就相当于Java中以Public关键字修饰的标识。
- 以小字字母开始的标识,在整个包内可见,即可以在包内的多个文件中可见。相当于Java中用private修饰的标识。
- 包相关于命名空间,不同包下相同名字并不冲突,并在某些特定情况可以在import包时,指定别名来在避免冲突。
- 新创建一个名为chapter3的包,其中包括两个代码文件(demo1.go和demo2.go)和子包inner。
- 子包inner中包含一个代码文件:innerpack.go。
- main包及入口函数
- demo1.go
- demo2.go
- inner包中的innerpack.go
- 输出结果为:
- 在客户代码中导入自定义包时,一般是通过相对路径来指定,而对于导入标准库时,则是直接以包名开始。 如本例的demo1.go的第4,5行:
- 第4行:导入的是自定包,位于子目录inner中。
- 第5行:导入标准库的包,则直接以包名开始,以映射到$GOROOT\pkg\windows_386\。
- 包的导入顺序:首先是自定义包,再是标准包。
- 同包中的多个代码文件彼此间的全局变量、函数等都是相互可见的。
- 如在demo1.go中可以直接调用demo2.go中的以小写字母开头的方法。
- 如在demo2.go中可以直接调用demo1.go中的以小写字母开头的变量。
- 以大写字母开头的常量、变量和函数等在包外是可见的。
- 每个包编译后都会生成一个以包名相同的扩展为.a的库文件。
- 在同一包中的多个文件中不能有同名的变量、常量、函数等。需保证在包内唯一。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。