
golang
mathieu
这个作者很懒,什么都没留下…
展开
-
go语言中指向切片的地址 - 指针的指针应用场景
今天看代码时一直不解为什么tags本身就是个切片,为啥要传给&tags给Find func GetTags(pageNum int, pageSize int, maps interface {}) (tags []Tag) { db.Where(maps).Offset(pageNum).Limit(pageSize).Find(&tags) return } 只穿tags进去行不行? 写代码验证下: func test(out *[]int) { *out原创 2020-12-08 16:03:05 · 582 阅读 · 0 评论 -
Go基础:range
参考:https://blog.youkuaiyun.com/fly910905/article/details/104438786 for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下: for key, value := range oldMap { newMap[key] = value } 1st value 2nd value string index s[index] uni...原创 2020-09-09 15:48:18 · 80 阅读 · 0 评论 -
beego代码阅读——反射笔记
/* 参数c是个指针,可能指向各种类型的结构体,所以此时无法使用c 所以总体思路就是:新申请一块内存,类型和c一模一样,并且把所需的value都拷贝过来 用反射获取一个未知变量的类型和值 -> 据此New一个新的变量 -> 还原成原始变量(此时是空值)-> 逐个字段把所需值拷贝到新的内存 涉及到的知识点:根据反射获取未知变量的属性,把反射对象还原成原始数据,修改反射类型字段值 参考:https://ehlxr.me/2018/01/26/golang-reflect/ */ fun.原创 2020-09-09 15:00:58 · 199 阅读 · 0 评论 -
reflect.Indirect(v).Type()和reflect.TypeOf(u)的区别
最近看beego源码,看到一段反射的代码想不通为啥作者写的这么复杂 func (p *ControllerRegister) addWithMethodParams(pattern string, c ControllerInterface, methodParams []*param.MethodParam, mappingMethods ...string) { reflectVal := reflect.ValueOf(c) t := reflect.Indirect(reflectVal).原创 2020-09-09 10:51:16 · 1759 阅读 · 0 评论 -
用select对channel进行多路复用
先看代码: func main() { ch := make(chan int, 1) for i := 0; i < 10; i++ { select { case x := <-ch: fmt.Println(x) case ch <- i: fmt.Println("--", i) } } } 为什么输出0 2 4 8? -- 0 0 -- 2 2 -- 4 4 -- 6 6 -- 8 8 ch的buffer size是1,这个通道的状态要原创 2020-07-01 16:08:14 · 631 阅读 · 0 评论 -
gopl 8.5章节wg.Wait()为什么要放在goroutine内部
wg.Wait()在goroutine内部 // makeThumbnails6 makes thumbnails for each file received from the channel. // It returns the number of bytes occupied by the files it creates. func makeThumbnails6(filenames <-chan string) int64 { sizes := make(chan int64)原创 2020-06-29 21:25:34 · 2193 阅读 · 0 评论