golang小技巧汇总
2016-08-03 00:00
288 查看
摘要: 汇总一些常用小技巧
获取命令行的参数
获得当前栈帧的信息
搭建一个文件服务器
创建一对(读写连接)的文件
运行时执行cmd
创建临时目录
获得文件的路径
获取命令行的参数
先定义变量 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/" 很简单的功能,自己也可以写其他方法实现,以上是官方包提供的方法。
相关文章推荐
- kubernetes 技巧汇总
- CSS技巧汇总
- 移动平台3G手机网站前端开发布局技巧汇总
- 近期开发项目中用到的编码小技巧汇总说明
- 微信朋友圈营销技巧汇总 转载
- PHP技巧汇总:提高PHP性能的53个技巧
- Windows Phone 开发技巧汇总
- IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总
- js常用技巧汇总
- Golang 入门系列(三)Go语言基础知识汇总
- CSS 高级技巧汇总
- Vim使用技巧汇总
- Shell技巧汇总
- 移动平台3G手机网站前端开发布局技巧汇总
- Linux 使用技巧汇总
- 手机网站——前端开发布局技巧汇总
- PHP加密解密字符串汇总_php技巧_脚本之家
- MFC ListControl技巧汇总
- iOS开发小技巧汇总
- golang系列----接口使用技巧(interface)