目录
Golang文件名
所有的go
源码都是以 ".go"
结尾。`
Go语言命名
Go
的函数、变量、常量、自定义类型、包(package
)的命名方式遵循以下规则:
- 首字符可以是任意的
Unicode
字符或者下划线 - 剩余字符可以是
Unicode
字符、下划线、数字 - 字符长度不限
Go语言声明
有四种主要声明方式:
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。
Go
的程序是保存在多个.go
文件中,文件的第一行就是package XXX
声明,用来说明该文件属于哪个包(package
),package
声明下来就是import
声明,再下来是类型,变量,常量,函数的声明。
Go项目构建及编译
一个Go
工程中主要包含以下三个目录:
src:源代码文件
pkg:包文件
bin:相关bin文件
- 建立工程文件夹
goproject
- 在工程文件夹中建立
src
,pkg
,bin
文件夹 - 在
GOPATH
中添加projiect
路径 例e:/goproject
- 如工程中有自己的包
examplepackage
,那在src
文件夹下建立以包名命名的文件夹 例examplepackage
- 在
src
文件夹下编写主程序代码代码goproject.go
- 在
examplepackage
文件夹中编写examplepackage.go
和 包测试文件examplepackage_test.go
- 编译调试包
go build examplepackage
go test examplepackage
go install examplepackage
这时在pkg
文件夹中可以发现会有一个相应的操作系统文件夹如windows_386z
, 在这个文件夹中会有examplepackage
文件夹,在该文件中有examplepackage.a
文件- 编译主程序
go build goproject.go
成功后会生成goproject.exe
文件
至此一个Go
工程编辑成功。
go 编译问题
golang
的编译使用命令go build
,go install
;除非仅写一个main
函数,否则还是准备好目录结构;GOPATH
=工程根目录;其下应创建src
,pkg
,bin
目录,bin
目录中用于生成可执行文件,pkg
目录中用于生成.a
文件; golang
中的import name
,实际是到GOPATH
中去寻找name.a
, 使用时是该name.a
的源码中声明的package
名字;
注意点:
- 系统编译时
go install abc_name
时,系统会到GOPATH
的src
目录中寻找abc_name
目录,然后编译其下的go
文件; - 同一个目录中所有的
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;
- 对于
main
方法,只能在bin
目录下运行go build path_tomain.go
; 可以用-o
参数指出输出文件名; - 可以添加参数
go build -gcflags "-N -l" ****
,可以更好的便于gdb
;详细可以参考http://golang.org/doc/gdb gdb
全局变量主一点。 如有全局变量a
;则应写为p 'main.a';
注意但引号不可少;
数据类型
按类别
- 布尔型:只可以是常量
true
或者false
。
var b bool = true
-
数字类型:整型和浮点型。
-
位的运算采用补码字符串类型:字符串就是一串固定长度的字符连接起来的字符序列,Go 的字符串是由单个字节连接起来。
-
Go
语言的字符串的字节使用UTF-8
编码标识Unicode
文本 -
复数:
complex128
(64
位实数和虚数)和complex64
(32
位实数和虚数),其中complex128
为复数的默认类型。 注:- 复数的值由三部分组成
RE + IMi
,其中RE
是实数部分,IM
是虚数部分,RE
和IM
均为float
类型,而最后的i
是虚数单位。var name complex128 = complex(x, y) 或者 z := complex(x, y) x = real(z) y = imag(z)
- 复数也可以用
==
和!=
进行相等比较,只有两个复数的实部和虚部都相等的时候它们才是相等的。
- 复数的值由三部分组成
派生类型
- 指针类型(
Pointer
) - 数组类型
- 结构化类型(
struct
) Channel
类型- 函数类型
- 切片类型
- 接口类型(
interface
) Map
类型
基于架构
整型,同时提供了四种有符号整型,分别对应8
、16
、32
、64
bit(二进制)的有符号整数,与此对应四种无符号的整数类型
Uint8
无符号8
位整型 (0
到255
)Unit16
Unit32
Unit64
int8
int16
int32
int64
浮点型
float32
float64
complex64
(实数虚数)complex128
其他
byte
rune
uint
int
uintptr
(无符号整型,存放一个指针)
** 注**:
- 表示
Unicode
字符的rune
类型和int32
类型是等价的,通常用于表示一个Unicode
码点,是等价的。 byte
和uint8
也是等价类型,byte
类型一般用于强调数值是一个原始的数据而不是一个小的整数。- 无符号的整数类型
uintptr
,它没有指定具体的bit
大小但是足以容纳指针。只有在底层编程时才需要,特别是Go
语言和C
语言函数库或操作系统接口相交互的地方。 - 有符号整数采用
2
的补码形式表示,也就是最高bit
位用来表示符号位,一个n-bit
的有符号数的取值范围是从-2(n-1)
到2(n-1)-1
。无符号整数的所有bit
位都用于表示非负数,取值范围是0
到2n-1
。 - 常量
math.MaxFloat32
表示float32
能取到的最大数值,大约是3.4e38
。 - 常量
math.MaxFloat64
表示float64
能取到的最大数值,大约是1.8e308
。 float32
和float64
能表示的最小值分别为1.4e-45
和4.9e-324
。- 浮点数在声明的时候可以只写整数部分或者小数部分
const e = .71828 // 0.71828
const f = 1. // 1
- 很小或很大的数最好用科学计数法书写,通过
e
或E
来指定指数部分
const Avogadro = 6.02214129e23 // 阿伏伽德罗常数
const Planck = 6.62606957e-34 // 普朗克常数
关键字
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
、 print
、 println
、 real
、 recover
、 string
、true
、 uint
、 uint8
、 uintptr
知识点
- 程序一般由关键字、常量、变量、运算符、类型和函数组成。
- 程序中可能会使用到这些分隔符:括号
()
,中括号[]
和大括号{}
。 - 程序中可能会使用到这些标点符号:
.
、,
、;
、:
和…
。
标识符
标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~ Z
和a~ z
)数字(0~9
)、下划线“_
”组成的序列,但是第一个字符必须是字母或下划线而不能是数字。