创建第一个Go语言程序Hello,Go!

论坛 期权论坛 脚本     
niminba   2021-5-23 03:00   1413   0

建立一个用于编写Go程序的工作目录go-examples,其绝对路径为/home/go-examples.开始编写我们的第一个Go程序。

一、在go-examples下创建一个文件hello.go

复制代码 代码如下:

//hello.go  
package main

import "fmt"//实现格式化的I/O 
 
/*Printf someting*/ 
func main(){  
       fmt.Printf("Hello,GO!\n")  
}

我们来分析下这个程序:

1、程序中的第2行这个是必须的。所有的Go文件以package <something>开头,对于独立运行的执行文件必须是package main;

2、第4行说需要将”fmt”包加入main。不是main的其他包都被称为库,其他许多编程语言有着类似的概念。

3、第1行和第4行中的//和/*---*/都是注释

4、package main 必须首先出现,紧跟着是import。在Go中,package 总是首先出现,然后是import,然后是其他所有内容。当Go 程序在执行的时候,首先调用的函数是main.main(),这是从C 中继承而来。这里定义了这个函数;

5、第8行调用了来自于fmt包的函数打印字符串到屏幕

二、编译和运行代码

编译该源文件并执行生成的可执行文件

复制代码 代码如下:

[root@localhost go-examples]# go build hello.go  
[root@localhost go-examples]# ls  
hello hello.go  
[root@localhost go-examples]# ./hello  
Hello,GO! 

通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。当然我们也可以通过-o选项来指定其他名字:

复制代码 代码如下:

[root@localhost go-examples]# go build -o firstgo hello.go  
[root@localhost go-examples]# ls  
firstgo hello.go 

如果我们在go-examples目录下直接执行go build命令,后面不带文件名,我们将得到一个与目录名同名的可执行文件:

复制代码 代码如下:

[root@localhost go-examples]# go build  
[root@localhost go-examples]# ls  
go-examples hello.go 

三、程序入口点(entry point)和包(package)

Go保持了与C家族语言一致的风格:即目标为可执行程序的Go源码中务必要有一个名为main的函数,该函数即为可执行程序的入口点。除此之外 Go还增加了一个约束:作为入口点的main函数必须在名为main的package中。正如上面hellogo.go源文件中的那样,在源码第 一行就声明了该文件所归属的package为main。

Go去除了头文件的概念,而借鉴了很多主流语言都采用的package的源码组织方式。package是个逻辑概念,与文件没有一一对应的关系。 如果多个源文件都在开头声明自己属于某个名为foo的包,那这些源文件中的代码在逻辑上都归属于包foo(这些文件最好在同一个目录下,至少目前 的Go版本还无法支持不同目录下的源文件归属于同一个包)。

我们看到hellogo.go中import一个名为fmt的包,并利用该包内的Printf函数输出"Hello, Go!"。直觉告诉我们fmt包似乎是一个标准库中的包。没错,fmt包提供了格式化文本输出以及读取格式化输入的相关函数,与C中的printf或 scanf等类似。我们通过import语句将fmt包导入我们的源文件后就可以使用该fmt包导出(export)的功能函数了(比如 Printf)。

在C中,我们通过static来标识局部函数还是全局函数。而在Go中,包中的函数是否可以被外部调用,要看该函数名的首母是否为大写。这是一种 Go语言固化的约定:首母大写的函数被认为是导出的函数,可以被包之外的代码调用;而小写字母开头的函数则仅能在包内使用。在例子中你也看到了 fmt包的Printf函数其首母就是大写的。

四、GOPATH

把上面的hellogo.go稍作改造,拆分成两个文件:main.go和hello.go

复制代码 代码如下:

//hello.go  
package hello  
 
import "fmt" 
 
func Hello(who string){  
     fmt.Printf("Hello,%s!\n", who)  KV
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP