目录 - 夜读讨论

2019-06-19 Go、Gorm 与 MySQL timestamp


来源:《Go 夜读》微信群 Go、Gorm与MySQL中timestamp交互时遇到的问题 涉及到的方面 MySQL中timestamp 默认值,explicit_defaults_for_timestamp属性设置 Go中time.Time字段类型,time.Time零值 Gorm中的处理方式 例如: 数据模型: type A struct { Id int UserId int VipExpireTime time.Time MessageType string ClickTabTime time.Time CreateTime time.Time `gorm:"defaul
[阅读全文]

2019-05-21 浏览器自动化工具


来源:《Go 夜读》微信群 A0: chromedp 浏览器自动化工具,还有 puppeteer。 A1: chromedp 不如 github.com/raff/godet chromedp 到现在都没把 chrome console 的功能实现 我们做 cookie scanner 的时候把相关的chrome driver 库用了个遍。 我们这里已经都测过了 https://github.com/CovenantSQL/CookieScanner A2: puppeteer 很好啊 A3: chromedp 用起来比较难受,特别是部署的时候 如果用 Docker 不知道怎么搞呢? >
[阅读全文]

2019-05-15


来源:《Go 夜读》微信群 Q: jaeger好像是由入口服务决策这条trace是否需要采样上报的?所有下游的服务都会根据入口服务的采样标记决定是否将数据上报给agent,这样的话有个问题: 如果我的后端服务架构中,入口服务的请求量特别大,但是最下游的两三个服务请求量相对下(相差100倍以上),那如何妥善地设置采样比例? 比例小的话,下游服务的上报量可能会很少,统计分析的时候准确度不够; 比例大的话,入口服务的上报量又会太大 A: 不太明白:入口和最下游服务不是一起访问? Q: 不是的,你可以把我们后台看作类似于漏斗形架构,数据每经过一个服务就会做判断,可能需要继续访问下游服务,也可能不需要、
[阅读全文]

2019-04-10


来源:《Go 夜读》微信群 本地开发分支已经 merge 到 master 后,如何快捷的删除本地开发分支? #!/bin/bash function git_branch_cleanup() { for branch in git branch --format='%(refname:short)'|grep -v '\*\|master' ; do git checkout $branch check_results=git fetch origin master && git rebase origin/master result=$(echo $check_re
[阅读全文]

2019-03-26 微信群讨论


来源:《Go 夜读》微信群 时间:未知 背景 先前由于公司这边要做一些基础指标的监控上报,因此之前在夜读群里和大家聊了下。经推荐最后使用了第三方库 gopsutil 今天我把之前查的资料重新翻了出来,大家有兴趣的可以看看。以备不时之需及学习一下 例子 package main import ( "time" "log" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil
[阅读全文]

2019-03-08 微信讨论


读写锁引入 有下面一段程序,面试官问这段程序有什么问题? type Store struct { a string b string sync.RWMutex } func (s *Store) GetA() string { fmt.Println("get a") s.RLock() fmt.Println("get a2") defer s.RUnlock() return s.a } func (s *Store) GetAB() (string, string) { fmt.Println("get ab") s.RLock
[阅读全文]

2019-03-07 微信讨论


来源:《Go 夜读》微信群 1 Goland中println和fmt.Print乱序原因 Question: 下面的代码,在goland上运行后,为何输出顺序不确定?但是使用命令行go run xxx运行,输出顺序却是确定的? package main import "fmt" func main() { println("hello") println("world") fmt.Print("go\n") } 输出结果: hello world go 或是: go hello world Answer: pri
[阅读全文]

2019-02-20 浮点数如何输出


来源: Wechat discuss 将数据序列化为json的时候,怎么让序列化后的 json 里面不要使用科学计数法 json.Marshal 转出来的json怎么能不让转成科学计数法 大家有解决办法吗? dec := decimal.NewFromFloat(0.000001) fmt.Println(dec.String()) 参考资料 shopspring/decimal
[阅读全文]

2019-01-10 关于range的一些不易察觉的"坑"


来源: Wechat discuss 1. 以下代码最终的结果是什么? func main(){ sli := []int{6,7,8} for i := range sli { sli = append(sli,666) fmt.Println(i) } } // Output: 面试时遇到的一个问题, 这段代码会形成死循环吗? 回来之后试了一下出乎意料: 输出结果为: 0 1 2 看上去 for 循环的次数,在进入循环体前已经确定了,且次数为 range 后 len(sli) 实际上,range 为 golang 的语法糖,其实际执行相当于 func main() { sli := [
[阅读全文]

2018-12-25 MacOS Time Synchronization


来源: Wechat discuss MacOS Time Synchronization 今天在启动 Geth (以太坊私链节点)的时候,出现了以下的错误。在比较后发现本机时间落后了北京时间近一分钟。 在搜索解决方案的时候,发现在 macOS Mojave 里面 ntpdate 已经废弃了。 改用了sntp,在Terminal输入以下的命令,即可同步。 sudo sntp -sS time.asia.apple.com 系统设置建议 1、自动设置日期与时间 2、时区不要自动设定,选择中国北京,因为不同地区的时间会有误差。 参考资料 https://apple.stackexc
[阅读全文]

2018-12-11 微信讨论


来源:《Go 夜读》微信群 时间:2018-12-11 Golang module初始化 使用go mod命令进行初始化: go mod init [module name] 如:go mod init cmpp Golang module文件 调用go mod init会自动生成go.mod文件,使用如下: module tx require github.com/sirupsen/logrus v1.2.0 require ( github.com/acroca/go-symbols v0.0.0-20180523203557-953befd75e2 // indirect github.
[阅读全文]

2018-12-07 微信讨论


来源:《Go 夜读》微信群 应该还是负数问题,你实验一下 下面这种情况的负数报错是在 build 阶段报的: errMake := make([]byte, 64-22*5) // negative len argument in make([]byte) 下面这种情况的负数,编译时不知道,是在运行时的报错: errMake := make([]byte, 64-len(testStr)*5) // runtime error: makeslice: len out of range
[阅读全文]

2018-12-04 微信讨论


来源:《Go 夜读》微信群 json 解析结构体断言问题 package main import ( "encoding/json" ) type Msg struct { Id int json:"id" Params []interface{} json:"params" } type Employee struct { Name string json:"name" } func main() { b := []byte(`{"id":111,"params":["boss
[阅读全文]

实打实的 Go 项目,但是 Github 却统计为 JavaScript 怎么办?


来源:《Go 夜读》微信群 时间:2018-12-04 原理 Github 采用 Linguist 来自动识别你的代码,然后判断属于哪一种语言。 问题 但是我是一个 Go 相关的文档或者 Go Web 工程项目,肯定希望在搜索 Go 语言的时候,也能包括我,并且显示项目所属语言为 Go。 但是默认情况下,你肯定会失望。。。可能还会吐槽:为什么 Github 不提供一个选择项目所属语言呢? 针对这个问题,我的思考是,Github 就是想让大家 hack 一点。 解决方法 在项目中增加更多的你所想要归属的语言的代码(综合性项目,最好是采用这种方式)。 在项目中添加 .gitattribute
[阅读全文]

Golang 用什么配置中心管理服务


来源:《Go 夜读》微信群 时间:2018-11-29 Golang 用什么配置中心管理服务? etcd https://juejin.im/post/5b7e8b82f265da432e75c7c4 Qconf
[阅读全文]

2018-11-09 强制使用字段命名方式初始化结构体


来源:《Go 夜读》微信群 时间:2018-11-09 强制使用字段命名方式初始化结构体 在定义结构体时,加入一个非导出且大小为0的字段, 编译器会强制开发者使用字段命名的方式初始化结构体, 而不能按顺序来赋值. 这个小技巧利用了包的非导出字段可见性, 所以只能在不同包下初始化结构体才有用. // foo.go package foo type Config struct { _ [0]int Name string Size int }// main.go package main import "foo" func main() { //_ = foo.Config{[0]
[阅读全文]

2018-11-08 Address operators


来源: Wechat discuss Address_operators package main import ( "fmt" "math" ) type abser interface { Abs() float64 } type onef float64 func (one onef) Abs() float64{ return math.Pi } func main(){ var a,b abser a = &onef(3.14) aa := onef(3.14) b = &aa fmt.Println(a.Abs()) fmt.Prin
[阅读全文]

2018-11-08 aws ec2实例无法连接登录问题


来源:《Go 夜读》微信群 时间:2018-11-08 aws ec2实例无法连接登录问题 在AWS上注册一个账号,然后创建一个免费试用期限的虚拟机,虚拟机成功创建并启动之后,我们通过SSH登录这台虚拟机出现无法连接的问题. 连接方式aws console页面会提示你如何连接,如下:

1. 创建虚拟机的时候会让你生成一个pem秘钥文件作为登录认证,把这个xxx.pem文件放到自己的机器上并设置400权限 chmod 400 wpc-secret.pem # 2. 登录(注意我的是aws虚拟机是centos系统需要ec2-user用户登录,加-v参数显示登录过程详细信息) ssh -i &


[阅读全文]

2018-10-18 encOp 是在哪里实现的呢?


来源: Wechat discuss encOp 是在哪里实现的呢? encode.go文件中的这行代码是对数据进行编码么,具体怎么实现的,在哪里知道么? instr.op(instr, state, reflect.Value{}) func (enc *Encoder) encode(b *encBuffer, value reflect.Value, ut *userTypeInfo) { defer catchError(&enc.err) engine := getEncEngine(ut, nil) … } 点击进入 getEncEngine -> build
[阅读全文]

2018-09-28 goroutine 中怎么得到返回值


来源: Wechat discuss 时间:2018-09-28 goroutine 中怎么得到返回值? package main import ( "fmt" "sync" "time" ) var wg sync.WaitGroup func main() { fmt.Println("开始。。。") wg.Add(2) time1 := time.Now() go f1(1, 4) go f2(2, 5) wg.Wait() time2 := time.Since(time1) fmt.Printf("cost:%v
[阅读全文]

2018-09-19 微信讨论


来源: Wechat discuss 时间:2018-09-19 Producer to Consumer via channel 这段code有问题,可能程序跑完了,buffer中还存在数据,就丢失了。 package main import ( "fmt" ) const maxBufSize = 3 const numToProduce = 1000 var finishedProducing = make(chan bool) var finishedConsuming = make(chan bool) var messageBuffer = make(chan in
[阅读全文]

2018-09-18 压测接口性能的框架,大家有没有推荐


来源:《Go 夜读》微信群 压测接口性能的框架,大家有没有推荐? wrk hey vegeta
[阅读全文]

2018-09-14 VSCode 如何代码自动补全和自动导入包


来源:《Go 夜读》微信群 VSCode 如何代码自动补全和自动导入包 VSCode 必须安装以下插件: 首先你必须安装 Golang 插件,然后再给 Go 安装工具包。 在 VS Code 中,使用快捷键:command+shift+P,然后键入:go:install/update tools,将所有 16 个插件都勾选上,然后点击 OK 即开始安装。 Installing 16 tools at /Users/maiyang/develop/goworkspace//bin gocode gopkgs go-outline go-symbols guru gorename dlv gode
[阅读全文]

2018-09-05 微信讨论


来源:《Go 夜读》微信群 [xxxxx [1 2 3 4]] 如何做到输出为[ssss 1 2 3 4] func main() { MutilParam("ssss", 1, 2, 3, 4) //[ssss 1 2 3 4] iis := []int{1, 2, 3, 4} MutilParam("xxxxx", iis) //MutilParam= [xxxxx [1 2 3 4]] 如何做到输出为[xxxx 1 2 3 4] } func MutilParam(p …interface{}) { fmt.Println("MutilPar
[阅读全文]

2018-09-04 微信讨论


来源:《Go 夜读》微信群 Request Body 的请求中,不能 bind 两次吗? var body struct { Fcid string "fcid" } c.Bind(&body) log.Traceln("body", body) var body2 struct { Fcid string "fcid" } c.Bind(&body2) log.Traceln("body2", body2) 打印输出结果为: 2018/09/04 14:58:44.641654 [TRC] jwtValidato
[阅读全文]

2018-08-30 理解 Go interface


来源:《Go 夜读》微信群 时间:2018-08-30 Go 语言不同接口、声明了同名方法,怎么解决问题? 防止被其他对象误实现接口。 由此,我陷入了一些思考,所以也引申出来了对 Go 接口实现或者是否这个是一个推荐的做法呢? 网络上的一些讨论为什么我不喜欢Go语言式的接口(即Structural Typing) Structural_type_system 是什么?摘自于 wiki Duck_typing 一些讨论。。。 Wuvist 对 Go 语言接口的个人观点 Go里面类适用于哪些接口,不也是程序员显示指定的吗? 区别在于是实现者显示指定,还是调用者显示指定。 我也可以说作为调
[阅读全文]

2018-08-24 工具推荐


来源:《Go 夜读》微信群 时间:2018-08-24 工具推荐 SequelPro(MySQL Client GUI) Robot 3T(MongoDB Client GUI) mycli(MySQL command line client) Navicat Premium(DB Client GUI) DataGrip: Database management systems by JetBrains SQLyog is an all-round Management Tool (/‘GUI’/‘Frontend’) for MySQL
[阅读全文]

2018-08-23 有什么好的博客平台吗


来源:《Go 夜读》微信群 时间:2018-08-23 有什么好的博客平台吗?(除了简书) Github pages hugo + Github 自建 jekyll Ghost hexo + Github hexo + Coding pages 图片CDN:七牛 请问nats有类似kafka manager这样的管理后台吗? kafka manager 的管理后台:kafkatool 对kafka的抽象 kafka聚焦于数据管道,nats聚焦于message bus for-select ? 下面这段代码为什么运行一会儿就停止了呢? 用 waitgroup 肯定是正常的,研究一个 g
[阅读全文]

2018-08-15 深度 | 从 Go 高性能日志库 zap 看如何实现高性能 Go 组件


来源:《Go 夜读》微信群 时间:2018-08-15 深度 | 从 Go 高性能日志库 zap 看如何实现高性能 Go 组件 一篇技术文章引发的讨论。 我们有一个服务用 logrus 落日志,并发量太高了,直接影响了性能。 printf 类型字符串格式化的日志格式,不再推荐,现在日志的消费,逐渐从人转向了计算机,结构化的数据和友好的解析方式更重要。—跟 logrus 的作者观点一样,“核心不是性能”。。。 我们后面也用 sync.Pool 去优化落日志这一块。(当时因为 logrus 写日志这一块,直接在高并发的时候多开销了10G内存,当时服务总共开销才 15 G内存。后
[阅读全文]

2018-08-14 做实时语音流,用什么来做比较好


来源:《Go 夜读》微信群 时间:2018-08-14 问题:做实时语音流,用什么来做比较好?rtmp?还是ws? 第三方:即构(推荐)、声网(自己做不稳定,还得搞流媒体服务器) 自己做一般都是rtmp 实时?需要有多实时?直播还是点到点通信? A:有一个实现是在 boya 的 rtmp 协议基础上,完善了 golang 的 rtmp 流媒体服务器,最近已经上网运行了,支持查询回源,定点回源等,资源消耗很低。也可参考项目livego Go 默认使用 CPU 核数? 具体代码:proc.go#schedinit()。 文档说明:runtime-GOMAXPROCS Another po
[阅读全文]

2018-08-09 Log 的颜色能设置吗


来源:《Go 夜读》微信群 时间:2018-08-09 问题:Log 的颜色能设置吗? 答:可以的。 func TestLogColor(t *testing.T) { fmt.Println("") // | 前景 | 背景 | 颜色 | // |—-|—-|—-| // | 30 | 40 | 黑色 | // | 31 | 41 | 红色 | // | 33 | 42 | 绿色 | // | 33 | 43 | 黄色 | // | 34 | 44 | 蓝色 | // | 35 | 45 | 紫红色 | // | 36 | 46 | 青蓝色 |
[阅读全文]

2018-08-02 Go 调用 shell 脚本如何传递参数


来源:《Go 夜读》微信群 时间:2018-08-02 问题:Go 调用 shell 脚本如何传递参数? 答: package main import ( "fmt" "os/exec" ) func main(){ command := "./dir_size.sh" //脚本的路径 cmd := exec.Command("/bin/bash", "-c", command) output, err := cmd.Output() if err != nil { fmt.Printf("Execute
[阅读全文]

2018-08-02 Push Notification (apns)


来源:《Go 夜读》微信群 时间:2018-08-02 问题: 如何批量发送apns消息推送 Install apns2 go get -u github.com/sideshow/apns2 先看下如何发送一条的apns. func push(){ cert, err := certificate.FromP12File("../cert.p12", "") if err != nil { log.Fatal("Cert Error:", err) } notification := &apns2.Notification{} noti
[阅读全文]

2018-07-31 println 与 fmt.Println 有何猫腻


来源:《Go 夜读》微信群 时间:2018-07-31 问题1:println与fmt.Println有何猫腻? 下面2个输出语句代码,哪一行先输出 package main import "fmt" func main() { println("11111") fmt.Println("22222") } 本人的是debian linux系统下,go version为1.9.1,goland IDE,反复执行几次之后发现始终”反着”输出 22222 11111 按照一般人的思维惯性(或者说下意识),应该先输出11111
[阅读全文]

2018-07-14 包版本管理


来源:《Go 夜读》微信群 时间:2018-07-14 问题1:包版本管理? govendor,vgo? vgo 是 Go Module 的前身。 问题2:为什么要搞一个 GOPATH ? GOPATH 是 Go 最初设计的产物,在 Go 语言快速发展的今天,人们日益发现 GOPATH 似乎不那么重要了,尤其是在引入 vendor 以及诸多包管理工具后。并且 GOPATH 的设置还会让 Go 语言新手感到些许困惑,提高了入门的门槛。Go core team 也一直在寻求 “去 GOPATH” 的方案,当然这一过程是循序渐进的。Go 1.8 版本中,如果开发者没有显式设置 GOPATH,Go
[阅读全文]

2018-07-11 在32位系统中使用64位原子操作的坑


来源:《Go 夜读》微信群 时间:2018-07-11 在32位系统中使用64位原子操作的坑 先来个例子 type Y struct { a bool v uint64 } func TestAtomicY(t *testing.T) { var y Y atomic.AddUint64(&y.v, 1) // panic in 32bit system } 在上面的例子中,如果在64位系统中运行是没问题的的,但是在32位系统中会panic。 为何会 Panic ? 这个简单回答可以查看,go官方的文档atomic-pkt-note的内容: Bugs On x86-32, the 64
[阅读全文]

2018-07-09 怎么建立一个一一映射?


来源:《Go 夜读》微信群 时间:2018-07-09 问题1. golang 怎么建立一个一一映射,现在的映射 map 是可以多对一的是吧? 建立两个 map 互查。 segment tree? 问题2. golang 中 new 和 make 关键字的区别和使用场景? 首先,我们看一下 Go 标准包的 builtin 源码吧(*go/src/builtin/builtin.go*) // The make built-in function allocates and initializes an object of type // slice, map, or chan (only).
[阅读全文]

2018-07-04 文件夹命名


来源:《Go 夜读》微信群 时间:2018-07-04 问题1. 话说大家 go 文件夹命名 是什么规范。下划线 横线 驼峰?有标准么? 有标准 https://blog.golang.org/package-names 问题2. 包的命名多个单词的情况呢? 包名和文件名用小写,使用短命名,尽量和标准库不要冲突。 文件名或者文件夹不要用大写,切记!!! 系统有些区别大小写,有些不区分,比如 Mac 不区分大小写,而 linux 区分。 制作规范的时候参考的是 effective go。 参考 Golang 代码规范
[阅读全文]

2018-07-02 在Linux操作系统环境,单机如何支撑100万并发的服务


来源:《Go 夜读》微信群 时间:2018-07-02 问题1. 在Linux操作系统环境,单机如何支撑100万并发的服务 问题来源: > HundredLee 在微信群里分享了一个掘金网的文章 GO千万级消息推送服务,然后另一个大佬 bye 说 goim 是哔哩哔哩在用的一个框架,可以支撑百万级并发连接,于是在“单机百万并发”这个问题上展开了热烈的讨论。 问题:我以前对并发的理解几乎都是错的,误以为每有一个客户端连接到服务器上就会多占用服务器的一个新TCP端口,但是看了文章和其他的QQ群的讨论,我终于搞明白了并发的概念。那么我的疑惑是单机如何才能支撑起100万的并发量呢? 答案
[阅读全文]

2018-06-07 Dial 超时


来源:《Go 夜读》微信群 时间:2018-06-07 问题1 func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) { func DialTimeout(network, address string, timeout time.Duration) (Conn, error) {
 这两个方法返回的对象类型不一样,想得到TCPConn对象,同时可以设置连接超时,应该怎么写?有谁可以帮帮忙吗? 回答: Use net.Dialer with either the Timeout or Deadline fie
[阅读全文]

2018-05-28 生产环境如何调试服务的内存泄露


来源:《Go 夜读》微信群 时间:2018-05-28 1. 生产环境如何调试服务的内存泄露? pprof 火焰图 待补充… 如果用 gin 的话, 就一句代码…..https://github.com/DeanThompson/ginpprof 其他方法:目测法、删除法(删除怀疑的代码,然后压测)。 2. pprof 的数据如何实时采集到 influxdb ,有什么解决方案? pprof 不能保存到 influxdb,想要保存的话,得使用 expvar 把 Golang 应用的内部数据传过去。 pprof 是一个运行时间段的数据,然后后续分析使用,线上应该使
[阅读全文]

2018-05-23 Get passes lock by value


来源:《Go 夜读》微信群 时间:2018-05-23 1. Get passes lock by value type ExecuterList struct { sync.Map length int } func (e ExecuterList) Get(key string) IExecuter { value, ok := e.Load(key) if !ok { return nil } if value == nil { return nil } res, _ := value.(IExecuter) return res } 使用 go tool vet ,出现“Get pas
[阅读全文]

2018-05-22 Go string to byte slice


来源:《Go 夜读》微信群 时间:2018-05-22 背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点。题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s+="4" *ps+="5" (*pb)[1] = 0 (*pb)[2] = 4 fmt.Printf("%+v\n",*ps) fmt.Printf("%+v\n",*pb) 问以上代码的输出是什么。 分析 很容易可以看出 s 和 ps 代表同一个 string,b 和 pb
[阅读全文]

2018-05-21 微信讨论


来源:《Go 夜读》微信群 时间:2018-05-21 1. 如下代码何解? a := []int{1,2,3} for _, i:= range a { go func() { fmt.Println(i) }() } time.Sleep(time.Second) // Output: // 3 // 3 // 3 大家可以看参考资料 1, 2,上面有完整的解答。 延伸出来的知识点:惰性求值和闭包。 解答: 根据问题的描述推断出是闭包的特性,通过Google检索关键字 glang faq loop closure 可找到官方的faq,里面有详细的解释,并提醒了用户可以通过 go vet
[阅读全文]

2018-05-18 包循环依赖如何解决


  1. 包循环依赖如何解决? 方法: 用 govendor list -v 可以查看一个包被哪些包依赖。 详解: 使用 govendor list -v 可以查看一个包被哪些包依赖: 那么反过来,你可能想知道一个包依赖了哪些包?这个是 go 工具链里面提供的方法,直接使用 go list,比如:go list -f ‘{{ .Imports }}’ github.com/developer-learning/night-go
  2. bitset strings 包之 bitset,一个实现:https://github.com/henrylee2cn/goutil/blob/master/bit

[阅读全文]

2018-05-16 Go 学习之路


来源:《Go 夜读》微信群 时间:2018-05-16 推荐新手先看一看Go 学习之路 1. 有没有适合小白看的项目?(没有底层语言基础) 建议先系统过一遍基础语法; 看了 Go 基础之后,可以把数据结构,排序:树、表等都撸一遍; 自己写点工具、爬虫之类的进步比较快; 推荐《Go 语言实战》,《Go 语言系列》,适合从入门到深入 编程书籍的整理和收集 雨痕大神些的《Go 语言学习笔记》也不错,包含语法介绍和源码剖析(可能不适合初学者哦,比较多的底层知识) 推荐项目 beego BoltDB(不维护了,但是代码不多,注释比较详细,作为学习容易入门) urfave/cli grpc-g
[阅读全文]

2018-05-13 关于变量在 if-else 条件表达式里的作用域范围


一. 如何发现这个问题? 我是在浏览 Twitter 的时候, 发现博主 David Crawshaw 分享了一段代码, 推文地址: https://twitter.com/davidcrawshaw/status/994614426064928770 原博文代码如下, 点击在 play 里运行: package main import "fmt" func main() { if a := 1; false { } else if b := 2; false { } else if c := 3; false { } else { fmt.Println(a, b, c) /
[阅读全文]

2018-05-10 用什么工具解决项目依赖


来源:《Go 夜读》微信群 时间:2018-05-10 13:30 1. 你们是用什么工具解决项目依赖的呢? dep govendor govendor 最简洁,glide最方便,不过一般团队用啥就用啥。 2. 平时你们的工作目录结果是怎样的? *一个大的 GOPATH 下,放所有项目*【比较多是这种方式】 一个项目一个 GOPATH 有一个默认 GOPATH,不同项目有不同的 GOPATH VisualStudio Code 的设置: "go.gopath": "${workspaceRoot}:/Users/username/gopath"
[阅读全文]

2018-05-09 微信群讨论


来源:《Go 夜读》微信群 时间:2018-05-09 1. debug 调试:dlv (待补充) 2. not reached go/src/runtime/panic.go (待补充) 3. Go 开发工具 Vim:(待补充) Emacs VSCode JetBrains: IntelliJ,Goland Goland用学生邮箱可以免费 服务器认证(这个就不贴了,大家自行Google) 其他更多 LiteIDE: LiteIDE的跟踪代码很不错,可以同时在一个窗口打开多个项目的目录. 4. 问题 var x string func init() { x, err := getV
[阅读全文]

2018-05-08 Go 语言中下划线的用法分析总结


讨论时间:2018-05-08 19:25 ~ 2018-05-08 20:00 以下源码分析来源于 Go 夜读微信群的一次代码讨论,我们先来看看这一行代码吧。 … func (littleEndian) Uint64(b []byte) uint64 { _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | ui
[阅读全文]