每天5分钟-玩转golang,第1节 基础

239 阅读2分钟

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)
}