go语言实用工具编写要这样学
写作目的
本篇章写作有以下目的:
- 介绍go语言的基础知识,这里你会发现go语言学习成本较低,与python语言相似。
- 介绍go语言的常用标准库,这里你会发现go语言的标准库已经非常强大,python语言要达到类似效果需要其他第三方库的参与。
- 介绍go语言的实用工具编写,事实上go语言在工具编写方面,不逊色于python,如文本文件处理等,学习成本和python类似,而在Linux运维领域更有着python无法比拟的优势。
为了介绍go语言的基础知识,博主会穿插leetcode方面的题目,帮助大家去练习。
为啥要和python做比较
近几年,如果你刷新闻或者微信,你肯定会看到python语言学习网课广告;这些网课或告诉你python语言能快速处理EXCEL文档,或告诉你通过python能入门机器学习和数据分析,当然这些网课有点像保健品那样作用有但是有限;另外python语言在某些领域的强大甚至早已加入经济或管理等文科专业的专业课中,注意不是理工科。作为一个博主,我想蹭下python语言的流量,抢点python语言的热度,同时让没有学习过go语言的人有点概念:go语言和python一样能快速入门,并且实用敏捷。
go语言的强大之处
在说明go语言相比于python语言的优点前,我需要先叠个甲,我的求生欲一向比较强的。这里并不要说明go语言比python语言更好更优,作为一个工具,它们有各自的擅长的领域,就像敲钉子需要榔头,拧螺丝需要螺丝刀。同时,在同一个领域内也有能用和好用的比较,如斧头和电锯之于砍树。
绝大多数情况下go语言能够通过静态编译快速构建二进制程序,即程序只需在编译机器上编译,在目标机器上无需依赖运行,这种特性博主称为“即插即用”;而python语言需要在目标机器上安装python环境,另需要使用pip来管理依赖。另外,在需要内外网隔离的公司内,python语言在没法联网的情况下会变得难以使用,而go语言在这种情况下只要能通过某种方法把代码下载到内网就可以编写和使用。此外,go语言在并发方面比python语言更为好用,处理效率更高。当然在本篇章中你暂时还看不到go语言并发的威力,这个知识将在go语言扩展篇中和go-etl项目讲述。
go语言的实用工具编写
从上面的论述中,我们不难发现go语言在编写诸如文本(Excel)处理,文件处理的实用工具会比python语言更为好用,事实上go语言编写程序的便捷性也不输于python。例如读取csv文件的文本
package main
import (
"encoding/csv"
"fmt"
"io"
"os"
)
func main() {
f, err := os.Open("a.csv")
if err != nil {
fmt.Println("open a.csv fail. err:", err)
return
}
defer f.Close()
r := csv.NewReader(f)
for {
record, err := r.Read()
if err == io.EOF {
return
}
if err != nil {
fmt.Println("read a.csv fail. err:", err)
return
}
fmt.Println(record)
}
}
而在运维领域,特别是Linux运维领域,go语言在这个领域的优势将更为巨大。你可以想象一下这样的场景,编写一个应用到数十台机器上的运维工具,在这种场景下即插即用的二进制程序显然比python脚本更容易部署,这也是Prometheus近几年在运维监控领域异军突起的原因。众所周知,现在主流Linux发行版本(如CentOS, Ubuntu ), 以Linux为基石的信创操作系统(如红旗,麒麟)已经在服务器领域中占绝大多数。
通过下面的例子,你就可以理解go在运维领域的实用性,这个程序博主称之为端口检测工具(telnet有着类似的功能,用于测试网络连通性)。
package main
import (
"fmt"
"net"
"os"
"time"
)
func main() {
if len(os.Args) != 3 {
fmt.Println("telnet ip port")
return
}
addr := os.Args[1] + ":" + os.Args[2]
conn, err := net.DialTimeout("tcp", addr, 5*time.Second)
if err != nil {
fmt.Println("connct to", addr, "fail. reason:", err)
return
}
conn.Close()
fmt.Println("connct to", conn.RemoteAddr(), "from", conn.LocalAddr(), "success")
}
通过go build命令将其构建成二进制程序telnet,如测试与百度网站的连通性(http默认端口为80,而https的默认端口为443), 测试与任意网络地址的连通性,注意这不是一个完整的telnet工具。
telnet www.baidu.com 80
connct to 180.101.50.242:80 from 1.1.1.1:56853 success
telnet www.baidu.com 443
connct to 180.101.50.242:443 from 1.1.1.1:56845 success
telnet 192.10.10.10 22
connct to 192.10.10.10:22 fail. reason: dial tcp 192.10.10.10:22: i/o timeout
写作内容
写作内容如下思维导图所示,这个思维导图借鉴了go圣经的学习顺序。
下一篇预告
《go语言环境要这样搭建才“省钱”》
go语言实用工具编写要这样学的更多相关文章
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...
- [Linux实用工具]munin-node插件配置和插件编写
前面介绍了2篇munin使用的相关文章: [Linux实用工具]Linux监控工具munin的安装和配置 [Linux实用工具]Linux监控工具munin的展示(Nginx) 这次介绍一下mun ...
- 重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)
一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用 ...
- 《从零开始学Swift》学习笔记(Day4)——用Playground工具编写Swift
Swift 2.0学习笔记(Day4)——用Playground工具编写Swift 原创文章,欢迎转载.转载请注明:关东升的博客 用Playground编写Swift代码目的是为了学习.测试算法.验证 ...
- 每位iOS开发人员不容错过的10大实用工具
内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...
- .Net 高效开发之不可错过的实用工具(转)
.Net 高效开发之不可错过的实用工具(转) 本文摘自: http://www.cnblogs.com/powertoolsteam/p/5240908.html#3372237 Visual Stu ...
- .NET 高效开发之不可错过的实用工具(第一的当然是ReSharper插件)
工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节 ...
- ServiceModel 元数据实用工具 (Svcutil.exe)
ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档 一.SvcUtil.exe ServiceModel 元数据实用工具可在 Windows ...
- 值得网页设计师&前端收藏的实用工具列表
原文地址:http://www.uisdc.com/tool-list-web-developers# 无论你是经验丰富的前端,还是刚刚起步的设计师,这些为真正的网页设计师和开发者所准备的实用工具.在 ...
- NET 高效开发之不可错过的实用工具(第一的当然是ReSharper插件)
工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节 ...
随机推荐
- 自创简易CSS Tab 选项卡
前段时间我注册了 w3c.run域名,打算做一个W3C相关技术在线试验工具.没错,就是在线编写html.css.js代码然后在线运行,查看效果. 在设计首页时,我打算首页提供三个代码编辑器,介于界面大 ...
- 自建CA和公共CA有什么不同?
据统计,全球有数百个公共CA,通常它们是按国家地区进行划分的.这类CA受大众的广泛认可和使用,也被称为公共信任的证书颁发机构.但是由于一些大型企业拥有许多站点,为了更轻松高效的管理以及考虑到维护成本, ...
- 2022-06-29:x = { a, b, c, d }, y = { e, f, g, h }, x、y两个小数组长度都是4。 如果有: a + e = b + f = c + g = d + h
2022-06-29:x = { a, b, c, d }, y = { e, f, g, h }, x.y两个小数组长度都是4. 如果有: a + e = b + f = c + g = d + h ...
- C++中的字符串编码处理
今天由于在项目中用到一些与C++混合开发的东西 ,需要通过socket与C++那边交换数据,没啥特别的,字节码而已,两边确定一种编码规则就行了.我们确定的UTF-8.关于C++的 这种又是宽字节 又是 ...
- Python爬取微信小程序实战(通用)
背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...
- 暑期实习开始啦「GitHub 热点速览」
无巧不成书,刚好最近有小伙伴在找实习,而 GitHub 热榜又有收录实习信息的项目在榜.所以,无意外本周特推就收录了这个实习项目,当然还有国内版本.除了应景的实习 repo 之外,还有帮你管理文件的 ...
- 24 式加速你的 Python
一,分析代码运行时间 第1式,测算代码运行时间 平凡方法 快捷方法(jupyter环境) 第2式,测算代码多次运行平均时间 平凡方法 快捷方法(jupyter环境) 第3式,按调用函数分析代码运行时间 ...
- k8s~RKE的方式升级Rancher集群
kubectl安装 在主机或者远程访问的笔记本上安装kubectl命令行工具 rancher-cluster.yml(RKE配置文件) 通过RKE创建kubernetes集群,需要预先设置ranche ...
- [转载]C++ 入门教程(41课时) - 阿里云大学
C++ 教程 C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的.C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言.C++ ...
- 【leetcode】# 7 整数翻转 Rust Solution
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转.示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设 ...