您的位置:首页 > 编程语言 > Go语言

GO - HelloWorld

2013-01-28 23:33 113 查看
本节将通过Hello World带领大家进入Go的世界,并由此介绍Go代码的主要结构、部分关键字和包的一些特性。为阅读后面的打下基础。

1. Let's go 
    
    咱们以往学习任何程序都会以Hello World作为第一个实例,在此咱们不按常理出牌,针对Go语言,我们的第一个程序以Let's go开始。(其实是换汤不换药哈!!)。

    代码如下:



    控制台的输出结果为:Let's go!

第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的运行时环境 -- 这使发布此程序变量的简单,不需要客户机上单独安装运行环境)
2. 包的特点

    包即是Go中组织源代码的一种结构,每一个go源码文件只能属于一个包(即存放于此包对应的目录下),但一个包可以包括多个go源码文件(但这些文件不能有同名)。(注:包的字名需要有小写字符)

    在编译时,包中的所有文件需要一起编译,并最终生成一个扩展为.a的文件,如pack1.a。

    Go标准库所处的目录因环境不同而有所差异:

通用的标准是:$GOROOT\pkg\$GOOS_$GOARCH
Windows:$GOROOT\pkg\windows_386
Linux:$GORROT\pkg\linux_amd32/64
    包的依赖引用需显示的说明其依赖关系,由此加快编译速度。当一个包改变或重新编译后,所有的依赖于它的代码都将被重新编译。

    假设这里有三个文件:a.go依赖于b.go,b.go依赖于c.go:

编译顺序为:c.go -> b.go -> a.go
当只编译a.go时,编译器只需读取b.o文件,而不需要c.o。
    当使用import引用包时,需注意它的搜索路径:

当没有以/开始时(如"fmt","container/list"),Go编译器会到Go的标准库中搜索此包。
当以./开始时,则从当前路径为起始目录开始搜索。
当以/开始时,则从系统的根目录开始搜索。
3. 包引用的可见规则

    在Go中对包中定义的各种标识(常量、变量、函数、类型等)的可见性只有两种:

以大写字母开始的标识,在包外可见。即当使用import引用包时,这些标准可以在客户代码中直接调用(引用)。也就相当于Java中以Public关键字修饰的标识。
以小字字母开始的标识,在整个包内可见,即可以在包内的多个文件中可见。相当于Java中用private修饰的标识。
包相关于命名空间,不同包下相同名字并不冲突,并在某些特定情况可以在import包时,指定别名来在避免冲突。
4. 实例代码

    本例主要展示自定包义的组织结构、包中各代码文件的关系、代码中各种标识符的可见性和包的引用。代码结构如下所示:

   


新创建一个名为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的库文件。
在同一包中的多个文件中不能有同名的变量、常量、函数等。需保证在包内唯一。

此代码请到我的资源中下载下载链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息