Golang

  • Published on
    cobra 可能是 Golang 里面最好用的 cli 命令行类库了. 没有之一. 其它也有一些功能类似的, 但是做到像 cobra 这样功能强大又简单易用的, 着实不多. 但是长期以来, cobra 依赖重量级的 viper module, 这两个东西都是同一个作者开发的, 因此其实也可以理解. 老灯最近突然发现, 随着社区力量的参与, cobra 的 viper 依赖居然在 1.4.0 版本被移除了! 老灯不是唯一一个不喜欢 viper 这种全家桶依赖类型的包的. 甚至有人 fork 出一份专门移除了 viper 依赖: https://github.com/muesli/coral 这个作者专门在 readme 说明了缘由: ...
  • Published on
    ## 简单的代码, 问题不简单 今天有人发了段代码给我, 然后问输出结果是什么? 这段代码看上去非常简单, 但是确是很有迷惑性. ```go // a.go package main import ( "fmt" "time" ) var x int64 = 0 func storeFunc() { for i := 0; ; i++ { if i%2 == 0 { x = 2 } else { x = 1 } } } func main() { go storeFunc() for { fmt.Printf("x=%v\n", x) // x=0 time.Sleep(time.Millisecond * 10) ...
  • Published on
    如果你不想看过程,那就直接跳到最后看一句话总结吧。 ## megacheck `megacheck` 其实是一个 `deprecated` linter, 不过只是被原作者deprecated, 目前 golangci-lint 并没有 deprecated 它。原因主要是向后兼容性 (see https://github.com/golangci/golangci-lint/issues/357 )。 这可能是最令人费解的一个linter了,为什么呢?我这里简单总结一下: megacheck 是 https://github.com/dominikh/go-tools 早期代码里的一个linter, 它包含了3个linter: gosimple staticcheck unused ...
  • Published on
    ## 1. imgproxy/imgproxy (golang, 4.6K star) [imgproxy](https://github.com/imgproxy/imgproxy) 目前有 4.6K star https://github.com/imgproxy/imgproxy > Fast and secure standalone server for resizing and converting remote images > > imgproxy 是一个快速安全的独立服务器,用于调整远程图像的大小和转换远程图像。 imgproxy 的主要原则是简单,速度和安全性。 > > imgproxy 只做一件事 —— 调整远程图像的大小 —— 而且做得很好。 当您需要动态调整多个图像的大小以使其与您的应用程序设计匹配时,它非常有用,而无需准备大量缓存的调整大小的图像或每次设计更改时都重新执行。 ...
  • Published on
    关于`defer` Golang 官方博客专门发文[介绍过三条规则](https://blog.golang.org/defer-panic-and-recover): > 1. defer语句被求值时,被defer调用的函数参数即时求值 A deferred function's arguments are evaluated when the defer statement is evaluated. `Defer statements`的[Spec](https://golang.org/ref/spec#Defer_statements)中有这么一句描述: > Each time a "defer" statement executes, the function value and parameters to the call are evaluated as usual and saved anew but the actual function is not invoked. ...