区别关键字和标识符:

标识(zhi)符,所谓标识符,就是指变量、函数、属性的名字,或者是函数的参数。

关键字,就是在控制语句的开始或结束以及执行特定操作时具有关键作用、特定作用的符号。

保留(关键)字不能用作常量、变量、函数名以及结构字段等标识符。从字面意思上即可得知它是被保留的,将来可能被用作关键字

划重点了:·关键字是系统自带的 ,标识符是自定义的


文件名

Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 scanner.go 。如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 scanner_test.go文件名不包含空格或其他特殊字符

一个源文件可以包含任意多行的代码,Go 本身没有对源文件的大小进行限制。

Go语言命名

Go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则:

1)首字符可以是任意的Unicode字符或者下划线
2)剩余字符可以是Unicode字符、下划线、数字
3)字符长度不限

标识符

具有特殊意义的词,比如变量、常量、函数。

标识符是允许作为变量(函数、类等)名称的有效字符串

Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头,然后紧跟着 0 个或多个字符或 Unicode 数字。
举几个例子:abc, _, _123, a123

关键字

关键字是编程语言中预先定义好的具有特殊含义的标识符。关键字和保留字都不建议用作变量名。

Go语言中有25个关键字:

1
2
3
4
5
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语言中还有37个保留字:
(分类为内置常量/类型/函数

1
2
3
4
5
6
7
8
9
10
Constants:    true  false  iota  nil

Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error

Functions: make len cap new append copy close delete
complex real imag
panic recover

Go语言声明:

有四种主要声明方式:

var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。

Go的程序是保存在多个.go文件中,文件的第一行就是package XXX声明,用来说明该文件属于哪个包(package),package声明下来就是import声明,再下来是类型,变量,常量,函数的声明。

预定义标识符的总结分类

Go 内置常量 类型和函数

Go项目构建及编译

一个Go工程中主要包含以下三个目录:

src:源代码文件
pkg:包文件
bin:相关bin文件

1: 建立工程文件夹 goproject
2: 在工程文件夹中建立src,pkg,bin文件夹
3: 在GOPATH中添加projiect路径 例 e:/goproject
4: 如工程中有自己的包examplepackage,那在src文件夹下建立以包名命名的文件夹 例 examplepackage
5:在src文件夹下编写主程序代码代码 goproject.go
6:在examplepackage文件夹中编写 examplepackage.go 和 包测试文件 examplepackage_test.go
7:编译调试包
go build examplepackage
go test examplepackage
go install examplepackage
这时在pkg文件夹中可以发现会有一个相应的操作系统文件夹如windows_386z, 在这个文件夹中会有examplepackage文件夹,在该文件中有examplepackage.a文件
8:编译主程序
go build goproject.go
成功后会生成goproject.exe文件
至此一个Go工程编辑成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
1.建立工程文件夹 go
$ pwd
/Users/***/Desktop/go
2: 在工程文件夹中建立src,pkg,bin文件夹
$ ls
bin conf pkg src
3: 在GOPATH中添加projiect路径
$ go env
GOPATH="/Users/liupengjie/Desktop/go"
4: 那在src文件夹下建立以自己的包 example 文件夹
$ cd src/
$ mkdir example
5:在src文件夹下编写主程序代码代码 goproject.go
6:在example文件夹中编写 example.go 和 包测试文件 example_test.go
example.go 写入如下代码:

package example

func add(a, b int) int {
return a + b
}

func sub(a, b int) int {
return a - b
}

example_test.go 写入如下代码:

package example

import (
"testing"
)

func TestAdd(t *testing.T) {
r := add(2, 4)
if r != 6 {
t.Fatalf("add(2, 4) error, expect:%d, actual:%d", 6, r)
}
t.Logf("test add succ")
}

7:编译调试包
$ go build example
$ go test example
ok example 0.013s
$ go install example

$ ls /Users/***/Desktop/go/pkg/
darwin_amd64
$ ls /Users/***/Desktop/go/pkg/darwin_amd64/
example.a
8:编译主程序
oproject.go 写入如下代码:
package main

import (
"fmt"
)

func main(){
fmt.Println("go project test")
}

$ go build goproject.go
$ ls
example goproject.go goproject

成功后会生成goproject文件,至此一个Go工程编辑成功。

运行该文件:
$ ./goproject
go project test

go 编译问题

golang的编译使用命令 go build , go install;除非仅写一个main函数,否则还是准备好目录结构;
GOPATH=工程根目录;其下应创建src,pkg,bin目录,bin目录中用于生成可执行文件,pkg目录中用于生成.a文件;
golang中的import name,实际是到GOPATH中去寻找name.a, 使用时是该name.a的源码中生命的package 名字;这个在前面已经介绍过了。

注意点:

1
2
3
4
5
6
7
8
9
10
11
1.系统编译时 go install abc_name时,系统会到GOPATH的src目录中寻找abc_name目录,然后编译其下的go文件;
2.同一个目录中所有的go文件的package声明必须相同,所以main方法要单独放一个文件,否则在eclipse和liteide中都会报错;
编译报错如下:(假设test目录中有个main.go 和mymath.go,其中main.go声明package为main,mymath.go声明packag 为test);

$ go install test
can't load package: package test: found packages main (main.go) and test (mymath.go) in /home/wanjm/go/src/test
报错说 不能加载package test(这是命令行的参数),因为发现了两个package,分别时main.go 和 mymath.go;

3.对于main方法,只能在bin目录下运行 go build path_tomain.go; 可以用-o参数指出输出文件名;
4.可以添加参数 go build -gcflags "-N -l" ****,可以更好的便于gdb;详细参见 http://golang.org/doc/gdb
5.gdb全局变量主一点。 如有全局变量 a;则应写为 p 'main.a';注意但引号不可少;