重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
這個方法獲取的是執(zhí)行文件的目錄,如果執(zhí)行文件demo 是在/home/golang文件夾下面
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元禮縣做網(wǎng)站,已為上家服務(wù),為禮縣各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
我們在/目錄執(zhí)行
./home/golang/demo 這樣輸出的os.Getwd()不會是/home/golang,而是/
pwd,_:=filepath.Abs(filepath.Dir(os.Args[0]))
使用這個,獲取到的目錄是/home/golang
如果是在本地開發(fā)調(diào)試,這兩個方法獲取的到路徑是一樣的,因為我們就在自己的項目目錄做調(diào)試,
但是如果構(gòu)建后當(dāng)做程序運行, 這兩個表現(xiàn)的效果是有區(qū)別的 ,
在讀取配置文件,打印log等需要獲取目錄的地方,需要根據(jù)實際情況選擇使用的方法,一般來說用
filepath.Abs(filepath.Dir(os.Args[0]))的地方會多一點,因為這個是一個固定的目錄,而os.Getwd(),會因為我們執(zhí)行命令的目錄不一樣而不一樣。
os.Args[0]是執(zhí)行文件路徑,在調(diào)試的時候,是一個臨時目錄
os.Args[1,2,3,4...]后面就是我們自己接的參數(shù)了
比如
go run main.go single lvhuxu
os.Args[1] = single
os.Args[2] = lvhuxu
二進(jìn)制包安裝的話:如果安裝在了默認(rèn)位置例如/usr/local/go (Windows系統(tǒng):c:\Go)這個時候可以不需要設(shè)置GOROOT,如果改變了安裝的這個默認(rèn)目錄,那么就需要設(shè)置GOROOTGOROOT的概念有點Go安裝目錄的意思GOPATH是一個開發(fā)環(huán)境目錄的意思,下面必須包含bin、pkg、src,然后再src下面新建項目就可以了你在沒有設(shè)置GOPATH的情況下,也可以把項目建在GOROOT/src下面,其實和GOPATH的概念類似
System.Environment.CurrentDirectory;
//例:?c:/test/
Application.ExecutablePath;(包括名稱)
//例:?c:/test/myapp.exe
Application.StartupPath;(不包括名稱)
//例:?c:/test/
絕對路徑是直接到達(dá)目標(biāo)位置,通常是從盤符開始的路徑。完整的描述文件位置的路徑就是絕對路徑,以web站點根目錄為參考基礎(chǔ)的目錄路徑。
絕對路徑名的指定是從樹型目錄結(jié)構(gòu)頂部的根目錄開始到某個目錄或文件的路徑,由一系列連續(xù)的目錄組成,中間用斜線分隔,直到要指定的目錄或文件,路徑中的最后一個名稱即為要指向的目錄或文件。之所以稱為絕對,意指當(dāng)所有網(wǎng)頁引用同一個文件時,所使用的路徑都是一樣的。
擴(kuò)展資料
幾種編程語言獲取程序所在路徑的方法:
1、在golang程序里面獲取程序所在路徑:
package main
import (
"path/filepath"
"os"
"fmt"
"log"
)
func main() {
execDir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err = nil {
log.Fatal(err)
}fmt.Println(execDir)
}
2、python腳本所在路徑:
import os
print(os.path.split(os.path.realpath(__file__))[0])
3、shell腳本獲取腳本的絕對路徑:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" pwd )"
使用go命令可以定位到文件頭和文件末
當(dāng)go run 運行時會將文件轉(zhuǎn)移到臨時路徑下,然后再進(jìn)行編譯和執(zhí)行,分片0就是C:\Users\xxx\AppData\Local\Temp___go_build_main_go.exe;
go build編譯執(zhí)行時,那么分片0為執(zhí)行文件的相對路徑為(main.go)
fmt.Println(os.Args)
//output:[C:\Users\xxx\AppData\Local\Temp\___go_build_main_go.exe]
1
2
1
2
exec.LookPath()
根據(jù)傳入的參數(shù)來從PATH中獲取可執(zhí)行文件的絕對路徑(沒有編譯的)或者相對路徑(編譯后的);參數(shù)若帶分割號就直接查詢返回
func LookPath(file string) (string, error)
LookPath searches for an executable named file in the directories named by the
PATH environment variable. If file contains a slash, it is tried directly and the
PATH is not consulted. LookPath also uses PATHEXT environment variable to match a
suitable candidate. The result may be an absolute path or a path relative to the
current directory.
1
2
3
4
5
6
7
1
2
3
4
5
6
7
filepath.Abs()
根據(jù)傳入的路徑計算出絕對路徑,如果傳入的為相對路徑,那么它會把當(dāng)前路徑拼接上
編譯后返回的是真實的路徑(D:\go_project\src\github.com\wzbwzt\studyGo\GetPath\main.exe)
未編譯執(zhí)行返回的是臨時執(zhí)行路徑
(C:\Users\xxx\AppData\Local\Temp___go_build_main_go.exe)