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
}
