Go知識點記錄


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
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM