Skip to content
On this page

格式化输出

内容含义示例
%v代表var,相应值的默认格式
%#v相对于%v有额外的结构输出
%T输出类型
%t输出布尔类型fmt.Printf("b: %t\n", true)
%p输出指针类型

整数占位符

内容含义示例
%b二进制表示fmt.Printf("%b\n", 5) // 输出101
%d十进制表示
%o八进制表示
%x小写的16进制表示

go的循环运算符

go里面只有forfor range

go
for i := 0; i < 10; i++ {
  fmt.Printf("i: %v\n", i)
}

arr := [...]int  {1,1,3}
for _, v := range arr {
  fmt.Printf("v: %v\n", v)
}
1
2
3
4
5
6
7
8

for range 有点类似于 js中的 for in ,可以遍历 数组 、 字符串 、 map 、 切片 、 通道 。返回有以下的规律

  1. 数组 、 字符串 、 切片 返还索引和值
  2. map 返回键和值
  3. 通道,只返回通道内的值

条件运算符

if else 为go的条件运算符,和其他语言基本相同,只需要注意以下的几个问题

  1. if 后面不需要跟括号
  2. if 后面的语句必须要返回的必须要是一个布尔值’
  3. if 和 { 必须要在同一行

以下的三种都有错误

下面是关键字模块

break

break 可以结束 for \ switch \ select 的代码块

continue

continue : 结束本次循环,继续下一次

goto

goto关键字可以跳转到一个标签 ,并且结束当前的代码块

go
func main() {

	for i := 0; i < 10; i++ {

		if i == 6 {
			goto END
		}
		fmt.Printf("i: %v\n", i)
	}
END:
	fmt.Printf("end...")
}
1
2
3
4
5
6
7
8
9
10
11
12

而且 goto 还可以结束多重for循环 , 而break只能结束当前这次的for循环

go
func main() {

	for i := 0; i < 10; i++ {

		for j := 0; j < 10; j++ {

			if i == 1 && j == 2 {
				goto END
			}	
			fmt.Printf("i: %v  j:%v\n", i ,j)
		}
	}
END:
	fmt.Printf("end...")

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

defer(延迟)

go语言中 defer 会将后面跟随的语句进行延迟处理

defer 的特性

  1. 关键字defer用于注册延迟调用.
  2. 这些调用直到return前才被执。因此,可以用来做资源清理。
  3. 多个defer语句,按先进后出的方式执行。
  4. defer语句中的变量,在defer声明时就决定了。

defer用途

  1. 关闭文件句柄
  2. 锁资源释放
  3. 数据库连接释放