定时器 Timer 和 Ticker 定时器 Timer 和 Ticker 一、1 次性定时器 Timer1.Timer 简介 Timer 经过指定的时间后触发一个事件,这个事件通过其本身提供的 channel 进行通知。之所以叫单一事件,是因为 Timer 只执行一次就结束。通过 timer.NewTimer(dDuration)可以创建一个 Timer,参数既等待的时间,时间到来后立即触发一个事件。Timer 的数据结构 typeTimerstruct{C<-cha DevOps
defer 性能优化 defer 性能优化 1.defer 特点 defer 定义的延迟函数参数在 defer 语句中出现时就已经确定好了 defer 定义的顺序与实际的执行顺序相反 return 不是原子操作,执行过程是:保存返回值(若有)-> 执行 defer(若有)-> 执行 ret 跳转申请资源后立即使用 defer 关闭资源是一个好习惯 2.defer 性能优化根据实现机制不同,可以把 defer 分为三种类型 heap-allocated:存储在堆上的 d DevOps
error 版本工程迁移 error 版本工程迁移老版本开发的 go 程序如果想使用链式 error,那么需要对旧版本工程做一些适配创建 error 时,fmt.Errorf()格式化动词由 %v 修改为 %w 等值(==)检查可以使用 errors.Is()替代类型断言可以使用 errors.As()替代自定义类型额外实现 Unwrap()方法自定义类型额外实现 As()方法自定义类型额外实现 Is()方法 1.传递 error 旧工程使用 %v 动词来组装 er DevOps
链式 error 链式 error 新的 error 类型 wrapError 增强了 fmt.Errorf()以便拆解 warpError 引入了 errors.Unwrap()以拆解 warpError 引入了 errors.Is()用于检查 error 链条中是否包含指定的错误值引入了 errors.As()用于检查 error 链条中是否包含指定的错误类型 1.wrapErrorwrapError 新的 error 类型 typewrapErrorstr DevOps
基础 error 基础 errorerror 的类型如何创建 error 如何自定义 error 如何检查 error 如何处理 error 使用 error 的痛点 1.error 接口 error 是一种内建的接口类型,内建意味着不需要“import”任何包就可以直接使用,使用起来就想 int、string 一样自然 typeerrorinterface{Error()string}error 接口只声明了一个 Error()方法,任何实现了该方法的结构 DevOps
Web 模板语法 模板语法 1.模板标签{{}}模板标签使用“{{"和"}}“括起来 2.注释{{/*acomment*/}}使用{{/*和**/}}来包含注释内容 3.变量{{.}}此标签输出对象中字段或方法名称为 Admpub 的值{{.Admpub}}表示输出对象中字段或方法名称为 Admpub 的值当 Admpub 是匿名字段时,可以访问其内部字段或方法,如“Com":{{.Admpub.Com}}。如果 Com 是一个方法并返回 DevOps
文件操作与 I/O 文件操作与 I/O1.文件和目录操作对于文件和目录的操作,Go 语言主要在标准库的 os 包中提供了相应的函数 funcMkdir(namestring,permFileMode)errorfuncChdir(dirstring)errorfuncTempDir()stringfuncRename(oldpath,newpathstring)errorfuncChmod(namestring,modeFile DevOps