Golang GOPATH 包

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

Golang GOPATH & 包的定義 & 包的導入

GOPATH 設置

go 命令依賴一個重要的環境變量:$GOPATH

可以在 .zshrc 配置文件中加上一行這樣的配置,

export GOPATH=/Users/flyme/mygo

Go從1.1版本到1.7必須設置這個變量,而且不能和Go的安裝目錄一樣,這個目錄用來存放Go源碼,Go的可運行文件,以及相應的編譯之后的包文件。所以這個目錄下面有三個子目錄:src、bin、pkg

從go 1.8開始,GOPATH環境變量現在有一個默認值,如果它沒有被設置。 它在Unix上默認為$HOME/go。

GOPATH允許多個目錄,當有多個目錄時,請注意分隔符,多個目錄的時候Windows是分號,Linux系統是冒號,當有多個GOPATH時,默認會將go get的內容放在第一個目錄下。

以上 $GOPATH 目錄約定有三個子目錄:

  • src 存放源代碼(比如:.go .c .h .s等)
  • pkg 編譯后生成的文件(比如:.a)
  • bin 編譯后生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)

.zshrc PATH 和 GOPATH 環境變量的配置?

export GOPATH=/Users/flyme/mygo
export PATH=$MAVEN_HOME/bin:${GOPATH//://bin:}/bin:$PATH

檢查是否配置成功,

?  ~ echo $GOPATH
/Users/flyme/mygo:/Users/flyme/workspace-go
?  ~ echo $PATH
/Users/flyme/IDE/apache-maven-3.3.9/bin:/Users/flyme/mygo/bin:/Users/flyme/workspace-go/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/mysql/bin
?  ~

?

包的定義

GOPATH下的src目錄就是接下來開發程序的主要目錄,所有的源碼都是放在這個目錄下面,那么一般我們的做法就是一個目錄一個項目,例如: $GOPATH/src/mymath 表示mymath這個應用包或者可執行應用,這個根據package是main還是其他來決定,main的話就是可執行應用,其他的話就是應用包。

main package不同于其它library package,它定義了一個可執行程序。其中的main函數即是可執行文件的入口函數。

所以當新建應用或者一個代碼包時都是在src目錄下新建一個文件夾,文件夾名稱一般是代碼包名稱,當然也允許多級目錄,例如在src下面新建了目錄$GOPATH/src/github.com/astaxie/beedb 那么這個包路徑就是"github.com/astaxie/beedb",包名稱是最后一個目錄beedb。

在每個Go源文件的開頭都必須有包聲明語句。包聲明語句的主要目的是確定當前包被其它包導入時默認的標識符(也稱為包名)。

例如,math/rand包的每個源文件的開頭都包含package rand包聲明語句,所以當你導入這個包,你就可以用rand.Int、rand.Float64類似的方式訪問包的成員。

關于默認包名一般采用導入路徑名的最后一段的約定也有三種例外情況。

第一個例外,包對應一個可執行程序,也就是main包,這時候main包本身的導入路徑是無關緊要的。名字為main的包是給go build構建命令一個信息,這個包編譯完之后必須調用連接器生成一個可執行程序。

第二個例外,包所在的目錄中可能有一些文件名是以test.go為后綴的Go源文件,并且這些源文件聲明的包名也是以test為后綴名的。這種目錄可以包含兩種包:一種普通包,加一種則是測試的外部擴展包。所有以test為后綴包名的測試外部擴展包都由go test命令獨立編譯,普通包和測試的外部擴展包是相互獨立的。

第三個例外,一些依賴版本號的管理工具會在導入路徑后追加版本號信息,例如"gopkg.in/yaml.v2"。這種情況下包的名字并不包含版本號后綴,而是yaml。

?

包的導入聲明

如果我們想同時導入兩個有著名字相同的包,例如math/rand包和crypto/rand包,那么導入聲明必須至少為一個同名包指定一個新的包名以避免沖突。這叫做導入包的重命名。

import ("crypto/rand"mrand "math/rand" // alternative name mrand avoids conflict
)

?

包的匿名導入

如果只是導入一個包而并不使用導入的包將會導致一個編譯錯誤。但是有時候我們只是想利用導入包而產生的副作用:它會計算包級變量的初始化表達式和執行導入包的init初始化函數。這時候我們需要抑制“unused import”編譯錯誤,我們可以用下劃線來重命名導入的包。像往常一樣,下劃線為空白標識符,并不能被訪問。

import _ "image/png" // register PNG decoder

============END============

轉載于:https://my.oschina.net/xinxingegeya/blog/718305

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284127.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PPK大疆無人機應用教程

文章目錄 一、新建項目二、導入數據三、解算過程四、結果導出一、新建項目 新建工程,設置項目名稱,保存位置,控制等級,坐標系統(坐標系統選擇高斯克呂格,中央子午線根據實際數據所在位置進行選擇) 二、導入數據 選擇大疆數據,找到對應的文件夾 數據有:圖片,EVENT.b…

Eclipse Add generated serial version ID報錯解決方案

為什么80%的碼農都做不了架構師?>>> 問題: The following problem occurred:Could not find class file.Make sure the file is compilable 解決方案: 1、右鍵項目 -> Java Build Path -> Source 在Sourcd folders on bui…

開啟線程的方式

1、實現Runnable接口 1 package test;2 3 4 5 public class ThreadTest implements Runnable{6 public void tt(){7 Thread t new Thread(this);8 t.start();9 } 10 11 Override 12 public void run() { 13 while(true){ 14 …

C# WPF設備監控軟件(經典)-上篇

01—前言應老東家也是老同學的需求,開發了此設備監控軟件。主要是為了應對測試設備長時間不上傳測試數據未能及時發現的問題,測試數據一般在每臺設備都有個固定的臨時存放目錄,測試數據不更新時,此文件夾便不再更新。需求相對比較…

[轉]微服務的4個設計原則和19個解決方案

目錄 一、微服務架構演進過程 二、微服務架構的好處 三、微服務應用4個設計原則 1.AKF拆分原則 2.前后端分離 3.無狀態服務 4.Restful通信風格 四、微服務架構帶來的問題 五、微服務平臺的19個落地實踐 1.企業IT建設的三大基礎環境 2.微服務應用平臺總體架構 3.微服…

時間處理總結(二)oracle

不斷總結中................. 1.等于land.djsjto_date(2016/7/26,yyyy-MM-dd)2.大于等于land.djsj>to_date(2016/7/26,yyyy-MM-dd)3.小于等于land.djsj<to_date(2016/7/26,yyyy-MM-dd)4.區間land.djsj>to_date(2016/7/26,yyyy-MM-dd) and land.djsj<to_date(2016/7…

【GlobalMapper精品教程】033:影像地圖羽化方式詳解

在Globalmapper中,可以很方便的對影響進行多種羽化值設置。 文章目錄 1. 不要羽化此圖層2. 沿一個或多個邊緣羽化3. 羽化到有效數據的多邊形覆蓋4. 在當前選定的多邊形內羽化5. 裁剪到選定的邊界,而不是羽化6. 在多邊形外部羽化,而不是內部加載配套案例數據包中的data033.ra…

基于WPF重復造輪子,寫一款數據庫文檔管理工具(一)

項目背景公司業務歷史悠久且復雜&#xff0c;數據庫的表更是多而繁雜&#xff0c;每次基于老業務做功能開發都需要去翻以前的表和業務代碼。需要理解舊的表的用途以及包含的字段的含義&#xff0c;表少還好說&#xff0c;但是表一多這就很浪費時間&#xff0c;而且留下來的文檔…

[轉]GitBook使用教程收藏

GitBook使用教程 最簡單的方式就是使用GitBook編輯器&#xff0c;沒有什么難度&#xff0c;后面的教程主要針對命令行的方式 PS&#xff1a;GitBook的book頁面默認沒有download按鈕的 需要到設置中打開&#xff0c;打開后再次publish生效 同步GitHub 更新失敗&#xff0c;無法…

二 面向對象三大特性

一 繼承與派生 一、繼承定義 二、繼承與抽象的關系 三、繼承與重用性 四、派生 五、組合與重用性 六、接口與歸一化設計 七、抽象類 八、繼承實現的原理 九、子類中調用父類的方法 二 多態與多態性 一、多態 二、多態性 三 封裝 一、封裝定義 二、特性(property) 三、封裝與擴展…

CSS3新屬性

邊框&#xff1a; border-radius 用于創建圓角 div { border:2px solid; border-radius:25px; -moz-border-radius:25px; /* Old Firefox */ } box-shadow 用于向方框添加陰影 div { box-shadow: 10px 10px 5px #888888; } border-image 使用圖片來創建邊框 div { border-image…

Android實用筆記——使用Spinner實現下拉列表

2019獨角獸企業重金招聘Python工程師標準>>> 1、編輯activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"mat…

基于.NET 6 的開源訪客管理系統

簡單介紹一下系統功能系統用于簡化訪客登記、查詢、保存。傳統的登記方式&#xff0c;不僅浪費紙張&#xff0c;而且還面臨保存的問題&#xff0c;查閱不方便。該系統為了在疫情期間能很好管理訪客登記做好風險管控,同時可以整合智能設備做到自動確認并跟蹤訪客的行動軌跡,該項…

完整的產品管理工作流程

產品經理的工作具體會落實到工作流程中&#xff0c;所以工作流程很大程度上會體現工作層次。很多白領產品經理&#xff0c;多年來在一個低層次的流程中轉圈——理需求、畫原型、寫文檔、管項目、驗收上線&#xff0c;一個版本上線之后立刻對下一個版本理需求、畫原型、寫文檔、…

java爬蟲-簡單爬取網頁圖片

剛剛接觸到“爬蟲”這個詞的時候是在大一&#xff0c;那時候什么都不明白&#xff0c;但知道了百度、谷歌他們的搜索引擎就是個爬蟲。 現在大二。再次燃起對爬蟲的熱愛&#xff0c;查閱資料&#xff0c;知道常用java、python語言編程&#xff0c;這次我選擇了java。在網上查找的…

擴展方法必須在非泛型靜態類中定義

擴展方法必須在非泛型靜態類中定義&#xff1a;public class CustomerHelperClass{public static MvcHtmlString CreateImage(string p_w_picpathSource, string altText, string width, string height){//通過TagBulider創建標簽TagBuilder p_w_picpathTag new TagBuilder(&…

Windows Server 2016-圖形化遷移FSMO角色

上章節我們簡單介紹了三種不同方式查看FSMO主機角色信息&#xff0c;在開篇之前我們簡單回顧一下FSMO五種操作主機角色&#xff1a;林范圍操作主機角色有兩種&#xff0c;分別是 架構主機角色&#xff08;Schema Master&#xff09;和 域命名主機角色&#xff08;Domain Naming…

C# WPF設備監控軟件(經典)-下篇

上節已經對本軟件的功能和意圖進行了詳細講解&#xff0c;這節就不再啰嗦&#xff0c;本節主要對功能實現和代碼部分展開講解.01—前臺代碼前臺XAML:<Window x:Class"EquipmentMonitor.EquipmentView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/pr…

[轉]互聯網最大謠言:程序員35歲必淘汰?今天我就來擊碎他

朋友&#xff0c;只要你是程序員&#xff0c;你一定知道996和“程序員35歲必死”的言論。 這兩個話題在互聯網上的討論一次比一次激烈。 996工作制&#xff0c;眾所周知&#xff0c;每天早上9點到崗&#xff0c;一直待到晚上9點&#xff0c;每周工作6天&#xff0c;很多互聯網公…

【ArcGIS微課1000例】0057:將多波段柵格(影像.tif)背景設置為無數據nodata的方法

本文講解將多波段柵格(影像.tif)背景設置為無數據nodata的方法。 文章目錄 一、背景值識別二、背景值去除【推薦閱讀】: 【ArcGIS微課1000例】0056:將單波段柵格背景設置為無數據NoData的方法 一、背景值識別 可以用【識別】工具來獲取影像數據的背景值。 在背景上單擊,…