# go clean
執行`go clean`命令會刪除掉執行其它命令時產生的一些文件和目錄,包括:
1. 在使用`go build`命令時在當前代碼包下生成的與包名同名或者與Go源碼文件同名的可執行文件。在Windows下,則是與包名同名或者Go源碼文件同名且帶有“.exe”后綴的文件。
2. 在執行`go test`命令并加入`-c`標記時在當前代碼包下生成的以包名加“.test”后綴為名的文件。在Windows下,則是以包名加“.test.exe”后綴為名的文件。我們會在后面專門介紹`go test`命令。
3. 如果執行`go clean`命令時帶有標記`-i`,則會同時刪除安裝當前代碼包時所產生的結果文件。如果當前代碼包中只包含庫源碼文件,則結果文件指的就是在工作區的pkg目錄的相應目錄下的歸檔文件。如果當前代碼包中只包含一個命令源碼文件,則結果文件指的就是在工作區的bin目錄下的可執行文件。
4. 還有一些目錄和文件是在編譯Go或C源碼文件時留在相應目錄中的。包括:“_obj”和“_test”目錄,名稱為“_testmain.go”、“test.out”、“build.out”或“a.out”的文件,名稱以“.5”、“.6”、“.8”、“.a”、“.o”或“.so”為后綴的文件。這些目錄和文件是在執行`go build`命令時生成在臨時目錄中的。如果你忘記了這個臨時目錄是怎么回事兒,可以再回顧一下前面關于`go build`命令的介紹。臨時目錄的名稱以`go-build`為前綴。
5. 如果執行`go clean`命令時帶有標記`-r`,則還包括當前代碼包的所有依賴包的上述目錄和文件。
我們再以goc2p項目的`logging`為例。為了能夠反復體現每個標記的作用,我們會使用標記`n`。使用標記`-n`會讓命令在執行過程中打印用到的系統命令,但不會真正執行它們。如果想既打印命令又執行命令則需使用標記`-x`。現在我們來試用一下`go clean`命令:
```bash
hc@ubt:~/golang/goc2p/src$ go clean -x logging
cd /home/hc/golang/goc2p/src/logging
rm -f logging logging.exe logging.test logging.test.exe
```
現在,我們加上標記`-i`:
```bash
hc@ubt:~/golang/goc2p/src$ go clean -x -i logging
cd /home/hc/golang/goc2p/src/logging
rm -f logging logging.exe logging.test logging.test.exe
rm -f /home/hc/golang/goc2p/pkg/linux_386/logging.a
```
如果再加上標記`-r`又會打印出哪些命令呢?請讀者自己試一試吧。