Go 资源汇总 文件 微服务 缓存 日志&调试 池 WEB框架 测试框架 配置 唯一ID 网络 工具包 Go 资源汇总 收集的资源大而全,提供更多选择,更大视野。 Github 描述 go-awesome Go 语言优秀资源整理 Golang Go 资料包 awesome-go-cn Go 资源列表 文件 pkg 文档 描述 fsnotify 用法 监听文件修改进而自动重新加载 微服务 pkg 文档 描述 ratelimit 漏桶率限制算法 Jaeger 分布式追踪系统 hystrix-go 流量控制,熔断,容错,隔离功能 缓存 pkg 文档 描述 cache2go go 进程内缓存 golang-lru 实现LRU缓存策略 日志&调试 pkg 文档 描述 errors 错误处理 zerolog 零拷贝日志 池 pkg 文档 描述 grpool 轻量级协程池 ants 协程池 WEB框架 pkg 文档 描述 gin web 高效框架 测试框架 pkg 文档 描述 goConvey 单元测试框架, 自带 Web 界面 配置 pkg 文档 描述 ini ini 配置文件 gjson 用法 用于读取 JSON 串 sjson 用法 用于设置 JSON 串 唯一ID pkg 文档 描述 uuid uuid 码 sonyflake sony 雪花算法 xid 全局唯一ID生成器 20个字符长度 网络 pkg 文档 描述 ping go ping 包 工具包 pkg 文档 描述 cron 用法 定时器 by linux crontab endless 优雅重启 go 程序 com 工具包 cast 全类型转换 gopass 交互模式输入密码 cobra 命令行框架, spf13大神出品 go-humanize 各种数字的人性化转换
2020.05.13 第1期 Golang 标准库限流器 time/rate 实现剖析 Makedown排版 中文文案排版指北 技术文章配图指南 Google网站打分工具 给文章自动添加空格 编程沉思录之个人博客及公众号常用工具
Golang 系列进阶文章 Golang 系列文章 来源: 飞雪无情 Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 Go 接口 Go 嵌入类型 Go 标志符可见性 Go goroutine Go 并发资源竞争 Go 通道 Go 并发示例-Runner Go 并发示例-Pool Go 读写锁 Go log 日志 Go Writer 和 Reader Go Context Go 单元测试 Go 基准测试 Go 调试 Go 反射 Go Struct Tag Go unsafe 包之内存布局 Go unsafe Pointer Go 后记 Golang 每日一库 Golang 每日一库 来源 darjun flag go-flags go-homedir go-ini cobra viper fsnotify cast log logrus godotenv carbon email dig gojsonq message-bus watermill wire mergo copier jennifer go-cmp buntdb gjson sjson jj govaluate validator gopsutil gentleman plot go-app zap zerolog nutsdb sqlc
分析 项目四个Go文件, 每个文件仅描述一件事, 思路非常清淅, 故此学习并总结一下里面的精华. 定义Options结构体接受外部定义的配置 定义入口文件, 整个项目的入口, 并返回一个下一层处理的结构体 定义逻辑结构体, 下一层结构体担负着处理逻辑的任务,并返回处理结构的结构体. 定义收尾结构体, 将上一层的处理的结果进行进一步分析,最终展现给用户 入口文件 Goz.go 只初使化了Request结构体. 可以定义初使配置Options, 整个项目所需的配置都在Options结构里 options.go#L6 // NewClient new request object func NewClient(opts ...Options) *Request { req := &Request{} if len(opts) > 0 { req.opts = opts[0] } return req } 配置文件 Options.go 定义了整个项目需要的外部参数 变量首字母都大写 options.go#L6 // Options object type Options struct { BaseURI string Timeout float32 timeout time.Duration Query interface{} Headers map[string]interface{} Cookies interface{} FormParams map[string]interface{} JSON interface{} Proxy string } 核心处理文件 Request.
为什么使用集成服务呢 我们向github提交代码时, 我们得保证我们的代码是能运行的, 我们会写测试用例, 保证我们的代码功能能正常使用.常见大神们的开源项目都一个绿色图标"build|passing 表示构建OK 如何使用Travis服务呢 打开这个网站 https://travis-ci.org/ 点击登陆, 使用github登陆.目前似也只支持github 1. 添加仓库 2. 开启集成 3. 项目根目录添加.travis.yml文件 cd ~/github_webhook touch .travis.yml 4. 编写.travis.yml文件 language: go 表示当前仓库是go语言 go - 1.14 表示使用golang版本 sudo:required 表示需要root权限 os 表示使用运行环境, linux, osx是苹果系统 install 安装需要集成的必要软件 script 代表运行的脚本 以下是个测试空命令文件, 可以拿测试.看看能不能运行 language: go go: - 1.14 sudo: required os: - linux - osx install: - echo "install" script: - echo "script" 以下是一个正式的集成测试文件 language: go go: - 1.14 sudo: required os: - linux - osx install: - echo "install" - go get -u github.
原理 当本地git push origin master向Github远程仓库提交代码时,可以通过配置github自带webhook向服务器发送请求, 利用github-webhook工具在服务器端接到请求后,调用自定义shell脚本来实现自动构建 github-webhook 文档 更多详情文档 https://github.com/yezihack/github-webhook 使用github-webhook 源码: https://github.com/yezihack/github-webhook 别忘记点个小星星哦. 1. 下载github-webhook工具 https://github.com/yezihack/github-webhook/releases github release下载太慢, 试试这个 wget https://cdn.jsdelivr.net/gh/yezihack/assets/github-webhook1.4.1.linux-amd64.tar.gz 2. 运行github-webhook 安装 tar -zxvf github-webhook1.4.1.linux-amd64.tar.gz cp github-webhook /usr/bin/ chmod u+x /usr/bin/github-webhook 运行 默认端口: 2020 有效访问地址: http://ip:2020/web-hook -b 是shell脚本路径参数 -s 是github webhook设置的密码 # 非后台运行 github-webhook -b [shell脚本路径] -s [github webhook设置的密码] # 后台运行 nohup github-webhook -b [shell脚本路径] -s [github webhook设置的密码] & # 定向日志输出 nohup github-webhook -b ~/sh/hugo2www.sh -s qweqwe >> ~/logs/webhook.
(图片来自网络,有侵权,联系我删除) 当我们做命令行工具时, 遇到用户需要输入密码时, 常规处理是当字符串显示输入,这样并不是很好.应该像mysqld工具一样,输入密码时,以星号代替.对敏感数据进行脱敏处理. 今天要介绍一个golang这方面的包github.com/howeyc/gopass 代码实例使用 1. 当输入密码时,不显示任何信息 func GetPasswd() { fmt.Printf("1.请输入密码:") pass, err := gopass.GetPasswd() if err != nil { log.Fatalln(err) return } fmt.Println("您输入的密码是:", string(pass)) } 2. 当输入密码时,以星号*代替你输入的字符 func GetPasswdMasked() { fmt.Printf("2.请输入密码:") pass, err := gopass.GetPasswdMasked() if err != nil { log.Fatalln(err) return } fmt.Println("您输入的密码是:", string(pass)) } 3.你输入密码时,以星号*代替你输入的字符 func GetPasswdPrompt() { pass, err := gopass.GetPasswdPrompt("3.请输入密码:", true, os.Stdin, os.Stdout) if err != nil { log.Fatalln(err) return } fmt.Println("您输入的密码是:", string(pass)) } 效果 1.
leetcode: 16.11 https://leetcode-cn.com/problems/diving-board-lcci 题目 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 思路 题目的意思就是求一个k的组合, 利用给出的长短木板进行组合. 边界条件考虑: 如果k = 0, 也就是不需要组合.返回空数组. 如果长短目录都相等, 最长的目录组就是 k * 长度(shorter, longer) 代码求解 func LivingBoard(shorter, longer, k int) []int { if k == 0 { // 也就是不需要组合.返回空数组. return nil } if shorter == longer { // 如果长短目录都相等, 最长的目录组就是 k * 长度(shorter, longer) return []int{shorter * k} } group := make([]int, k+1) // 为什么k+1, 因为在组合中我可以使用全是长木板也可以使用全是短木板. for i := 0; i < k+1; i++ { fmt.
做开发的话,如果是从mac或linux转为window的用户,有很多不习惯需要一些使用linux的命令 而window虽然有powershell,还是不够尽兴,如果有一台linux系统又运行在window上,而又不是 那种笨重的虚拟机,那该多好.而win10就满足了你的需求.win10内置linux子系统,让你操作如飞的感觉. win10安装linux子系统 第一步: 启用或关闭Windows功能 开始->设置->应用->找到"程序和功能"(一般在右边位置")->找到"启用或关闭Windows功能" 点击弹出窗口后, 向下拉找到"适用于Linux的Windows子系统"选项. 勾选后,确定. 重新电脑. 第二步: 安装Ubuntu子系统 在Microsoft Store搜索ubuntu,点击免费安装. 下载完, 在开始程序中找到.点击进行初使化, 数分钟后安装完毕. 第三步: 设置新帐号 系统会 提示你设置一个用户名,然后再设置密码即可.正常使用ubuntu. 此时你还不是root帐号.安装东西需要使用root帐号 第四步: 初使root密码 sudo passwd root #回车 输入新密码 确认密码 # 切换root su root 更换ubuntu软件源 切换root帐号 su root #回车 备份一下之前的源 cp /etc/apt/sources.list /etc/apt/sources.list.backup 编辑sources.list vim /etc/apt/source.list #按ecs,一直按d按键清空源,然后再i键 复制下面的aliyun源 aliyun源 # 1.阿里云源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.
什么是YAPI 写接口文档的软件, 支持RESTful, Mock假数据, 团队管理协作,非常方便好用.良心之作 内网安装 参考网上的教程吧. mac: https://www.cnblogs.com/yehuisir/p/12190446.html linux; https://www.jianshu.com/p/6c269d00bb38 安装cross-request插件 可以在Yapi运行假数据. 蓝凑云:https://freemt.lanzous.com/i0pDFfo582j 使用mock假数据 { "status": 200,//状态码 "msg": "success",//提示信息 "data": { "page": 1, //当前页 "page_count": 10, //一共多少页 "total_ount": 100, //数据数量 "list|5-18":[ //生成5到18个子序列 { "id":"@increment", //生成递增主键ID "name":"@ctitle(4,6)",//生成中文字符4到6个之间 "uuid":"@uuid",//生成uuid "created_at":"@date('yyyy-MM-dd')",//生成时期格式 "status":"@pick(['未认证','已认证','已拒绝','已冻结'])"//从数组里随机选择一项. } ] } } mock常用规则 字符串 @cname() 生成名字 @url 生成url @domain() 生成域名 @email() 生成邮箱 @region() 生成地区, 如华中,华北 @province() 生成省份,如北京,山东,湖南省 @city() 生成城市, 如玉林市,拉萨, @city(true) @county() 生成区域 , 龙亭区 @county(true) 生成完整的区域, 如山西省 忻州市 神池县 @pick([“a”, “e”, “i”, “o”, “u”]) 选择一个元素 @title() 生成标头 @word(),@word(3),@word(3, 5)生成字母,可以指定大小,也可以是范围。 @sentence() @sentence(3) @sentence(3, 5) 生成单词数量 同上 @cparagraph(),@cparagraph(2), @cparagraph(2,5) 生成句子 同上 @csentence 中文句子 日期 @date(“yyyy-MM-dd”) 生成日期, “2013-05-07” @date(“yyyy-MM-dd HH:mm:ss”) “2020-01-02 17:15:04” 数字 @guid() 生成uuid @id() 生成ID @id(10) 生成10位的ID @increment() 递增1,2,3 @increment(100) 递增步长100 @natural(1,100000) 生成自然数 @zip() 生成区号 @integer(1, 10) 生成数字, @integer , @integer(5) 其它 @boolean() 生成true, false @rgba() 生成RBG颜色值 如"rgb(129, 121, 242)" @color() 生成颜色值, 如"#f2798f" 参考 github https://github.