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插件,内存管理,诊断工具等,涉及开发过程的各个环节 ...
随机推荐
- 文盘Rust -- rust连接oss
作者:京东科技 贾世闻 对象存储是云的基础组件之一,各大云厂商都有相关产品.这里跟大家介绍一下rust与对象存储交到的基本套路和其中的一些技巧. 基本连接 我们以 aws 对象存储的sdk为例来说说基 ...
- 2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度,如果不存在,返回 0
2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在 ...
- 2022-09-08:以下go语言代码输出什么?A:5 66;B:5 88;C:7 88;D:以上都不对。 package main func main() { var x = []int{4:
2022-09-08:以下go语言代码输出什么?A:5 66:B:5 88:C:7 88:D:以上都不对. package main func main() { var x = []int{4:44, ...
- action装饰器
视图集中附加action的声明 from rest_framework.decorators import action # 追加action:返回书记的倒叙地0个书籍的信息 @action(meth ...
- 【GPT-4理论篇-1】GPT-4核心技术探秘
前言 GPT-4已经发布有一段时间了,但是出于安全性等各种原因,OpenAI并没有公布GPT-4的技术细节和代码,而是仅仅给出了一个长达100页的技术报告[1]. 这个技术报告着重介绍了GPT-4的强 ...
- linux 管理进程和计划任务
目录 一.进程原理 二.进程工作过程 三.进程类型 四.管理进程 五.前后台调度 六.定时任务 七.管理定时任务 一.进程原理 进程:指正在运行的程序称之为进程 程序:指的是没有运行的代码 线程:真正 ...
- springsecurity 认证,授权,注销,动态菜单,记住我和首页定制
搭建环境: 1.在创建springboot时选择组件web,thymeleaf,spring-security 2.导入静态资源,导入后测试一下环境 认证和授权: 继承类WebSecurityCon ...
- 系统MySQL服务无法启动报错1067的四种解决方法win7系统MySQL服务无法启动报错1067的四种解决方法
有些win7系统用户在登陆mysql或者重装mysql时出现"无法启动MYSQL服务,错误1067",而且重启.修复注册表都没办法解决问题.那么遇到MySQL服务无法启动问 ...
- < Python全景系列-8 > Python超薄感知,超强保护:异常处理的绝佳实践
欢迎来到我们的系列博客<Python全景系列>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法.无论你是编程新手,还是有一 ...
- CVE-2021-41773 apache路径遍历
来自tryhackeme的漏洞复现 CVE-2021-41773/42013 利用:路径遍历利用将允许服务器公开任意文件 需要启用mod_cgi模块才能获得远程代码执行 2021 年 10 月 5 日 ...