1. 程式人生 > >go語言學習筆記(一)——GoPath

go語言學習筆記(一)——GoPath

環境變數介紹

GOROOT:Golang的安裝路徑

GOPATH:可以理解為工作目錄或者工作區,也是平時接觸最多的一個變數。它可以是一個目錄,可以是多個目錄路徑,每個目錄代表一個工作區。這些目錄用於放置Go語言的原始碼檔案(src),以及安裝(命令go install)後的歸檔檔案(pkg目錄)和可執行檔案(bin目錄)

GOBIN:GOROOT目錄下的可執行檔案放置目錄,一般指bin。

注:歸檔檔案:一般副檔名為“.a”,意思是archive。在C程式中也指程式編譯後生成的靜態庫檔案。這跟Java的jar包還不太一樣,jar包相當於動態連結庫了。

原始碼組織方式

  • go語言原始碼以程式碼包為基本組織單位
  • 程式碼包與目錄一一對應,目錄有子目錄,程式碼包也有子包
  • 每個包都有匯入路徑,使用前需要import(匯入路徑實際就是從src子目錄到該包實際儲存位置的相對路徑)

原始碼安裝結果

原始碼檔案以及安裝後的結果檔案放置位置:

  • 原始碼檔案通常放入某個工作區的src子目錄下
  • 歸檔檔案放進該工作區的pkg子目錄(中間還有一個平臺相關目錄)
  • 可執行檔案放進該工作區的bin子目錄

構建和安裝go程式的過程

構建使用命令go build,安裝使用命令go install

go build和go install的區別

  • go build命令原始碼檔案,會在當前目錄下生成二進位制檔案
  • go build庫原始碼檔案,那麼操作的結果檔案只會存在於臨時目錄中,此時build的意義是用來檢查和驗證
  • go install庫原始碼檔案,放在$GOPATH/pkg的某個子目錄下
  • go install命令原始碼檔案,結果檔案則會生成在$GOPATH/bin下

注:原始碼檔案分三類:命令原始碼檔案、庫原始碼檔案、測試原始碼檔案

簡單說明:

  • 命令原始碼檔案:具有宣告自己屬於main程式碼包、包含無引數宣告和結果宣告的main函式的檔案
  • 庫原始碼檔案:不具備命令原始碼檔案的那兩個特徵的原始碼檔案,也稱靜態庫檔案
  • 測試原始碼檔案:不具備命令原始碼檔案的那兩個特徵的原始碼檔案,名稱以_test.go為字尾,其中至少一個函式名稱以Test或Benchmark為字首,並且該函式接受一個型別為*testing.T或*testing.B的引數

go build和go get用法

(1)go build命令,預設不會編譯目的碼包所依賴的程式碼包。(當然如果依賴的程式碼包的歸檔檔案不存在,或者原始碼檔案有變化,還是會被編譯)

執行命令時加入標記:

  • -a :會強制編譯依賴的程式碼包。
  • -i :不但編譯依賴的程式碼包,還要安裝他們的歸檔檔案
  • -x:可以看到go build 命令具體執行了那些操作
  • -n:值檢視具體操作,而不執行他們
  • -v:看到go build命令編譯的程式碼包的名稱,與-a標記搭配一起使用很有用

(2)go get 會自動從一些主流公用程式碼倉庫下載目的碼包。並把他們安裝到環境變數GOPATH包含的第一工作區相對應的目錄中。如果存在環境變數GOBIN,那麼近包含命令原始碼檔案的程式碼包會被安裝到GOBIN指向的目錄。

常用幾個標記:

  • -u:下載並安裝程式碼包,不論工作區中是否已存在他們
  • -d:只下載程式碼包,不安裝
  • -fix:在下載程式碼包後,先執行一個用於根據當前Go語言版本修正程式碼的工具,在安裝程式碼包。
  • -t:同時下載測試所需的程式碼包
  • -insecure:允許通過非安全的網路協議下載和安裝程式碼包。Http協議就是這樣的協議。

問題(答案待考究)

1.go語言在多個工作區中查詢依賴包的時候是以怎麼樣的順序進行的?

答:

2.如果在多個工作區中都存在匯入路徑相同的程式碼包會產生衝突嗎?

答:

筆記來源:

相關推薦

go語言學習筆記——GoPath

環境變數介紹 GOROOT:Golang的安裝路徑 GOPATH:可以理解為工作目錄或者工作區,也是平時接觸最多的一個變數。它可以是一個目錄,可以是多個目錄路徑,每個目錄代表一個工作區。這些目錄用於放置Go語言的原始碼檔案(src),以及安裝(命令go insta

Go語言學習筆記 簡介、安裝

為什麼選擇Go 程式語言已經非常多,偏效能敏感的編譯型語言有 C、C++、Java、C#、Delphi和Objective-C等,偏快速業務開發的動態解析型語言有PHP、Python、Perl、Ruby、JavaScript和Lua等,面向特定領域的語言有Erlang、R和MATLAB等,

GO語言學習筆記

lee 浮點 lds 問題 chan str 布爾 創建 當前 GO語言學習筆記 1.數組切片slice:可動態增長的數組 2.錯誤處理流程關鍵字:defer panic recover 3.變量的初始化:以下效果一樣 `var a int = 10` `var a = 1

GO語言學習筆記Go語言的初步了解

Go語言 text readme arw tarc test 執行 .tar.gz gin 一·、Go語言的官方網站https://golang.org/dl/二、安裝Go語言Linux版本: tar zxf go1.11.4.linux-amd64.tar.gz mv g

c 語言學習筆記基礎

lac alert https 內容 con 標記 prime c++ prime c基礎 近期工作上有對C語言算法上的需求,所以要學C,上學的時候沒學過,只學過半年的Java(我是專升本,本科學的材料),2015年工作後也學過C,那時候的需求是能看懂就可以,也就沒深入研究

Go語言學習筆記文件操作

see 大小 unix rdo 筆記 不能 hid code lag 加 Golang學習 QQ群共同學習進步成家立業工作 ^-^ 群號:96933959 文件讀取 os.File 封裝了文件相關操作 type File File代表一個打開的文件對象。

go語言學習筆記4--容器與字符串的基本概念

都是 empty 知識 nil 來講 java nbsp unicode ... 一、 Slice(切片) package main import ( "fmt" ) //切片,slice func main() { arr := [...]int{1,2,

Go語言學習筆記1——順序編程

寫法 AR [] 多重賦值 返回值 賦值 表達 div long Go語言學習筆記這一堆主要是《Go語言編程》(人民郵電出版社)的讀書筆記。中間會穿插一些零碎的點,比如源碼學習之類的。大概就是這樣吧。 1. 順序編程 1.1 變量 變量的聲明: var 變量名 類型 va

Go語言學習筆記2

world int 數組 [1] string 語言學 rim str name 數組 var a [2]string a[0] = "Hello" a[1] = "World" primes := [6]int{2, 3, 5, 7

Go語言學習筆記 基本語法、變數、常量、型別

基本語法 Go語言中的標記 Go程式是由各種標記組成的,標記可以是關鍵字,識別符號,常量,字串文字或符號。例如,以下Go語句由六個標記組成: fmt.Println("Hello, World!") 每個標記單獨表示為: fmt . Println ( "Hello, World

Go語言學習筆記 錯誤處理

error介面 Go語言引入了一個關於錯誤處理的標準模式,即error介面,該介面的定義如下: type error interface { Error() string } 對於大多數函式,如果要返回錯誤,大致上都可以定義為如下模式,將error作為多種返回 值中的最後一個,但這並非是

Go語言學習筆記 函式

函式定義 函式構成程式碼執行的邏輯結構。在Go語言中,函式的基本組成為:關鍵字func、函式名、引數列表、返回值、函式體和返回語句。 func (p mytype) funcname(q int) (r, s int) { return 0, 0 }   func:

Go語言學習筆記 流程控制

程式設計語言的流程控制語句,用於設定計算執行的次序,建立程式的邏輯結構。可以說,流程控制語句是整個程式的骨架。從根本上講,流程控制只是為了控制程式語句的執行順序,一般需要與各種條件配合,因此,在各種流程中,會加入條件判斷語句。流程控制語句一般起以下3個作用:   選擇,即根據

Go語言學習筆記 集合型別

陣列 陣列中包含的每個資料被稱為陣列元素(element),一個數組包含的元素個數被稱為陣列的長度。 [32]byte // 長度為32的陣列,每個元素為一個位元組 [2*N] struct { x, y int32 } // 複雜型別陣列 [1000]*float64 // 指標陣列 [3

Go語言學習筆記 系統型別

系統型別 對於面向物件程式設計的支援Go 語言設計得非常簡潔而優雅。簡潔之處在於,Go語言並沒有沿襲傳統面向物件程式設計中的諸多概念,比如繼承、虛擬函式、建構函式和解構函式、隱藏的this指標等。優雅之處在於,Go語言對面向物件程式設計的支援是語言型別系統中的天然組成部分。整個型別系統通過介面串

Go語言學習筆記1——入門

GO語言的基礎部分包括以下幾個成分: 包宣告 引入包 函式 變數 語句&表示式 註釋 一個簡單的go程式例子如下: package main //包名 import "fmt" //輸出包名,fmt包是實現了格式化IO的函式

Go語言學習筆記8面向物件

package main import "fmt" func main() { //定義treeNode結構體 var root treeNode root = treeNode{value:3} fmt.Println(root) fmt.Println() root.left

R語言——學習筆記

1.“>”符號後輸入指令。 2.1:100   指輸入1—100連續數值 3.sum()    函式,計算總和 4.sample()    函式,隨機取出     例1:>sample(1:6,1)    從1—6的整數中取出1個     例2:&g

Go語言學習筆記:變數作用域

Go語言變數型別   Go語言變數型別分為三種:區域性變數,全域性變數,形式引數 型別 定義 描述 區域性變數 在函式內定義的變數 作用域只在函式體內 全域性變數 在函式外定義的變數 全域性變數可以在整個包甚至外部包(被匯出後)

python語言學習筆記------匯率兌換

根據輸入判斷是人民幣還是美元,進行相應的轉換計算,將匯率兌換功能封裝到函式中,使結構程式化,函式lambda def main(): """ 主函式 """ #