分类 go 中的文章

Defer 总结

虽说比较常用,但是遇到一道面试题还是比较懵逼,总结一下~ 面试题 下面代码输出什么? package main import "fmt" func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret } func main() { a := 1 b := 2 defer calc("1", a, calc("10", a, b)) a = 0 defer calc("2", a, calc("20", a, b)) b = 1 } /* output 10 1 2 3 20 0 2 2 2 0 2 2 1 1 3 4 */ 关键知识点 defer 是什么? defer 是 Go 语言提供的一种用于注册延迟调用的……

阅读全文

Go Struct Tag 是怎么玩的

利用 go 反射机制,通过 不同的 tag name 进行不同的处理 package main import ( "fmt" "reflect" // 这里引入reflect模块 ) // 自定义 tag const tagName = "validate" type employee struct { ID int `json:"id"` Name string `json:"名字" validate:"presence,min=2,max=40"` Age int `json:"年龄"` Desc string `json:"描述" back:"好看否"`……

阅读全文

Go 正则

正则作用 匹配 是否存在:match 匹配 提取:find 匹配 替换:replace 匹配 其他操作 匹配 是否存在 match matchstring matchrender re.match re.matchstring 匹配提取 find Regexp 类型提供了多达 16(2^4)个方法,用于匹配正则表达式并获取匹配的结果。它们的名字满足如下正则表达式: Find(All)?(String)?(Submatch)?(Index)? 如果’All’出现了,该方法会返……

阅读全文

Go xml json 小结

最常见错误 struct 字段小写,序列化反序列化都无法访问——无法外部访问 解析 XML,反序列化,Unmarshal 如果 struct 的一个字段是 string 或者[]byt 类型且它的 tag 含有",inner xml “,Unmarshal 将会将此字段所对应的元素内所有内嵌的原始 xml 累加到此字段上 比如下边例子……

阅读全文

Go 时区设置

获取 time 对象 设置时区 按设置的时区输出 package main import ( "fmt" "time" ) func main() { now := time.Now() // 1. 获取 time 对象 // 2. 设置时区 local1, err1 := time.LoadLocation("") //等同于"UTC" if err1 != nil { fmt.Println(err1) } local2, err2 := time.LoadLocation("Local")//本地的时区 if err2 != nil { fmt.Println(err2) } local3, err3 := time.LoadLocation("America/Los_Angeles") if err3 != nil { fmt.Println(err3) } // 3. 按设置的……

阅读全文

Go Http 工作过程

Go 代码的执行流程 通过对 http 包的分析之后,现在让我们来梳理一下整个的代码执行过程。 首先调用 Http.HandleFunc 按顺序做了几件事: 调用了 DefaultServerMux 的 HandleFunc 调用了 DefaultServerMux 的 Handle 往 DefaultServeMux 的 map[string]muxEntry 中增加对应的 handler 和路由规则 其次调用 http.ListenAndServe(":9090", nil) 按顺序做了几件事情: 实例化 Server 调用 Server 的 ListenAndServe() 调用 net.Listen(“tcp”, addr) 监听端口 动一个 for 循环,在循环体中 Accept 请求 对每个请求实例化一个 C……

阅读全文

Go 逃逸分析

参考:Go 逃逸分析 堆和栈 要理解什么是逃逸分析会涉及堆和栈的一些基本知识,如果忘记的同学我们可以简单的回顾一下: 堆(Heap):一般来讲是人为手动进行管理,手动申请、分配、释放。 堆适合不可预知大小的内存分配,这也意味着为此付出的代价是分配速度较慢,而且会形成内存碎片。 栈(Stack……

阅读全文

Go 堆栈的理解

来源:Go 堆栈的理解 在讲 Go 的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈。 数据结构的堆栈: 堆:堆可以被看成是一棵树,如:堆排序。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时……

阅读全文

Go GC

参考:GO GC 垃圾回收机制 Go 作为一门高级语言,具有 自动垃圾回收 的功能。 常见垃圾回收机制 1. 引用计数:引用计数通过在对象上增加自己被引用的次数,被其他对象引用时加 1,引用自己的对象被回收时减 1,引用数为 0 的对象即为可以被回收的对象 优点: 1. 方式简单,回收速度快。 缺点: 1. 需要额外的空间存放……

阅读全文