第一个 Go 程序
接下来我们来编写第一个 Go 程序 hello.go(Go 语言源文件的扩展是 .go),代码如下:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
要执行 Go 语言代码可以使用 go run <文件地址>命令。执行以上代码输出:
此外我们还可以使用go build <文件地址>命令来生成二进制文件:
$ go build hello.go
$ ls
hello hello.go
$ ./hello
Hello, World!
Go 语言结构
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释 ```go package main
import “fmt”
func main() { / 这是我的第一个简单的程序 / // var name string = “Hello, World!” name := “Hello, World!” fmt.Println(name) }
1. package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
1. import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
1. func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
1. /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
1. fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。
- 使用 fmt.Print("hello, world\n") 可以得到相同的结果
- Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台
6. 标识符 包括常量、变量、类型、函数名、结构字段等等
- 当以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public)
- 标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )
<a name="a0cmj"></a>
### Go 标记
Go 程序可以由多个标记组成,可以是关键字 标识符 常量 字符串 符号。如以下 GO 语句由 6 个标记组成:
```go
fmt.Println("Hello, World!")
// 6个标记分别是:
fmt
.
Println
(
"Hello, World!"
)
Go语言的语言符号
Go语言的语言符号又称记法元素,共包括5类,
- 关键字(keyword)
- 标签符(identifier)
- 操作符(operator)
- 分隔符(delimiter)
- 字面量(literal)
它们是组成Go语言代码和程序的最基本单位。
Go语言的所有源代码都必须由 Unicode 编码规范的UTF-8 编码格式进行编码
行分隔符
我把行分隔符分为了三种
- 严格分隔符 — 必须以执行以分号;, 结尾的规则:例如 Java Dart C家族
- 灵活分隔符 — 例如JavaScript Go, 在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C家族中的其它语言一样以分号;结尾,因为这些工作都将由 Go 编译器自动完成 ```go //Go语言中 fmt.Println(“Hello, World!”) fmt.Println(“我正在学习 Go语言”)
//JavaScript语言中 console.log(“Hello, World!”) console.log(“我正在学习 JavaScript语言”)
- **换行分隔符** — 例如python
```python
if __name__ == "__main__":
print("Hello, World!")
print("我正在学习 python语言")
编程语言的标识符
语言种类 | 标识符命名规则 | 例如 |
---|---|---|
Go语言 | 标识符用来命名变量、类型等程序实体 | 以下是有效的标识符: mahesh kumar abc move_name a_123 myname50 _temp j a23b9 retVal 以下是无效的标识符: 1ab(以数字开头) case(Go 语言的关键字) a+b(运算符是不允许的) |
一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列 | ||
第一个字符必须是字母或下划线而不能是数字 | ||
C语言 | 标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。 | 正确的标识符:abc,a1,prog_to |
不能把C语言关键字作为用户标识符 | if,for,while等 | |
标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长) | ||
标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写 | 长度(length),求和、总计(sum) 圆周率(pi)…… |
|
标识符命名应做到“见名知意” | ||
C语言中把标识符分为三类:关键字,预定义标识符,用户自定义标识符 | ||
C++ | 标识符由字母、数字、下划线“_”组成 | |
不能把C++关键字作为标识符 | ||
标识符长度限制32字符 | ||
标识符对大小写敏感 | ||
首字符只能是字母或下划线,不能是数字 | ||
JAVA | 标识符由字母、数字、下划线“_”、汉字、美元符号“$”组成,第一个字符不能是数字 | |
不能把java关键字和保留字作为标识符 | ||
标识符没有长度限制 | ||
标识符对大小写敏感 | ||
python | 标识符有字母、数字、下划线组成 | 以单下划线开头(foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入; 以双下划线开头的(foo)代表类的私有成员;以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如init_()代表类的构造函数 |
所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。python中的标识符是区分大小写的 | ||
以下划线开头的标识符是有特殊意义的 | ||
汇编语言 | 标识符由字母、数字、下划线组成 | 下面的标识符名是合法的: year,Day,ATOK,X,_ CWS,HAO 而下面的标识符名是不合法的: #123,.COM,$100,1996Y,1_2_3,Win3.2,LOOP,AX |
标识符的命名规则是:由字母(大、小写皆可)、数字及下划线组成,且第一个字符必须是字母或者下划线,不能用具有意义的指令符号或者寄存器 | ||
在汇编语言中,一般用大写字母 |
字符串连接
Go 语言的字符串可以通过 + 实现:
package main
import "fmt"
func main() {
fmt.Println("Google" + "Runoob")
}
//以上实例输出结果为:GoogleRunoob
Go 语言的空格
Go 语言中变量的声明必须使用空格隔开,如:
var age int;
语句中适当使用空格能让程序更易阅读。
//无空格:
fruit=apples+oranges;
//在变量与运算符间加入空格,程序看起来更加美观,如:
fruit,apples,oranges := 0,1,2
fruit = apples + oranges
注释
注释不会被编译,每一个包应该有相关注释。单行注释是最常见的注释形式
- 单行注释,以 //开头,可以在任何地方使用
- 多行注释也叫块注释,均以/ 内容代码部分 /包裹起来。如: ```go // 单行注释
/ Author by 菜鸟教程 我是多行注释 / ```
关键字
下面列举了 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 |
除了以上介绍的这些关键字,Go 语言还有 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 |
- 程序一般由 关键字 常量 变量 运算符 类型 和 函数 组成
- 程序中可能会使用到这些分隔符:括号 () 中括号 [] 大括号 {}
- 程序中可能会使用到这些标点符号:. , ; : …