当前位置:网站首页>编写并运行第一个Go语言程序
编写并运行第一个Go语言程序
2022-06-30 06:52:00 【段晓慢】
前言
在Go项目目录结构介绍这篇文章里面,我们已经初步认识了Go项目的结构,那么我们下面开始编写第一个Go语言程序——在控制台输出“Hello World!”。
编写第一个Go语言程序
1 package main //声明main包
2
3 import "fmt" //导入fmt包,打印字符串时需要用到
4
5 func main(){
//声明main主函数
6 fmt.Println("Hello world!") //打印Hello world!
7 }
下面我们详细的介绍一下这几行代码的含义。
package(创建包)
Go语言以“包”作为管理单位,每个 Go 源文件必须先声明它所属的包,所以我们会看到每个 Go 源文件的开头都是一个 package 声明,格式如下:
package name
其中 package 是声明包名的关键字,name 为包的名字。
Go语言的包与文件夹是一一对应的,它具有以下几点特性:
- 一个目录下的同级文件属于同一个包。
- 包名可以与其目录名不同。
- main 包是Go语言程序的入口包,一个Go语言程序必须有且仅有一个 main 包。如果一个程序没有 main 包,那么编译时将会出错,无法生成可执行文件。
import(导入包)
在包声明之后,是 import 语句,用于导入程序中所依赖的包,导入的包名使用双引号""包围,格式如下:
import "name"
其中 import 是导入包的关键字,name 为所导入包的名字。
代码第3行导入了 fmt 包,这行代码会告诉 Go 编译器,我们需要用到 fmt 包中的函数或者变量等,fmt 包是Go语言标准库为我们提供的,用于格式化输入输出的内容(类似于C语言中的 stdio.h 头文件),类似的还有 os 包、io 包等。
另外有一点需要注意,导入的包中不能含有代码中没有使用到的包
,否则Go编译器会报编译错误,例如 imported and not used: “xxx”,“xxx” 表示包名。
也可以使用一个 import 关键字导入多个包,此时需要用括号( )将包的名字包围起来,并且每个包名占用一行,也就是写成下面的样子:
import(
"name1"
"name2"
)
main函数
代码的第 5 行创建了一个 main 函数,它是Go语言程序的入口函数,也即程序启动后运行的第一个函数。main 函数只能声明在 main 包中,不能声明在其他包中,并且,一个 main 包中也必须有且仅有一个 main 函数。
main 函数是自定义函数的一种,在Go语言中,所有函数都以关键字 func 开头的,定义格式如下所示:
func 函数名 (参数列表) (返回值列表){
函数体
}
格式说明如下:
- 函数名:由字母、数字、下画线_组成,其中,函数名的第一个字母不能为数字,并且,在同一个包内,函数名称不能重名。
- 参数列表:一个参数由参数变量和参数类型组成,例如func foo( a int, b string )。
- 返回值列表:可以是返回值类型列表,也可以是参数列表那样变量名与类型的组合,函数有返回值时,必须在函数体中使用 return 语句返回。
- 函数体:能够被重复调用的代码片段。
注意:Go语言函数的左大括号{必须和函数名称在同一行,否则会报错。
打印Hello World
代码的第 6 行fmt.Println(“Hello World!”)中,Println 是 fmt 包中的一个函数,它用来格式化输出数据,比如字符串、整数、小数等,类似于C语言中的 printf 函数。这里我们使用 Println 函数来打印字符串,也就是( )里面使用""包裹的部分。
注意,Println 函数打印完成后会自动换行,ln是 line 的缩写。
点号.是Go语言运算符的一种,这里表示调用 fmt 包中的 Println 函数。
另外,代码fmt.Println(“Hello World!”)的结尾,不需要使用;来作为结束符,Go 编译器会自动帮我们添加,当然,在这里加上;也是可以的。
编译&运行
Go语言是编译型的静态语言(和C语言一样),所以在运行Go语言程序之前,先要将其编译成二进制的可执行文件。
可以通过Go语言提供的go build或者go run命令对Go语言程序进行编译:
go build命令
可以将Go语言程序代码编译成二进制的可执行文件,但是需要我们手动运行该二进制文件;go run命令
则更加方便,它会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件,这个特点很适合用来调试程序。
上面已经编写好了Go语言程序,我们使用go run命令运行一下:
到这里,相信大家也就知道如何创建一个简单的Go语言程序了,赶快动手试试吧!
边栏推荐
- Solr search
- 1.4 - 定点数与浮点数
- 1.5 - logical operation
- Which securities company is good for opening a mobile account? Also, is it safe to open an account online?
- tomorrow! "Mobile cloud Cup" competition air publicity will start!
- First line of code (Third Edition) learning notes
- Never forget the original intention, and be lazy if you can: C # operate word files
- 史上最全一句话木马
- 成品升级程序
- Google Earth Engine(GEE)——墨累全球潮汐湿地变化 v1 (1999-2019) 数据集
猜你喜欢
Performance comparison of random network, scale-free network, small world network and NS small world matlab simulation
【我的OpenGL学习进阶之旅】关于OpenGL的着色器的向量和矩阵分类的访问方式: xyzw/rgba/stpq以及数组下标
Bat 使用细节2
【docsify基本使用】
First line of code (Third Edition) learning notes
1.4 - fixed and floating point numbers
Force buckle ------ replace blank space
【模糊神经网络】基于模糊神经网络的移动机器人路径规划
Relevant database questions.
Connect to remote server
随机推荐
[my advanced OpenGL learning journey] about the access methods of vector and matrix classification of OpenGL shaders: xyzw/rgba/stpq and array subscripts
不忘初心,能偷懒就偷懒:C#操作Word文件
ETL为什么经常变成ELT甚至LET?
Several C language implementations
SOC_ SD_ CLK
InnoDB engine in MySQL
Judge whether H5 is in wechat environment or enterprise wechat environment at both ends
RT thread Kernel Implementation (III): implementation of idle threads and blocking delay
No module named 'pyqt5 QtMultimedia‘
阿里云买的40G高效云盘挂载只有20G
MySQL中的InnoDB引擎
C language: exercise 3
Why does ETL often become ELT or even let?
How to set the hot deployment of idea web project
Performance comparison of random network, scale-free network, small world network and NS small world matlab simulation
Combat simulation system data
Wuenda coursera deep learning course
RT thread migration to s5p4418 (III): static memory pool management
Redis cache
Introduction to neural networks