003-golang 调用外部命令

003-golang 调用外部命令,第1张

003-golang 调用外部命令

相关函数

exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o.

func LookPath(file string) (string, error) //LookPath在环境变量中查找科执行二进制文件,如果file中包含一个斜杠,则直接根据绝对路径或者相对本目录的相对路径去查找

在用exec包调用的其他进程后如何关闭结束,可以使用context包的机制进行管理,context包的使用详见: https://godoc.org/context

exec.CommandContext方发实现了context,通过context可以对exec启动的进程结束。

隐藏程序自身黑窗口的方法:go build -ldflags="-H windows"

隐藏子进程黑窗口的方法:

Go语言标准库中提供了sort包对整型,浮点型,字符串型切片进行排序,检查一个切片是否排好序,使用二分法搜索函数在一个有序切片中搜索一个元素等功能。

关于sort包内的函数说明与使用,请查看 https://godoc.org/sort

在这里简单讲几个sort包中常用的函数

在Go语言中,对字符串的排序都是按照字节排序,也就是说在对字符串排序时是区分大小写的。

二分搜索算法

Go语言中提供了一个使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比较㏒₂n个元素,其中n为切片中元素的总数。

sort.Search(size,fn)函数接受两个参数:所处理的切片的长度和一个将目标元素与有序切片的元素相比较的函数,该函数是一个闭包,如果该有序切片是升序排列,那么在判断时使用 有序切片的元素 >= 目标元素。该函数返回一个int值,表示与目标元素相同的切片元素的索引。

在切片中查找出某个与目标字符串相同的元素索引

在写Response时,我加入了一个defer,当捕捉到panic时,写入status code=500:

但这个写法是错把defer+recover当成只有只有panic发生时才会执行的东西了。实际上,defer func会在函数尾部执行,这样WriteHeader就被执行了两次。

根据godoc,WriteHeader在不手动调用时,首次Write将会写入200,如果手动调用,通常都是写入500. 要想不引起警告,WriteHeader要在Write()执行之前调用,并且不能多次调用。

此外,正确的处理方式是在defer中判断是否是panic导致了defer调用:

改动之后,果然不再出现警告


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/23705.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-16
下一篇2023-02-16

发表评论

登录后才能评论

评论列表(0条)

    保存