文章目录
一、GO的主要特征
1.Golang文件名
所有的go源码都是以.go结尾
2.Go语言命名
2.1.Go的函数、变量、常量、自定义类型、包的命名方式遵循以下规则:
(1)首字符可以是任意unicode字符或者下划线
(2)剩余字符可以是任意unicode字符、下划线、数字
(3)字符长度不限
2.2.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
2.3.Go还有37个保留字
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
2.4.可见性
(1)声明在函数内部,是函数的本地值,类似private
(2)声明在函数外部,是对当前包(包内所有的.go文件)可见,类似protect
(3)声明在函数外部且首字母大写,是对所有包可见,类似public
2.5.Go的声明
Go中有四种主要声明:
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)
.go文件的第一行就是package声明,用来说明该文件应该属于哪个包,之后便是import声明,接下来便是类型、变量、常量、函数的声明。
二、Golang内置类型和函数
1.内置类型
1.1.值类型
具体如下:
bool
int(32 or 64), int8, int16, int32, int64
uint(32 or 64), uint8(byte), uint16, uint32, uint64
float32, float64
string
complex64, complex128
array -- 固定长度的数组
1.1.1 .布尔类型 bool
举个例子:var b bool = true
布尔的值只能是常量true 或 false
两个类型相同的值可以通过==
或者!=
运算符来进行比较并获取一个布尔类型的值
例如
var a = 1
a == 2 ->false
a == 1 ->true
1.1.2.数字类型
(1)Go语言支持整型和浮点类型数字,并且原生支持复数。
(2)Go也有基于架构的类型,例如:int、uint 和 unitptr
(3)Go 语言中没有 float 类型。
与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来:
整数:
int8(-128 -> 127)
int16(-32768 -> 32767)
int32(-2,147,483,648 -> 2,147,483,647)
int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
无符号整数:
uint8(0 -> 255)
uint16(0 -> 65,535)
uint32(0 -> 4,294,967,295)
uint64(0 -> 18,446,744,073,709,551,615)
浮点型(IEEE-754 标准):
float32(+- 1e-45 -> +- 3.4 * 1e38)
float64(+- 5 1e-324 -> 107 1e308)
1.2.引用类型:
slice -- 切片(最常用)
map -- 映射
chan -- 管道
2.内置函数
Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。因此,它们需要直接获得编译器的支持。
下面是一些常用的内置函数:
append -- 用来追加元素到数组、slice中,返回修改后的数组、slice
close -- 主要用来关闭channel
delete -- 从map中删除key对应的value
panic -- 停止常规的goroutine (panic和recover:用来做错误处理)
recover -- 允许程序定义goroutine的panic动作
real -- 返回complex的实部 (complex、real imag:用于创建和操作复数)
imag -- 返回complex的虚部
make -- 用来分配内存,返回Type本身(只能应用于slice, map, channel)
new -- 用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
cap -- capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
copy -- 用于复制和连接slice,返回复制的数目
len -- 来求长度,比如string、array、slice、map、channel ,返回长度
print、println -- 底层打印函数,在部署环境中建议使用 fmt 包
三、init函数和main函数
1. init函数
Go语言中init函数用于package初始化,是Go语言的一个重要特性
init函数主要具有以下特性:
1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
2 每个包可以拥有多个init函数
3 包的每个源文件也可以拥有多个init函数
4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用
2. main函数
Go语言程序的默认入口函数(主函数):func main()
函数体用{}一对括号包裹。
func main(){
//函数体
}
3. 异同
相同点:
两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:
init可以应用于任意包中,且可以重复定义多个。
main函数只能用于main包中,且只能定义一个。
两个函数的执行顺序:
对同一个go
文件的init()
调用顺序是从上到下的。
对同一个package
中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。
对于不同的package
,如果不相互依赖的话,按照main
包中"先import
的后调用"的顺序调用其包中的init()
,如果package
存在依赖,则先调用最早被依赖的package
中的init()
,最后调用main
函数。
如果init
函数中使用了println()
或者print()
你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用。
四、命令
以下是一些常用命令
go env 用于打印Go语言的环境信息。
go run 命令可以编译并运行命令源码文件。
go get 可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。
go build 命令用于编译我们指定的源码文件或代码包以及它们的依赖包。
go install 用于编译并安装指定的代码包及它们的依赖包。
go clean 命令会删除掉执行其它命令时产生的一些文件和目录。
go doc 命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。
go test 命令用于对Go语言编写的程序进行测试。
go list 命令的作用是列出指定的代码包的信息。
go fix 会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
go vet 是一个用于检查Go语言源码中静态错误的简单工具。
go tool pprof 命令来交互式的访问概要文件的内容。
总结
以上就是今天要分享的内容,本文仅仅简单介绍了GO语言的主要特征、内置类型和函数以及一些常用命令,如有遗漏,望指出,后续文章会做补充。