天天看點

Go知識點記錄import包命名testing的Error和Fatal的差別path.Clean使用go list all 能列出所有的包go build的時候的錯誤分析linux下擷取程序資訊是使用/proc/pid/判斷目前使用者是否是root使用者使Go程式更快的幾個知識:如何擷取go的各種路徑:從檔案中json解析

import的包可以給它命名

import l4g "code.google.com/p/log4go"

error : log() + fail()  即記錄目前錯誤,記錄為失敗,但是繼續執行

fatal : log() + failnow() 即記錄目前錯誤,記錄為失敗,不繼續執行

path.clean用于對路徑

../../等進行過濾,在建立修改檔案的時候需要使用到,否則會有漏洞

如果出現:

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

方法:

os.geteuid() != 0

1 如果是自帶垃圾回收的語言,你必須要考慮記憶體使用情況。

由于垃圾回收必然占用程式時間,是以占用記憶體必然越小越好。

2 配置設定記憶體代碼需要注意。

它必然最終導緻垃圾回收

3 go中[]byte和string的轉化實際上是進行了一次記憶體複制,是以能不用轉換的地方盡量不要轉換

4 盡量使用自帶的官方包。除非有測試支援你寫的代碼比官方的快,否則不要輕易使用自己的包來代替官方包。

可以使用go test -run=regexp file_test.go 來制定運作某個測試用例

1 執行使用者目前所在路徑:

os.getwd()

2 執行程式所在路徑:

執行程式檔案相對路徑:

file, _ := exec.lookpath(os.args[0])

執行程式所在的絕對路徑:

(使用下面一套方法)

1

2

3

4

5

6

7

<code>file, _ :=</code><code>exec</code><code>.lookpath(os.args[0])</code>

<code>log.println(</code><code>"file:"</code><code>, file)</code>

<code> </code><code>dir,_ := path.split(file)</code>

<code> </code><code>log.println(</code><code>"dir:"</code><code>, dir)</code>

<code> </code><code>os.</code><code>chdir</code><code>(dir)</code>

<code> </code><code>wd, _ := os.getwd()</code>

<code> </code><code>log.println(</code><code>"wd:"</code><code>, wd)</code>

比如這個程式

8

9

10

11

12

13

14

15

16

17

18

<code>package main</code>

<code>import(</code>

<code>        </code><code>"os"</code>

<code>        </code><code>"log"</code>

<code>        </code><code>"os/exec"</code>

<code>        </code><code>"path"</code>

<code>)</code>

<code>func main() {</code>

<code>        </code><code>file, _ := os.getwd()</code>

<code>        </code><code>log.println(</code><code>"current path:"</code><code>, file)</code>

<code>        </code><code>file, _ =</code><code>exec</code><code>.lookpath(os.args[0])</code>

<code>        </code><code>log.println(</code><code>"exec path:"</code><code>, file)</code>

<code>        </code><code>dir,_ := path.split(file)</code>

<code>        </code><code>log.println(</code><code>"exec folder relative path:"</code><code>, dir)</code>

<code>        </code><code>os.</code><code>chdir</code><code>(dir)</code>

<code>        </code><code>wd, _ := os.getwd()</code>

<code>        </code><code>log.println(</code><code>"exec folder absolute path:"</code><code>, wd)</code>

<code>}</code>

可執行檔案我放在/home/yejianfeng/handcode/test

我執行的路徑是/home/yejianfeng/

傳回結果:

<code>[yejianfeng@openstack ~]$ handcode/test</code>

<code>2013/02/06 11:09:07 current path: /home/yejianfeng</code>

<code>2013/02/06 11:09:07</code><code>exec</code> <code>path: handcode/test</code>

<code>2013/02/06 11:09:07</code><code>exec</code> <code>folder relative path: handcode/</code>

<code>2013/02/06 11:09:07</code><code>exec</code> <code>folder absolute path: /home/yejianfeng/handcode</code>

盡量使用os.openfile直接擷取reader,然後再從reader中使用decoder來解析json

比如

19

20

21

22

<code>import (</code>

<code>    </code><code>"fmt"</code>

<code>    </code><code>"encoding/json"</code>

<code>    </code><code>"os"</code><code>)</code>

<code>    </code><code>pathtofile :=</code><code>"jsondata.txt"</code>

<code>    </code><code>file, err := os.openfile(pathtofile, os.o_rdonly, 0644)</code>

<code>    </code><code>if</code> <code>err != nil {</code>

<code>        </code><code>fmt.println(err)</code>

<code>        </code><code>os.</code><code>exit</code><code>(1)</code>

<code>    </code><code>}</code>

<code>    </code><code>configs := make(map[string]map[string][]service, 0)</code>

<code>    </code><code>err = json.newdecoder(file).decode(&amp;configs)</code>

<code>    </code><code>}}</code>

别使用

<code>content, err := ioutil.readfile(filepath)</code>

<code>        </code><code>return</code> <code>nil, err</code>

<code>    </code><code>err = json.unmarshal(content, configs)</code>