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(&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>