采用go编写小工具

前段时间换了个环境写代码,但公司由于信息安全限制,要求大部分人员使用windows系统,于是我只能硬着头皮用windows。用windows的过程中发现一个很不便的地方,以前用类Unix系统,可以很方便写脚本完成一些小任务,但在windows里就变得很麻烦。解决方案有好几种:

  • 使用cygwin之类的bash环境模拟器。但涉及windows命令与cygwin里的命令互操作时,会出现一些问题,解决起来很麻烦。
  • 使用微软的powershell写脚本。不太想学一门新的类bash脚本语言。
  • 装上python,写python脚本。这似乎是个好办法,可对python语言不太熟。

最后想了下,之前用过Go,可以用它来写小工具,试了试还挺好使的,下面举几个小例子。

自动生成hexo博客静态文件

# 定义变量
val1 = tf.placeholder(tf.float32, [None, 784])

...

# 初始化所有变量
init = tf.global_variables_initializer()

with tf.Session() as sess:
    # 在图中初始化所有变量
    sess.run(init)
    ...

部署hexo博客

package main

import (
	"path/filepath"
	"os/exec"
	"os"
	"log"
)

// 此命令工具用于将hexo部署至服务器
func main() {
	blogDir := filepath.Join(`W:\`, `gits`, `blog`)

	deployBlog(blogDir)
}
func deployBlog(blogDir string) {
	cmd := exec.Command(`hexo`, `deploy`)
	cmd.Dir = blogDir
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	err := cmd.Run()
	if err != nil {
		log.Fatal(err)
	}
}

杀Tomcat

package main

import (
	"os/exec"
	"log"
	"bufio"
	"strings"
	"io"
)

// 此命令工具杀掉意外未死的tomcat进程
// idea有时候意外退出,此时开发用的tomcat服务器还在运行
func main() {
	cmd := exec.Command(`netstat`, `-ano`)
	output, err := cmd.StdoutPipe()
	if err != nil {
		log.Fatal(err)
	}
	go func() {
		cmd.Run()
	}()

	processOutput(output)
}

func processOutput(output io.ReadCloser) {
	scanner := bufio.NewScanner(output)
	for scanner.Scan() {
		line := scanner.Text()
		if hasTomcatPort(line) {
			parts := strings.Fields(line)
			tomcatPid := parts[len(parts) -1]
			log.Println(tomcatPid)
			killCmd := exec.Command(`taskkill`, `/F`, `/PID`, tomcatPid)
			killCmd.Run()
		}
	}
}

func hasTomcatPort(line string) bool {
	return strings.Contains(line, `LISTENING`) && (strings.Contains(line, `8080`) || strings.Contains(line, `1099`))
}

总结

Go语言很精练,用来写这些小工具很合适。同时也可以经常用Go写点小东西练练手,以免长时间不用忘记了Go的玩法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

Go函数知识

1.函数格式 func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) ...

36580
来自专栏醒者呆

掌握一门语言Go

摘要:Go语言的优势不必多说,通过本篇文章,让我们花时间来掌握一门外语,Let's Go! 关键字:Go语言,闭包,基本语法,函数与方法,指针,slic...

49690
来自专栏文武兼修ing——机器学习与IC设计

栈与栈的实现栈栈的基本操作栈的实现

栈 栈是一种基础的数据结构,只从一端读写数据。基本特点就”后进先出“,例如顺序入栈1,2,3,4,5,再顺序出栈是5,4,3,2,1 栈的基本操作 栈的基本操作...

37250
来自专栏禅林阆苑

golang之fmt格式占位符总结 【原创】

golang之fmt格式占位符总结 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: githu...

88380
来自专栏醒者呆

Go并发模式:管道与取消

关键字:Go语言,管道,取消机制,并发,sync.WaitGroup,包引用,通道,defer,select GO并发模式:管道与取消 简介 Go的并发能...

33660
来自专栏禅林阆苑

macos下golang配置 【原创】

macos下golang配置 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.c...

28350
来自专栏我的博客

Go命令介绍

1.go build 用于编译代码 2.go clean 用来移除当前源码包和关联源码包里面编译生成的文件 _obj/ 旧的object目...

38380
来自专栏文武兼修ing——机器学习与IC设计

队列及其实现队列队列的实现

队列 队列即FIFO,一言以蔽之就是先进先出。比如入队列的顺序是1,2,3,4,那么出队列的顺序也是1,2,3,4 队列的实现 软件——GO语言实现 除了使用链...

46470
来自专栏禅林阆苑

golang 利用指针导出变量 【原创】

golang 利用指针导出变量 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github....

598140
来自专栏我的博客

GO获取表单元素

1.如果使用Form[“username”]获取表单元素需调用ParseForm(),获取到的是数组 2.如果使用FormValue会自动调用ParseFor...

428150

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励