获取命令行的参数
先定义变量
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/"
很简单的功能,自己也可以写其他方法实现,以上是官方包提供的方法。