1.11 flag库

今天介绍一个库flag,命令行程序常用,用来接受参数的。

var (intflag intboolflag boolstringflag string
)func init() {flag.IntVar(&intflag, "intflag", 0, "int flag value")flag.BoolVar(&boolflag, "boolflag", false, "bool flag value")flag.StringVar(&stringflag, "stringflag", "default", "string flag value")
}func main() {flag.Parse()fmt.Println("int flag:", intflag)fmt.Println("bool flag:", boolflag)fmt.Println("string flag:", stringflag)
}

用法

./main.exe -intflag 12 -boolflag 1 -stringflag test

接收了三个参数,输出:


int flag: 12
bool flag: true
string flag: test

init函数里写了参数的默认值,参数输入帮助。

作业

  1. 自行研究如何输出参数帮助
  2. 抢答boolflag的默认值是什么

1.12 viper库

今天要介绍的是viper一个常用的配置读取包。github.com/spf13/viper,它支持:

  • 设置默认值
  • JSONTOMLYAMLHCLenvfileJava 属性配置文件读取
  • 实时监控和重新读取配置文件(可选)
  • 从环境变量、命令行参数、缓冲区读取
  • 从远程配置系统(etcdConsul)读取,并观察变化
  • 显式配置值

简单来说只要三步,指定配置文件,初始化,使用,大家下来自己了解。

宋跑跑viper 好用 但是目前不支持环境变量数组解析。

Mike: uber 出了不少好东西,果然还是要有业务沉淀,才能造出好用的轮子。

1.13 协程池

大家觉得Go有必要有协程池吗?

学过GMP和理解Goroutine的同学应该了解其消耗资源极低,所以实际上即用即销毁,没必要弄。

有些人会把池子拿来做限流、限制并发等操作,这个时候是需要的,比如超高并发低延时case,比如做网关,可能同时会启动很多Go程但又同时在运行的情况。

网上有用waitgroup+channel做了一个,实际上是利用chan的大小加上context的来控制的

源码 https://github.com/remeh/sizedwaitgroup

引用知乎问题:https://www.zhihu.com/question/302981392

核心代码是是下面的,大家自己研究,有不懂的问我

s.AddWithContext(context.Background())//还有select {case <-ctx.Done():return ctx.Err()case s.current <- struct{}{}:break}

1.16 异常处理

Go 语言里是没有 try catch 的概念的,因为 try catch 会消耗更多资源,而且不管从 try 里面哪个地方跳出来,都是对代码正常结构的一种破坏。

所以 Go 语言的设计思想中主张: 如果一个函数可能出现异常,那么应该把异常作为返回值,没有异常就返回 nil

每次调用可能出现异常的函数时,都应该主动进行检查,并做出反应,这种 if 语句术语叫卫述语句。

所以异常应该总是掌握在我们的手上,保证每次操作产生的影响达到最小,保证程序即使部分地方出现问题,也不会影响整个程序的运行,及时的处理异常,这样就可以减轻上层处理异常的压力。

同时也不要让未知的异常使你的程序崩溃。

PS: panic recover语句文中没有说,只能在同一个Go程中进行recover,且在defer中使用recover时不得用调用函数的方式把recover统一抽出来共用。

1.17 Go能做什么事情

今天想和大家Go能做什么事情。

我个人认为Go实际上不适合专门做web,因为Go的 主要应用领域就是云原生,kubernetesprometheus都是应用了Go作为开发语言。特别是kubernetes operator,其对kubernetes的扩展,使得Go在云原生大行其道。

javaer把它当java写,pythoner拿他当py写,十个人有十种写法。每个人的理解都不同。

网友的想法云原生中比较重要的几点:

  • 微服务、容器、持续交付,在Java体系中表现得其实很好,但是资源占用控制上面还是不足(指那种没有经过特殊优化的);
  • PHP又压根没往这方向发展;.Net开源的时间太晚;
  • 这时候一个主打性能、资源占用少、“工程规范且简单”的语言出来,拉了几个大佬背书,还是google亲儿子,所以就推起来了。
  • 另外golang也确实不负众望,搭建起来了一些生态环境,比如容器docker和容器编排的尽头K8S
  • 生态一旦形成,如果想入局,那真得融入了。

就传统B/S或者C/Sweb开发来说,其实Go一点也不爽,但一但围绕云原生搞一些周边,不管爽不爽,都要沾点Go

Go的好处是入门简单,做业务需求的情况下,不涉及太多高级语法。
Go发展到现在,越来越多的开发者不断的生产工具,框架,百花齐放,所以我们应该保持开源热情,掌握和了解这些框架以备未来使用方便,工作提效。

过年了,Go技术群的每日一Go暂停分享,等年后恢复啦!年后恢复后每周发表每日一Go。第一期期刊就到这里啦

本文由mdnice多平台发布

一期每日一GO群分享-flag、viper、协程池、异常处理相关推荐

  1. 项目中使用Quartz集群分享--转载

    原文:http://hot66hot.iteye.com/blog/1726143 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享  一:CRM对定时任务的依赖 ...

  2. Android 开源交流 QQ 群分享汇总

    Android 开源交流 QQ 群分享汇总 :      https://github.com/aosp-exchange-group/share 简介 分享者 AndroidDevTools中文 北 ...

  3. 掌阅群分享技术点收集(app性能优化专攻)

    保活 先从老式最基础的开始: 使用startService方式启动一个独立进程的服务,这样系统会在service意外死亡后自动重启. 使用RTC定时闹钟每5分钟检测一下(4.0以上基本无效) 启动li ...

  4. 蜘蛛池源码php,PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错...

    一.源码说明: PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错版源码下载,搭建好php环境之后,设置404.php,而后将域名泛解析,修改目录下的domains文件,启动即可 ...

  5. MySQL通用优化技巧 | Ucloud运维在线微信群分享

    MySQL通用优化技巧 | Ucloud运维在线微信群分享 2015-09-17  MySQL中文网 本文根据DevOps华南运维圈@UCloud微信群「大话运维」的嘉宾分享整理而成.「大话运维」将邀 ...

  6. 小白巷分享 -- Laravel5的新特性之异常处理

    小白巷分享 -- Laravel5的新特性之异常处理 参考文章: (1)小白巷分享 -- Laravel5的新特性之异常处理 (2)https://www.cnblogs.com/jroy/p/443 ...

  7. 编程小白入门分享三:Spring AOP统一异常处理

    编程小白入门分享三:Spring AOP统一异常处理 参考文章: (1)编程小白入门分享三:Spring AOP统一异常处理 (2)https://www.cnblogs.com/lxk12345/p ...

  8. 三点钟群分享:全球虚拟礼物赠送平台项目落地经验

    PMCAFF拥抱区块链,关注项目产品落地 春节期间,区块链热度依旧不减. 为了帮助更多优秀项目产品落地,发挥PMCAFF产品经理社区核心优势.我们选择全面拥抱区块链技术,创建了"3点钟无眠区 ...

  9. 地方微信群分享小程序源码,自带流量主独立版

    简介: 1.一个集发布.展示社群信息.人脉推广的裂变工具/平台. 2.通过人脉广场,将商家信息通过名片进行展示,让同城服务.资源对接.人脉推广更加便捷高效.低门槛创建商家名片,通过分享转发,在实现推广 ...

最新文章

  1. 从Adobe Photoshop CC 2018的“新建Web”看Web网页常见分辨率
  2. oracle 误删表空间文件启动不了数据库的解决办法
  3. 阿里巴巴组织能力建设(政委机制、绩效管理、人才发展等).pdf(附下载链接)...
  4. pytest使用入门
  5. eclipse的workspace和working set
  6. android 打包问题,Android离线打包常见问题
  7. mysql executereader_ExecuteReader的用法
  8. rscp胎位图_4种胎位图解,孕30周这个姿势最适合顺产
  9. java map集合如何遍历效率高 java中Map遍历的方式
  10. springboot下,JedisPool getResource导致大量线程WAITING,服务假死
  11. Linux高清壁纸软件,十个小众的 Linux 桌面软件
  12. 银行资管智能化转型迫在眉睫 金融壹账通赋能两大核心能力
  13. centos恢复图形界面_centos7恢复图形界面_centos7没有图形界面
  14. 计算机网络常青藤讲义,宾语从句学习讲义
  15. Linux ASPM 问题一个适合的解决方案
  16. c语言程序设计陈彦君,2008 年度焦作学科研成果奖励登记表(论文).doc
  17. css清除浮动的四种方法(详细)
  18. 谷歌翻译插件imtranslator安装使用步骤
  19. vpython_Vpython简单例子
  20. appkey 和 secret key token

热门文章

  1. “人生搜索引擎” # Rewind
  2. 如何给云服务器安装探针
  3. Flink系列文档-(YY08)-Flink核心概念
  4. rk3568 修改开机动画
  5. 科研成果 | 信道模型 | 原理及随机数仿真 | 均匀、正态、双高斯、瑞利、莱斯、对数正态、nakagami、Suzuki分布的随机数仿真(matlab)
  6. 操作系统的了解和安装
  7. MySQL 锁(二):间隙锁笔记
  8. Navicat使用方法
  9. UnityShader学习之路(01) 漫反射
  10. 目标检测训练数据扩充增强工具使用说明