import包命名
import的包可以給它命名
import l4g "code.google.com/p/log4go"
testing的Error和Fatal的區別
Error : Log() + Fail() 即記錄當前錯誤,記錄為失敗,但是繼續執行
Fatal : Log() + FailNow() 即記錄當前錯誤,記錄為失敗,不繼續執行
path.Clean使用
path.Clean用於對路徑
../../等進行過濾,在創建修改文件的時候需要使用到,否則會有漏洞
go list all 能列出所有的包
go build的時候的錯誤分析
如果出現:
warning: building out-of-date packages:
runtime/pprof
testing
regexp/syntax
regexp
installing these packages with 'go test -i' will speed future tests.
那么就是說明下面的包已經有修改過了,但是沒有重新install
如果有標准的包過期,使用go install -a -v std來進行更新
如果是自定義的包過期,重新調用go install
linux下獲取進程信息是使用/proc/pid/
判斷當前用戶是否是root用戶
方法:
os.Geteuid() != 0
使Go程序更快的幾個知識:
1 如果是自帶垃圾回收的語言,你必須要考慮內存使用情況。
由於垃圾回收必然占用程序時間,所以占用內存必然越小越好。
2 分配內存代碼需要注意。
它必然最終導致垃圾回收
3 go中[]byte和string的轉化實際上是進行了一次內存復制,所以能不用轉換的地方盡量不要轉換
4 盡量使用自帶的官方包。除非有測試支持你寫的代碼比官方的快,否則不要輕易使用自己的包來代替官方包。
可以使用go test -run=regexp file_test.go 來制定運行某個測試用例
如何獲取go的各種路徑:
1 執行用戶當前所在路徑:
os.Getwd()
2 執行程序所在路徑:
執行程序文件相對路徑:
file, _ := exec.LookPath(os.Args[0])
執行程序所在的絕對路徑:
(使用下面一套方法)
file, _ := exec.LookPath(os.Args[0]) log.Println("file:", file) dir,_ := path.Split(file) log.Println("dir:", dir) os.Chdir(dir) wd, _ := os.Getwd() log.Println("wd:", wd)
比如這個程序
package main import( "os" "log" "os/exec" "path" ) func main() { file, _ := os.Getwd() log.Println("current path:", file) file, _ = exec.LookPath(os.Args[0]) log.Println("exec path:", file) dir,_ := path.Split(file) log.Println("exec folder relative path:", dir) os.Chdir(dir) wd, _ := os.Getwd() log.Println("exec folder absolute path:", wd) }
可執行文件我放在/home/yejianfeng/handcode/test
我執行的路徑是/home/yejianfeng/
返回結果:
[yejianfeng@openstack ~]$ handcode/test 2013/02/06 11:09:07 current path: /home/yejianfeng 2013/02/06 11:09:07 exec path: handcode/test 2013/02/06 11:09:07 exec folder relative path: handcode/ 2013/02/06 11:09:07 exec folder absolute path: /home/yejianfeng/handcode
從文件中json解析
盡量使用os.OpenFile直接獲取reader,然后再從reader中使用Decoder來解析json
比如
package main import ( "fmt" "encoding/json" "os") func main() { pathToFile := "jsondata.txt" file, err := os.OpenFile(pathToFile, os.O_RDONLY, 0644) if err != nil { fmt.Println(err) os.Exit(1) } configs := make(map[string]map[string][]Service, 0) err = json.NewDecoder(file).Decode(&configs) if err != nil { fmt.Println(err) os.Exit(1) }}
別使用
content, err := ioutil.ReadFile(filepath) if err != nil { return nil, err } configs := make(map[string]map[string][]Service, 0) err = json.Unmarshal(content, configs) if err != nil { return nil, err }