Go学习笔记04| 青训营笔记

137 阅读2分钟

这是我参与「第三届青训营-后端场」笔记创作活动的的第4篇笔记

Go输入

  1. Scan
  2. Scanln
  3. Scanf Scan
    输入:读取以空白符分割的值返回到地址中进行修改,换行视为空白符
    返回值:错误处理,返回值中有一个int类型的值是返回正确的数量,有一个err是错误的原因
var n1, n2 string
fmt.Scan(&n1, &n2)

Scanln
Scanln 类似 Scan,但它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。使用场景就是只要换行就结束(一行一行地读取数据,用多个Scanln函数输入数据时要分多行) 返回错误和Scan一样

var n1, n2 string
fmt.Scanln(&n1)
fmt.Scanln(&n2)

Scanf
用于格式化输入,需要用到格式占位符
返回值: 它返回成功扫描的项目数
例子:

var s string
var n int
fmt.Scanf("%s", &s)    
fmt.Scanf("%d", &n)

一些格式:

  • %v 值的默认格式表示
  • %+v 类似%v,但输出结构体时会添加字段名
  • %#v 值的Go语法表示
  • %T 值的类型的Go语法表示
  • %% 百分号
  • %t 单词true或false
  • %b 表示为二进制
  • %c 该值对应的unicode码值
  • %d 表示为十进制
  • %o 表示为八进制
  • %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
  • %x 表示为十六进制,使用a-f
  • %X 表示为十六进制,使用A-F
  • %U 表示为Unicode格式:U+1234,等价于"U+%04X"

Go defer

介绍:defer是go中一种延迟调用机制,defer后面的函数只有在当前函数执行完毕后才能执行,通常用于释放资源。
因为后申请的资源和可能对前面申请的资源有依赖。如果先将前面申请的资源释放掉了。对于后面的资源可能会造成影响。所以先释放后申请的资源,再释放前面申请的资源。

defer什么时间执行

前面说到,defer只有在当前函数执行完毕后,才会执行。其实不太准确。
go中的return语句并不是原子性操作,一般是分为两步:
将返回值赋值给一个变量 执行RET指令。
defer就执行在1之后,2之前。