Go 语言程序的基本结构
先来看看我们之前运行的Hello World范例
package main
import "fmt"
func main() {
/* 这是我的第一个简单的程序 */
greet := "Hello World!"
fmt.Println( greet )
}
这几乎是最短的Golang语言程序,但麻雀虽小,五脏俱全,它包括一下几个部分
包声明
package main定义了包名
我们必须在源文件中非注释的第一行指明这个文件属于哪个包,如: package main
package main 表示一个可独立运行的程序,每个Go应用程序都包含一个名为main的包
引入其它包
import "fmt"告诉Go编译器这个程序需要使用fmt 包(的函数,或其他元素)
fmt包实现了格式化IO(输入/输出)的函数
函数
func main() 是程序开始执行的函数
main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有init()函数则会先执行该函数)
注释
//是注释,在程序执行时将被忽略
单行注释以//开头,是最常见的注释形式,我们可以在任何地方使用以//开头的单行注释
多行注释也叫块注释,以/*开头,并以*/结尾,且不可以嵌套使用
多行注释一般用于包的文档描述或注释成块的代码片段
变量
greet := "Hello World!"语句声明了一个字符串变量greet
等价于 var greeting string = "Hello World!:
Golang 就有类型推导功能,只要等号后边的值是可确定类型的,就可以省略 类型声明
当使用Go语言的类型推导功能时,用:= 代替 = 进行赋值
语句&表达式
fmt.println(...)可以将字符串输出到控制台,并在最后自动增加换行字符\n
使用fmt.Print("hello,world\n")可以得到相同的结果
Print 和 Println这两个函数也支持使用变量,如:fmt.Println(arr)
如果没有特别指定,它们会以默认的打印格式将变量arr输出到控制台
标识符
hello 是一个标识符
标识符的大小写遵循以下规则
1、当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的public);
2、标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的protected);
执行Go程序
我们已经了解了 Go 语言的基本结构,现在让我们看下如何编写 Go 代码并执行它
1、 打开你最熟悉的代码编辑器,比如Sublimetext3
;
2、 将以上代码复制到编辑器中;
3、 单击菜单栏上的文件(File)->保存(Save)命令将文件保存为hello.go;
4、 打开终端(命令提示符),切换到hello.go文件的保存目录;
5、 输入命令gorunhello.go并按回车执行代码;
6、 如果操作正确你将在屏幕上看到*“HelloWorld!”*字样的输出;
$ go run hello.go
Hello, World!
Go语言的基础语法
1.Go标记
标记可以是关键字,标识符,常量,字符串或符号
Go程序可以由多个标记组成,例如下面的Go语言由6个标记组成
fmt.Println("Hello,World!")
1、fmt
2、.
3、Println
4、(
5、"Hello,World!"
6、)
行分隔符
Go语言语法规定,每一行代表一个语句结束,比如下面是两个语句
每个语句不需要像C家族中的其他语言一样以分号(;)结尾,这些工作会由Go编译器自动完成
fmt.Println("Hello, World!")
如果我们打算将多个语句写在同一行,则必须使用分号(;)人为区分
当然实际开发我们不会那么做,为啥要省个那么一两行,造成代码不可读
注释
Go语言注释器会自动忽略注释
单行注释是最常用的注释形式,我们可以在任何地方使用以//开头的单行注释
多行注释也叫块注释,均以/*开头,并以*/结尾
标识符
标识符用来命名变量、类型等程序实体
一个合法的标识符应该遵守以下规则
1、可以是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列;
2、以字母或下划线开头,而不能是数字;
3、不能是Golang语言关键字;
下面是 Go 程序中有效的标识符:
mahesh kumar abc move_name a_123
myname50 _temp j a23b9 retVal
下面这些标识符则是无效的
- 1ab(以数字开头)
- case(Go 语言的关键字)
- a+b(运算符是不允许的)
关键字
下表列出了 Go 语言中的 25 个关键字或保留字
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
当然,除了以上的关键字,还有 36 个预定义标识符
append | bool | byte | cap | close |
---|---|---|---|---|
complex | complex64 | complex128 | uint16 | copy |
false | float32 | float64 | imag | int |
int8 | int16 | uint32 | int32 | int64 |
iota | len | make | new | nil |
panic | uint64 | println | real | |
recover | string | true | uint | uint8 |
uintptr |
程序一般由关键字、常量、变量、运算符、类型和函数组成
程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}
程序中可能会使用到这些标点符号:.、,、;、: 和 …
Go语言的空格
Go语言中变量的声明必须使用空格隔开
var age int
语句中适当使用空格能让程序看易阅读
无空格:
fruit=apples+oranges;
在变量与运算符间加入空格,程序看起来更加美观
fruit = apples + oranges;
Go语言数据类型
数据类型用于声明函数和变量
数据类型指的用于声明不同类型的变量或函数的一个广泛的系统。
变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式
Go语言按类别有以下几种数据类型:
类型 | 描述 |
---|---|
布尔型 | 布尔型的值只可以是常量 true 或者 false |
数字类型 | 包括整型 int 和浮点型 float Go 语言支持整型和浮点型数字,并且原生支持复数 |
字符串类型 | 字符串就是一串固定长度的字符连接起来的字符序列 Go 的字符串是由单个字节连接起来的 Go 语言的字符串的字节使用 UTF-8编码标识 Unicode 文本 |
派生类型 | 包括:(a) 指针类型(Pointer)(b) 数组类型(c) 结构化类型(struct) (d) Channel 类型(e) 函数类型(f) 切片类型 (g) 接口类型(interface)(h) Map 类型 |
数字类型
1. 整形
类型 | 描述 |
---|---|
uint8 | 无符号 8 位整型 (0 到 255) |
uint16 | 无符号 16 位整型 (0 到 65535) |
uint32 | 无符号 32 位整型 (0 到 4294967295) |
uint64 | 无符号 64 位整型 (0 到 18446744073709551615) |
int8 | 有符号 8 位整型 (-128 到 127) |
int16 | 有符号 16 位整型 (-32768 到 32767) |
int32 | 有符号 32 位整型 (-2147483648 到 2147483647) |
int64 | 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
2. 浮点型
类型 | 描述 |
---|---|
float32 | IEEE-754 32位浮点型数 |
float64 | IEEE-754 64位浮点型数 |
complex | 6432 位实数和虚数 |
complex128 | 64 位实数和虚数 |
3. 其他数字类型
下表列出了其它更多的数字类型
类型 | 描述 |
---|---|
byte | 类似 uint8 |
rune | 类似 int32 |
uint | 32 或 64 位 |
int | 与 uint 一样大小 |
uintptr | 无符号整型,用于存放一个指针 |