1. 基本操作
编译&链接程序或包
go build -work -x -o heelo.exe heelo.go
用于直接运行程序
go run heelo.go
清除编译文件
go clean
打印编译过程执行的命令,并完成编译或运行
go run -x heelo.go
只打印编译过程执行命令
go run -n heelo.go
2. go命名规则
- 只能 非空字母(Unicode) 、数字、下划线(_)组成
- 只能以 字母 下划线(_) 开头
- 不能用 go语言关键字
- 驼峰命名 例如:TaskManager
3. go的标识符
- 内置常量
- true、false、nil、iota
- 内置类型
- bool、byte、rune、int、int8、int16、int32、int64、uint、uint8、unit16、unit32、unit64、uintptr、float32、float64、complex64、complex128、string、error
- 内置函数
- make len cap new append copy close delete complex real imag panic recover
4. go关键字
- 声明 import package
- 实体声明 和 定义
- chan(管道) func interface(接口) map(映射) srtuct(结构体) type var(声明变量) const(声明常量)
- 流程控制
- break case continue default defer else fallthrough for go goto if range return select switch
5. 注释
- 行注释 //
- 块注释 /* */
6. print
- fmt.Println 打印
- fmt.Print
-
%s 占位符
-
v% 输出值
-
T% 输出值的类型
-
%b:二进制
-
%c:字符
-
%d:十进制
-
%U: Unicode 码点,%#U 带字符的 Unicode 码点
-
%q:带单引号的字符
-
%f、%F:十进制表示法
-
%n.mf表示最小占n个宽度并且保留m位小数
-
%e、%E:科学记数法表示
-
%g、%G:自动选择最紧凑的表示方法%e(%E)或%f(%F)
-
7.字符串类型
- 字面量
- 通过双引号(")来创建,不能包含多行,支持特殊字符转义
- 通过反引号(`)来创建,可包含多行,不支持特殊字符转义
- 特殊字符
- \:反斜线
- ':单引号
- ":双引号
- \a:响铃
- \b:退格
- \f:换页
- \n:换行
- \r:回车
- \t:制表符
- \v:垂直制表符
- 常用函数
- len 获取字符串长度(针对只包含ascii字符的字符串)
- string 将 byte 或 rune 数组转换为字符串
- 常用操作
- 字符串连接: +
- 关系运算符: >、>=、<、<=、==、!=
- 赋值运算符: +=
- 索引:s[index] ,针对只包含ascii字符的字符串
- 切片:s[start:end] ,针对只包含 ascii 字符的字符串
8. 指针
- 定义:每个变量在内存中都有 内存地址, &获取地址, 指针是用来存储 变量地址的变量, * 取该内存中的数值
- 声明指针 指针声明需要指定 对应的数据类型
- var pointer_01 *int //声明int类型指针
- var pointer_02 *float64 //声明float64类型指针
- var pointer_03 *string //声明string 类型指针
- new方法
-
new函数初始化, new函数根据数据类型申请内存空间 并使用零填充 并返回内存地址
-
func newtest(){
var name string = "test"
var age int = 18
pointer01 := new(int)
pointer02 := &name
pointer03 := &age
fmt.Printf("%v\n, %v\n, %v\n",pointer01, pointer02, pointer03)
fmt.Println(*pointer01)
fmt.Println(*pointer02)
fmt.Println(*pointer03)
}
[root@happy go]# go run heelo.go
0xc0000140b0
, 0xc000010210
, 0xc000014098
0
test
18
9. 流控语句
func ifcase(){
var score_result int = 5
fmt.Println(score_result)
if 60 <= score_result {
if score_result<80{
fmt.Println("normal")
}else{
fmt.Println("good")
}
} else{
fmt.Println("cirtical")
}
}
10. for 循环
for循环
func forcase(){
for i:=0;i<100;i++{
println(i)
}
}
break
func breakcase(){
for i:=0;i<100;i++{
if i == 18{
break
}
println(i)
}
}
continue
func continuecase(){
for i:=0;i<100;i++{
if i%2 ==1{
continue
}
println(i)
}
}
while
func whilecase(){
count := 0
i := 0
for{
if i < 100{
count += i
i++
}else {
break
}
}
fmt.Println(i, count)
}
for-range 可以遍历对象 字符串,数组,切片,映射,通道等 range 返回两个元素分别为数组元素索引和值
func forrangecase(){
string_result := "this is a test!"
for index, values := range string_result {
fmt.Printf("%d: %c\n",index, values)
}
}
label 与 goto, 可以通过 goto 语句任意跳转到当前函数指定的 label 位置
func gotolablecases(){
sum := 0
i := 1
START: //定义START标签
if i>100{
fmt.Println("END")
goto END //如果超过100 直接结束
}else{
sum += i
i++
goto START // 跳转到START继续运算
}
END: //定义END标签
fmt.Println(sum)
}