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(): """ 主函式 """ #