Go的基本语法十分简洁且简单,下面是一个简单的示例:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
package
关键字代表的是当前go文件属于哪一个包,启动文件通常是main
包,启动函数是main
函数,在自定义包和函数时命名应当尽量避免与之重复。
import
是导入关键字,后面跟着的是被导入的包名。
func
是函数声明关键字,用于声明一个函数。
fmt.Println("Hello Wordld!")
是一个语句,调用了fmt
包下的Println
函数进行控制台输出。
包
每个 Go 程序都由包构成。程序从 main
包开始运行。
包其实就是一个文件夹,包内共享所有源文件的变量,常量,函数以及其他类型。包的命名风格建议都是小写字母,并且要尽量简短。
导入包
例如创建一个example
包,包下有如下函数
package example
import "fmt"
func SayHello() {
fmt.Println("Hello")
}
在main
函数中调用
package main
import "example"
func main() {
example.SayHello()
}
还可以给包起别名
package main
import e "example"
func main() {
e.SayHello()
}
批量导入时,可以使用括号()
来表示
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.MaxInt64)
}
或者说只导入不调用,通常这么做是为了调用该包下的init
函数。
package main
import (
"fmt"
_ "math" // 下划线表示匿名导入
)
func main() {
fmt.Println(1)
}
注意:在Go中完全禁止循环导入,不管是直接的还是间接的。例如包A导入了包B,包B也导入了包A,这是直接循环导入,包A导入了包C,包C导入了包B,包B又导入了包A,这就是间接的循环导入,存在循环导入的话将会无法通过编译。
导出包
在Go中,导出和访问控制是通过命名来进行实现的,如果想要对外暴露一个函数或者一个变量,只需要将其名称首字母大写即可,例如example
包下的SayHello
函数。
package example
import "fmt"
// 首字母大写,可以被包外访问
func SayHello() {
fmt.Println("Hello")
}
如果想要不对外暴露的话,只需将名称首字母改为小写即可,例如下方代码
package example
import "fmt"
// 首字母小写,外界无法访问
func sayHello() {
fmt.Println("Hello")
}
对外暴露的函数和变量可以被包外的调用者导入和访问,如果是不对外暴露的话,那么仅包内的调用者可以访问,外部将无法导入和访问,该规则适用于整个Go语言,例如后续会学到的结构体及其字段,方法,自定义类型,接口等等。
注释
Go支持单行注释和多行注释,注释与内容之间建议隔一个空格,例如
// 这是main包
package main
// 导入了fmt包
import "fmt"
/*
*
这是启动函数main函数
*/
func main() {
// 这是一个语句
fmt.Println("Hello 世界!")
}
标识符
标识符就是一个名称,用于包命名,函数命名,变量命名等等,命名规则如下:
- 只能由字母,数字,下划线组成
- 只能以字母和下划线开头
- 严格区分大小写
- 不能与任何已存在的标识符重复,即包内唯一的存在
- 不能与Go任何内置的关键字冲突