写作目的

本篇章写作有以下目的:

  1. 介绍go语言的基础知识,这里你会发现go语言学习成本较低,与python语言相似。
  2. 介绍go语言的常用标准库,这里你会发现go语言的标准库已经非常强大,python语言要达到类似效果需要其他第三方库的参与。
  3. 介绍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语言实用工具编写要这样学的更多相关文章

  1. Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序

    Android For JNI(一)--JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序 当你的Android之旅一步步的深入的时候,你其实会发现,很多东西都必须去和framew ...

  2. [Linux实用工具]munin-node插件配置和插件编写

    前面介绍了2篇munin使用的相关文章: [Linux实用工具]Linux监控工具munin的安装和配置 [Linux实用工具]Linux监控工具munin的展示(Nginx)   这次介绍一下mun ...

  3. 重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)

    一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用 ...

  4. 《从零开始学Swift》学习笔记(Day4)——用Playground工具编写Swift

    Swift 2.0学习笔记(Day4)——用Playground工具编写Swift 原创文章,欢迎转载.转载请注明:关东升的博客 用Playground编写Swift代码目的是为了学习.测试算法.验证 ...

  5. 每位iOS开发人员不容错过的10大实用工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  6. .Net 高效开发之不可错过的实用工具(转)

    .Net 高效开发之不可错过的实用工具(转) 本文摘自: http://www.cnblogs.com/powertoolsteam/p/5240908.html#3372237 Visual Stu ...

  7. .NET 高效开发之不可错过的实用工具(第一的当然是ReSharper插件)

    工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节 ...

  8. ServiceModel 元数据实用工具 (Svcutil.exe)

    ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档 一.SvcUtil.exe ServiceModel 元数据实用工具可在 Windows ...

  9. 值得网页设计师&前端收藏的实用工具列表

    原文地址:http://www.uisdc.com/tool-list-web-developers# 无论你是经验丰富的前端,还是刚刚起步的设计师,这些为真正的网页设计师和开发者所准备的实用工具.在 ...

  10. NET 高效开发之不可错过的实用工具(第一的当然是ReSharper插件)

    工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环节 ...

随机推荐

  1. 自动化运维工具-Ansible PlayBook

    自动化运维工具-Ansible PlayBook PlayBook基本概念 PlayBook的组成 PlayBook即"剧本","兵书"之意,PlayBook是 ...

  2. sklearn中的KFold简单介绍

    这一部分主要讲解关于什么是K-foldCV(K折交叉验证),简单的使用一些案例进行分析,然后使用sklearn库函数中一些简单的案例进行分析. 在机器学习中,多数最主要的功能函数被封装到sklearn ...

  3. vue全家桶进阶之路39:Vue3 状态管理

    Vue3 的状态管理主要是通过 Vuex 4 来实现.Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式 ...

  4. 【GiraKoo】常用编码的对比(ASCII,GB2312,GBK,GB18030,UCS,Unicode)

    常用编码的对比(ASCII,GB2312,GBK,GB18030,UCS,Unicode) 在程序开发中,文字编码一直扮演着人畜无害,却背后捅一刀的角色. 可能在源代码文件中,注释莫名其妙地变成了乱码 ...

  5. 在程序里如何停止整个python项目的运行

    我们的项目无可避免的会遇到一些场景,当出现某个故障或者异常,必须停止整个项目的运行,这时只需要在抛出的异常里执行以下即可: os._exit(0)

  6. ubuntu为navicat创建快捷方式

    一.前言 最近在ubuntu上安装了navicat,但是发现不能将其固定在启动栏阿!!!不能每次都用terminal运行吧!于是在上网查,有一说一,网上很多文章写的方法都不能实现(不排除是ubuntu ...

  7. HCIP- ICT实战进阶ex1-MPLS

    HCIP- ICT实战进阶ex1-MPLS 0 前言 由于BGP设备之间是通过TCP协议实现的跨设备互联, 所以在两台BGP设备之间的其他设备是没有配置BGP协议的, 因此中间的其他设备很可能无法学习 ...

  8. 用BP软件 批量注册用户

    第五步:查看管理员后台----用户界面, 有没有批量添加进用户

  9. Python基础 - 解释性语言和编译性语言

    什么是机器语言 计算机是不能理解高级语言,当然也就不能直接执行高级语言了.计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序.   如何把我们写的代码 ...

  10. 创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作

    本文为博主原创,转载请注明出处: 1.使用npm进行初始化 在本地创建项目的文件夹名称,如 node_test,并在该文件夹下进行黑窗口执行初始化命令 2. 安装 expres包和myslq依赖包 n ...