HelloWorld
任何语言的第一个程序都应该是 hello world(应该)
Go 语言的 hello world 如下:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
// fmt.Printf("Hello World!\n")
}
输出结果:
Hello World!
剖析基础语法
接下来对这段代码进行一个剖析:
首先第一行 package main
,Go 程序是通过包也就是 package
来组织的,这段代码说明当前的 go 文件是属于哪个包,在这个例子中包名为 main
,也就意味着这是一个独立的包,在执行编译之后会生成一个可执行文件
如果要在该主程序中引入其他的 go 文件,也就是其他的包,那么只有该 main
主包会生成可执行文件,其他的引入的 go 文件编译之后只会产生 *.a
文件(也就是包文件)
需要注意的是,每个 Go 程序必须包含一个 main
主包(有且只有一个),在这个主包内,且必须含有一个 main
主函数(有且只有一个)入口,该主函数无参数,无返回值
第二行 import "fmt"
,和其他编译类语言一样,对于 C++ 或者 C 语言来说,需要 #include <libName>
,对于 Go 程序来说,也是需要引入 “库”(Go 语言中叫 “包”),很多的标准函数都是可以通过引入标准包(也就是系统包)来进行调用的。示例这个程序需要进行打印信息,需要调用 Println()
函数,所以需要引入系统包 fmt
第三行 func main() { }
,这一行是通过关键字 func
定义了一个 main()
函数,函数体(也就是函数的具体内容)被放在了 { }
大括号中
第四行 fmt.Println("Hello World!")
,调用了 fmt
包中定义的函数 Println()
,需要输出的内容被引号包裹;对于第五行的代码,它和本行的代码时相似的,Println()
函数代替了 Printf("\n")
可以直接在信息被打印之后进行自动换行,不需要手动去敲换行符,这两个函数可以根据需要去选择调用
可以看到,Go 程序的函数调用,是通过 <packageName>.<functionName>
的方式进行调用的,类似于 C++ 语言中的 namespace
命名空间,在某些情况下可以不声明 package
名的,但是推荐进行声明,避免函数同名冲突
第五行,在 Go 程序内部的单行注释,是以 //
开头的,多行注释的结构是 /* */
这样的。同时可以看到,输出的内容里面包含了很多非 ASCII 码字符,Go 程序是天生支持 UTF-8 的,任何字符都可以直接输出,甚至可以用 UTF-8 中的任何字符作为标识符
需要非常注意的是,在 Go 语言中一行代表一个语句的结束,并不需要类似于 ;
这样的分号来分行,Go 语言编辑器会自动完成;当然也不是强制性的要求,可以将多行写在一起,用分号隔开:
fmt.Println("Hello!")
fmt.Println("World!")
// 等同于:
fmt.Println("Hello!"); fmt.Println("World!")
// 但实际开发中是非常不推荐多个语句写在一行中的
所以在上述 HelloWorld 的例子中,func main()
是不能和 {
在不同行中的,这必将会引起错误,示例如下:
func main() {
// 这是正确的写法
}
func main()
{
// 这是错误的写法
}