golang小技巧汇总

获取命令行的参数

先定义变量
var value = flag.String("key", "默认值", "说明:xxx")
再解析命令
flag.Parse()

获得当前栈帧的信息

runtime包的Caller方法可以获得栈帧的信息,skip为栈帧的位置,0为当前函数的位置。
其中pc为program counter(我也不理解这个含义),file为当前函数所在的文件的文件名,lile为代码行号,ok为是否可以获取到信息
func Caller(skip int) (pc uintptr, file string, line int, ok bool)
例如:
有个函数ABC(),在包pack下,然后在main方法里调用了pack.ABC()
在ABC里面调用_,filename,_c_ := runtime.Caller(0)可以获得ABC函数所在的文件的文件名包括路径。
_,filename,_c_ := runtime.Caller(1)可以获得main函数的文件名包括路径,因为是main调用了ABC,main比ABC先1步进栈

搭建一个文件服务器

首先获得文件服务器的handler
h := http.FileServer("文件服务根路径");
添加url和handler映射
http.Handle("/", h)
开启服务
http.ListenAndServe(":" + port, nil);

创建一对(读写连接)的文件

想文件w写入数据,可以从r读取出来
r, w, _ := os.Pipe();
下面是将os.Stdout作为w来写入,然后可以从r里读取出写入的内容
r, w, _ := os.Pipe();
originalOut := os.Stdout
os.Stdout = w
outChan := make(chan string)
go func() {
	var buf bytes.Buffer
	io.Copy(&buf, r)
	outChan <- buf.String()
}()
time.Sleep(1 * time.Second)
fmt.Print("aaa")
w.Close()
os.Stdout = originalOut
info := <-outChan
fmt.Println(info)

运行时执行cmd

exec包的Command函数可以执行cmd
func Command(name string, arg ...string) *Cmd
比如:执行go main.go
cmdName := "go"
cmdArgs := []string{"run", "main.go"}
cmd := exec.Command(cmdName, cmdArgs...)

创建临时目录

ioutil包的TempDir函数可以生成临时目录
dir如果为空则使用系统默认的临时目录,prefix为前缀,另外会再随机一个前缀防止并发调用时的重复使用
func TempDir(dir, prefix string) (name string, err error)
例如下面的代码会创建/tem/abcxxxx/
ioutil.TempDir("", "abc")

获得文件的路径

filepath包的Dir函数可以获取指定文件名的路径
例如
filepath.Dir("/usr/local/abc.go")会返回"/usr/local/"
很简单的功能,自己也可以写其他方法实现,以上是官方包提供的方法。

 

转载于:https://my.oschina.net/aidonggua/blog/726731

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值