Golang_学习笔记

  • goleak——Goroutine 泄漏防治神器
  • Golang 命令行工具——urfave/cli
  • 用法
    • Flag
  • 参考文档
  • Golang处理Excel
  • 微服务
  • 请求路由-mux
  • 日志-logrus
  • 参数校验-validator
  • 定时任务-robfig/cron
  • 统计代码行数
    • 测试&使用
      • 使用说明
      • 使用示例
        • 直接运行项目,统计默认的项目根路径的代码行数
        • 运行项目,指定要进行代码统计的项目的根路径
        • 运行项目,指定要进行代码统计的项目的根路径及文件后缀
  • 识别和生成二维码
  • 实现状态机

goleak——Goroutine 泄漏防治神器

【酷Go推荐】Goroutine 泄漏防治神器 goleak

Golang 命令行工具——urfave/cli

用法

Flag

  • c.String(“startDate”):获取startDate这个flag

参考文档

Go语言命令行库urfave/cli简介
Golang的一个CLI框架介绍,个人学习备忘
cli - 构建强大命令行程序的工具箱 (1)

Golang处理Excel

Excelize

微服务

Go语言构建微服务一站式解决方案
Go微服务 - 第一部分 - 介绍及理论基础
Go 微服务实战汇总
Go实践微服务 – go-micro编写微服务
哔哩哔哩-哔哩哔哩的Go微服务实战
04【千锋Go语言】Go语言微服务实践
go-micro电商项目实战简介

请求路由-mux

mux学习
Golang 第三方库学习 · mux
golang进阶(四)——路由mux的最佳实践
Gorilla学习笔记

日志-logrus

golang日志框架logrus
logrus 安装 使用
logrus日志使用详解
golang日志框架之logrus

参数校验-validator

6.4. validator 请求校验
Golang validator 详解

定时任务-robfig/cron

golang cron 定时任务使用
Gin实践 连载十一 Cron定时任务
github.com/robfig/cron【Golang 常用包推荐】
golang版的crontab
golang crontab的计划任务及定时任务使用
golang cron定时任务
Go cron定时任务的用法

统计代码行数

用golang代码统计整个工程的代码行数

package mainimport ("bufio""fmt""os""strings""sync"
)var (linesum int                                   // 总代码行数, 全局变量, 需控制并发修改mutex   *sync.Mutex = new(sync.Mutex)       // 互斥锁
)var (rootPath string = "/home/cx4gxf/GoEnv/src/go-test"     // 要进行代码统计的根路径// 被排除(不进行代码统计)的子路径nodirs [6]string = [...]string{"/vendor/golang.org", "/bitbucket.org", "/vendor/github.com", "/goplayer", "/uniqush", "/code.google.com"}suffixname string = ".go"                             // 要进行代码统计的文件后缀
)func main() {// 命令行参数定制argsLen := len(os.Args)if argsLen == 2 {rootPath = os.Args[1]} else if argsLen == 3 {rootPath = os.Args[1]suffixname = os.Args[2]}done := make(chan bool)                      // done channel用于控制main goroutine的结束时机go codeLineSum(rootPath, done)<-donefmt.Println("total line------------------------------------------------------------------------------", linesum)
}func codeLineSum(root string, done chan bool) {var goes int              // 子goroutine的数目,对每一个文件单独开一个goroutine进行代码行数统计godone := make(chan bool) // godone channel用于控制codeLineSum goroutine的结束时机// 校验当前目录是否为要进行代码统计的子目录isDstDir := checkDir(root)defer func() {if pan := recover(); pan != nil {fmt.Printf("root: %s, panic:%#v\n", root, pan)}// waiting for his children donefor i := 0; i < goes; i++ {<- godone}// this goroutine done, notify his parentdone <- true}()if !isDstDir {return}// 获取根文件信息rootfi, err := os.Lstat(root)checkerr(err)// 打开根路径rootdir, err := os.Open(root)checkerr(err)defer rootdir.Close()if rootfi.IsDir() {// 获取目录剩余的FileInfo构成的Slicefis, err := rootdir.Readdir(0)checkerr(err)for _, fi := range fis {// 跳过目录中的隐藏文件和文件夹 .fileName--在linux中表示隐藏文件或文件夹if strings.HasPrefix(fi.Name(), ".") {continue}// 对每一个文件, 开启一个goroutine进行代码行数统计goes++// 递归处理目录if fi.IsDir() {go codeLineSum(root+"/"+fi.Name(), godone)} else {go readfile(root+"/"+fi.Name(), godone)}}} else {// 根路径指向一个文件,则只开一个协程去统计该文件的行数goes = 1 // if rootfi is a file, current goroutine has only one childgo readfile(root, godone)}
}// 统计单个文件的代码行数
//      filename string: 文件名, 绝对路径
//      done chan bool: 控制main goroutine结束的channel, 每个统计单个文件代码行数的goroutine结束时, 会向该channel写入true, 表示当前goroutine的结束
func readfile(filename string, done chan bool) {var line int    // 当前文件的代码行数// 根据文件后缀名判定当前文件是否为要进行代码行数统计的目标文件isDstFile := strings.HasSuffix(filename, suffixname)defer func() {// 异常处理if pan := recover(); pan != nil {fmt.Printf("filename: %s, panic:%#v\n", filename, pan)}// 如果当前文件是目标文件,则修改全局变量linesumif isDstFile {addLineNum(line)fmt.Printf("file %s complete, line = %d\n", filename, line)}// 当前goroutine结束, 向done channel写入true, 通知父goroutine当前goroutine的结束// this goroutine done, notify his parentdone <- true}()// 如果当前文件不是要进行代码行数统计的文件, 则直接退出, 在函数退出前执行defer相关代码if !isDstFile {return}// 打开当前文件,用于后续读取,在退出前关闭文件file, err := os.Open(filename)checkerr(err)defer file.Close()// 循环读取文件中的每一行,isPrefix表示在返回数据时是否对该行进行了切割reader := bufio.NewReader(file)for {_, isPrefix, err := reader.ReadLine()if err != nil {break}// 未对该行进行切割, 则line自增if !isPrefix {line++}}
}// 校验当前目录是否为要进行代码统计的目录
// check whether this dir is the dest dir
func checkDir(dirpath string) bool {for _, dir := range nodirs {if rootPath + dir == dirpath {return false}}return true
}func addLineNum(num int) {mutex.Lock()defer mutex.Unlock()linesum += num
}// if error happened, throw a panic, and the panic will be recover in defer function
func checkerr(err error) {if err != nil {panic(err.Error())}
}

测试&使用

使用说明

go run count_line.go rootPath suffixName- rootPath: 可选参数,要进行代码统计的项目根路径- suffixName: 可选参数,要进行代码统计的文件后缀

使用示例

直接运行项目,统计默认的项目根路径的代码行数

其中,默认的项目根路径/默认被排除的路径/默认的文件后缀 可在代码中执行配置

var (// the dir where souce file storedrootPath string = "/home/cx4gxf/GoEnv/src/go-test"// exclude these sub dirs                                项目中被排除(不进行代码)的子路径nodirs [6]string = [...]string{"/vendor/golang.org", "/bitbucket.org", "/vendor/github.com", "/goplayer", "/uniqush", "/code.google.com"}// the suffix name you caresuffixname string = ".go"
)

运行项目,指定要进行代码统计的项目的根路径

运行项目,指定要进行代码统计的项目的根路径及文件后缀

识别和生成二维码

用GO生成和识别二维码

实现状态机

Go语言实现有限状态机(FSM)

Golang-常用第三方库相关推荐

  1. python第三方库排行-Python模块汇总(常用第三方库)

    模块 定义 计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里.在python里,一个.py文件就是一个模块 优点: 提高代码的可维护性 ...

  2. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  3. python的第三方库是干什么用的-quot;别人造好的轮子”,python常用第三方库——python自动办公7...

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 前记:这是分享和记录我个人自动化办公技能的一系列文章,意在让的小伙伴们看后能够有所帮助和长大.我们都不是专业的 ...

  4. Python常用第三方库

    Python常用第三方库 一. 文件读写 二.网络抓取和解析 三.数据库连接 四.数据清洗转换 五.数据计算和统计分析 六.自然语言处理和文本挖掘 七.图像和视频处理 八.音频处理 九.数据挖掘/机器 ...

  5. Python常用第三方库——简介及下载地址

    Python常用第三方库 可以在  The Python Package Index (PyPI)  软件库(官网主页:https://pypi.org/  )查询.下载 和 发布 Python包或库 ...

  6. Java常用第三方库大全西安尚学堂

    Java常用第三方库大全 一.JAVA核心扩展 JAVA的标准库虽然提供了那些最基本的数据类型操作方法,但仍然对一些常见的需求场景,缺少实用的工具类.而另一些则是JAVA标准库本身不够完善,需要第三方 ...

  7. swift_033(Swift 必备和常用第三方库以及pod使用)

    1.swift工程 使用pod 有了OC中使用pod管理第三方库的经验,在swift中使用pod来管理第三方库就很容易了. 第一步:cd的工程文件夹下 第二步:pod init 为项目创建一个PodF ...

  8. python第三方库下载-python常用第三方库介绍及下载

    GUI 1.wxpython(2.9.2.4--python2.6/2.7) Python下的GUI编程框架,与MFC的架构相似 2.PyQt(4.86--python2.5~3.2) 用于Pytho ...

  9. Python常用第三方库大盘点

    Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.下面简单介绍下网络爬虫.自动化.数据分析与可视化.WEB开发.机器学习和其他常用的一些第三方库,如果有你感兴趣的库,不妨去试试它的功能 ...

  10. python常用第三方库(转载)

    Python标准库与第三方库详解(转载) 转载地址: http://www.codeweblog.com/python%e6%a0%87%e5%87%86%e5%ba%93%e4%b8%8e%e7%a ...

最新文章

  1. 变量的域内赋值和域外赋值
  2. nginx负载均衡的策略
  3. 设置文本区域大小_数据验证基本设置技巧
  4. Leetcode每日一题:844.backspace-string-compare(比较含退格的字符串)
  5. Oracle数字从两头排序,oracle字符串型数字排序问题
  6. linux内核奇遇记之md源代码解读之二
  7. git合并其他分支的代码产生冲突处理过程
  8. c# word 在当前光标位置插入内容
  9. oracle中间人投毒漏洞,‘TNS Listener’远程数据投毒漏洞
  10. 什么是Scheme?原来还可以这样应用!
  11. 【项目实战】IPC摄像头在线状态ping检测与告警邮件发送项目总结
  12. 如何使用wpa_supplicant及wpa_cli 创建p2p
  13. 网络空间拟态防御CMD(Cyber Mimic Defense)
  14. MSSQL SERVER中出现服务器MSDTC不可用的解决方法
  15. 网页分享如何展示标题,描述,缩略图
  16. MATLAB App Designer GUI开发从0到1(一)
  17. linux-log系统日志输出等级
  18. swissprot评论区_利用SWISS_PROT网获取生物信息学资源
  19. 实测实量数据表格_实测实量测量表格(DOC)
  20. javaweb前后端交互的方法总结

热门文章

  1. Zend Studio 13.6.1下载和安装汉化破解版
  2. 《静态时序分析实用方法》翻译
  3. android微信炸弹代码,微信炸弹怎么弄 微信8.0扔炸弹攻略[多图]
  4. 物联网设备安全保护,需要这三道防线
  5. PMP——第4章 项目整合管理
  6. 罗杨美慧 20190919-4 单元测试,结对
  7. 课程设计:简单计算器的实现
  8. pdf书籍规范页码编排
  9. 大数据24小时:地质局发布地质大数据共享平台,科大讯飞将语音识别植入腾讯小Q机器人
  10. ibm服务器修复安装win7系统,联想thinkpad无法开机重装win7,教你重装系统攻略