linux go環境安裝和基本項目結構

? ? 最近項目中要用到Go語言,所以簡單總結一下安裝和配置,Go這個語言本身就限定了很多規范,比如項目設置,編程風格等,開發中就不需要再因為各種規范問題糾結了,直接用官方規定的能避免很多坑,下面直接切正題,go一般參考兩個網站,官網和中文網,網址如下:

? ? 官網:https://golang.org

? ? 中文網:https://studygolang.com/

? ? 中文文檔:https://go-zh.org/doc/

? ? 另外其實中文網的更新目前也是比較快的

? ? 1. 安裝

? ? 第一步首先下載安裝包,下載地址是:https://golang.org/dl/,或者中文網地址:https://studygolang.com/dl,比較了一下兩個go最新版本都是一樣的,目前是1.10.3,根據自己的計算機系統下載對應的版本,我這里是linux 64位,所以下載go1.10.3.linux-amd64.tar.gz這個包,下載之后可以解壓安裝:

tar -xvzf go1.10.3.linux-amd64.tar.gz

? ? 解壓之后直接當前目錄下會有一個go目錄,直接執行?mv go /usr/local?,這樣就將go安裝到的/usr/local/go下,現在只需要最后一步配置環境變量就可以了:

export PATH=$PATH:/usr/local/go/bin

? ? 可以加到/etc/profile或者~/.bash_profile然后source即可,現在執行?go version?查看版本號如下:

? ??

? ? 現在go就徹底安裝成功了,另外注意官方假定go安裝在/usr/local/go下,如果想安裝到其他目錄也是可以的,比如/abc/go,但是一定要配置GOROOT環境變量,如下:

export GOROOT=/abc/go
export PATH=$PATH:$GOROOT/bin

? ? 這樣go也可以安裝成功,如果是默認的目錄,則不需要設置GOROOT

? ? 2. hello world

? ? 第一步先寫一個最簡單的hello world程序,在任意目錄下新建hello.go,內容如下:

package mainimport "fmt"func main() {fmt.Printf("hello world\n")
}

? ? ?然后保存之后執行?go run hello.go?就可以直接執行了,或者先執行編譯?go build hello.go?然后生成hello可執行文件,就和c/c++編譯一樣,無需安裝go環境即可執行:

? ??

? ? 3. 項目結構

? ? 上面只是go最簡單的示例代碼,但是在實際開發中會包含大量的項目封裝和第三方模塊,就需要設置項目結構進行管理,當然這個go已經規定好了,下面和文檔上寫的一樣一步一步建立一個簡單的項目,

? ? 首先建立工作目錄:?mkdir /root/go_work?,然后配置GOPATH環境變量,這也是開發go唯一需要配置的環境變量,如下:

export GOPATH=/root/go_work
export PATH=$PATH:$GOPATH/bin

? ? 然后進入/root/go_work,項目目錄下面一般需要3個目錄:bin, pkg, src,看意思懂了一大半,待會會詳細說到.

? ? 現在項目下面是空的,手動建立源碼目錄?mkdir src?,然后在下面繼續建立用戶庫目錄:

mkdir -p github.com/user
mkdir github.com/user/hello

? ? 大部分第三方庫都是通過github下載的,所以第三方源碼目錄一般是github,然后將剛才寫的hello.go移動到github.com/user/hello中,現在可以執行安裝命令:?go install github.com/user/hello?注意是在任何目錄都可以執行這個命令,因為go會自動去GOPATH下的源碼目錄中尋找,會把對應的目錄下所有的源代碼都進行編譯,執行完成沒有任何輸出表示成功,然后回到go_work下會看到生成了bin目錄,這里面的就是編譯好的可執行文件.

? ? 然后嘗試編寫一個第三方模塊,實現字符串反轉,執行?mkdir github.com/user/string_util?然后新建文件reverse.go,代碼如下:

package string_utilfunc Reverse(s string) string {r := []rune(s)for i, j := 0, len(r) - 1; i < len(r)/2; i, j = i + 1, j - 1 {r[i], r[j] = r[j], r[i]}return string(r)
}

? ? 然后保存,執行安裝?go install github.com/user/string_util?,其實在執行前可以先執行?go build github.com/user/string_util?沒有報錯說明成功,但是不會生成任何文件,然后再執行install,現在看到go_work目錄下會多出pkg目錄,這個目錄就是第三方的庫,也就是不含有main函數的代碼都會編譯到這里面;然后編寫主調函數調用這個封裝的函數,在源碼目錄下新建call目錄,然后編寫util_call.go,代碼如下:

package main
import ("fmt""github.com/user/string_util"
)func main() {fmt.Printf(string_util.Reverse("\n!oG, olleH"))
}

? ? 然后保存執行安裝?go install call?或者在代碼所在目錄直接執行?go install?均可,這時候在bin目錄下就會生成call可執行文件,執行如下:

? ??

? ? 現在我們對go的項目結構就基本上了解清楚了,然后我們總體看一下項目結構:

? ???

? ? 這和網上教程寫的是基本一樣的

? ??總結:

? ? 1. go的開發環境僅依賴GOPATH環境變量和go安裝目錄下的系統包.

? ? 2. go的所有源碼應該在src下按照目錄結構存放,按照標準的安裝方式編譯項目.

? ? 3. 所有包含main函數的源代碼,頭部package都應該為main,其余的模塊比如github.com/user/stringutil下面的源碼頭部應該為package stringutil,即取目錄結構的最后一層.

? ? 上面就是go的基本環境安裝和開發配置,繼續入門或進階可以參考以下鏈接:

? ? 1. Go語言之旅,在線學習:https://tour.go-zh.org/

? ? 2. 語言規范:https://go-zh.org/ref/spec

? ? 3. 實效Go編程:https://go-zh.org/doc/effective_go.html

? ? 最后就是總的文檔,多多閱讀.

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

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

相關文章

運輸層

運輸層-TCP 簡介 通俗點來說&#xff0c;運輸層是連接底層和用戶層的&#xff0c;運輸層向它上面的應用層提供通信服務&#xff0c;它屬于通信部分的最高層&#xff0c;同時也是用戶功能的最低層。 運輸層重要功能是復用和分用。復用&#xff1a;發送方不同應用進程可以使用同一…

對AI"出錯"零容忍?美國加強AI推理解釋能力研究

隨著硅谷私企引領人工智能&#xff08;AI&#xff09;爆發式發展&#xff0c;美國國防部曾發布報告稱&#xff0c;將“立即采取行動”加速AI和自動化技術研發。據《麻省理工技術評論》雜志網站近日報道&#xff0c;美國國防高級研究計劃局&#xff08;DARPA&#xff09;已經著手…

java調用指定瀏覽器_Java調用瀏覽器打開網頁完整實例

本文實例講述了java調用瀏覽器打開網頁的方法。分享給大家供大家參考。具體實現方法如下&#xff1a;package com.yifang.demo;import java.io.file;public class openpagedemo {public static void main(string[] args) {try {//string url "http://www.baidu.com"…

[HDU517] 小奇的集合

題目鏈接 顯然有貪心每次選擇最大的兩個數來做。 于是暴力地把最大的兩個數調整到非負&#xff08;暴力次數不超過1e5&#xff09;&#xff0c;接下來使用矩陣乘法即可。 \[ \begin{pmatrix} B\\S\\T \end{pmatrix} \begin{pmatrix} 1&1&0\\ 1&0&0\\ 1&1&…

phpStudy

很多朋友在學習php的過程中會看到phpstudy這個東西&#xff0c;那么phpstudy是做什么的呢&#xff1f;有什么用&#xff1f;接下來的這篇文章將個大家來詳細的介紹一下phpstudy的內容。 首先在百度百科上對于phpstudy的定義是一個PHP調試環境的程序集成包。 該程序包集成最新的…

殺入共享汽車市場的PonyCar,是下一個犧牲者還是引領者?

曾幾何時&#xff0c;汽車是財富、地位的象征&#xff0c;擁有一輛汽車就感覺自己處處高別人一等。但如今&#xff0c;汽車已然成為一件隨處可見的商品&#xff0c;甚至已經到車來車往、熙熙攘攘的地步。根據中商產業研究院發布的《2018-2023年中國汽車行業市場前景及投資機會研…

python圖片內容長度識別_Python實現識別圖片內容的方法分析

本文實例講述了Python實現識別圖片內容的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;python識別圖片內容。這里我的環境為windows64位&#xff0c;python2.7.14需要用到PIL模塊和tesseract模塊。首先需要安裝pip包管理&#xff0c;安裝方法可參考附錄windows下…

AJAX工具

代碼如下 var AppAjax {baseUrl:AppConfig.apiUrl//【POST請求】,post:function(pUrl,pData,pSuccessFun){pUrl AppAjax.baseUrl pUrl;$.ajax({headers: {token: AppConfig.token},url:pUrl,type:POST,data:JSON.stringify(pData),//pData,//JSON.stringify(),contentType:&q…

厲害了!Intel第九代酷睿參數曝光

2019獨角獸企業重金招聘Python工程師標準>>> 導讀上周有消息稱&#xff0c;Intel第九代酷睿處理器最快于8月1日發布&#xff0c;共有三款主打產品&#xff0c;分別是i9-9900K、i7-9700K和i5-9600K。其中&#xff0c;i9-9900K設計為8核16線程&#xff0c;基礎主頻3.6…

java 連接kafka_設置多個kafka連接接收器

我正在研究從postgreSQL到HDFS的數據流 . 我在HDP 2.6沙箱上設置了融合環境 . 我對postgreSQL的jdbc源配置是namejdbc_1connector.classio.confluent.connect.jdbc.JdbcSourceConnectortasks.max1connection.urljdbc:postgresql://host:port/db?currentSchemaschema&useru…

Web應用性能分析工具—HAR文件

Web應用性能分析工具—HAR文件 來源 https://raynorli.com/2018/06/11/web-performance-analysis-har-file/ 客戶經常有的一個問題就是&#xff0c;我的網頁服務通過你的設備之后&#xff0c;訪問變慢了&#xff0c;這類直觀感受的故障很不好量化&#xff0c;而且基于Web應用的…

【mybatis】mybatis多表聯查,存在一對多關系的,實體中使用List作為字段接收查詢結果的寫法...

實體如下&#xff1a; IntegralGoods  積分商品 IntegralGoodsImg  積分商品圖片 ShelfLog    積分商品自動上架記錄 IntegralGoods &#xff1a;IntegralGoodsImg&#xff1a;ShelfLog   1&#xff1a;n&#xff1a;1 1&#xff1a;1的多表聯查或者m:n的多表聯查 很簡…

lr java腳本_【上海校區】 LR Java腳本編寫方法

之前在某一家銀行也接觸過java寫的性能接口腳本&#xff0c;最近因項目&#xff0c;也需編寫java接口性能測試腳本&#xff0c;腦袋一下懵逼了&#xff0c;有點不知道從何入手。隨后上網查了相關資料&#xff0c;自己又稍微總結了一下&#xff0c;與大家共同分享哈~   首先&a…

Flask Web表單

title: flask學習筆記 subtitle: 3. flask Web表單 date: 2018-12-14 10:17:28 --- Web表單 HTML表單是用戶和web站點或應用程序之間交互的主要內容之一。它們允許用戶將數據發送到web站點。大多數情況下&#xff0c;數據被發送到web服務器&#xff0c;但是web頁面也可以自己攔…

一些PHP函數功能

函數 描述 PHP basename() 返回路徑中的文件名部分。 3 chgrp() 改變文件組。 3 chmod() 改變文件模式。 3 chown() 改變文件所有者。 3 clearstatcache() 清除文件狀態緩存。 3 copy() 復制文件。 3 delete() 參見 unlink() 或 unset()。 dirname() 返回路徑中的目錄名稱部分…

mac java tomcat_mac idea 配置tomcat

mac idea 配置tomcat一、下載安裝tomcat二、有一個 javaWeb項目創建一個javaWeb項目 ,參考第一條&#xff0c;只是在第二步的時候選中java Web就行三、完善web項目在WEB-INF 下新建兩個文件夾&#xff0c;lib(存放jar包)和classes(存放編譯后的文件)打開項目結構設置配置classe…

30342程序格式

1.匯編語言程序格式 2.表達式操作符 轉載于:https://www.cnblogs.com/ZanderZhao/p/11055237.html

初識docker,弄清鏡像和容器

前言&#xff1a; 之前總是有人拿虛擬機和容器做比較。我之前一直理解的容器&#xff0c;就類似于虛擬機快照類似。拿別人的東西就直接用了。在我的虛擬機中安裝一下&#xff0c;環境就搞好了。其實容器是一個徹底解耦的東西。各個軟件相互獨立互不影響 什么是鏡像 從docker本身…

configure 查找依賴庫_Rust在編譯Android的庫時,如何設定依賴的第三方庫引用的C/C++的動態庫的搜索路徑?...

謝邀。不懂android&#xff0c;也不懂OpenCL。但是我嘗試了解了一下你的問題。既然你用了第三方庫&#xff0c;那就得查源碼了。翻開ocl 庫的源碼搜android關鍵字&#xff0c;很容易定位到下面代碼。#https://github.com/cogciprocate/ocl/blob/master/ocl-interop/build.rs}el…

SprinBoot易學難精

Spring Boot易學難精 易學 組件自動裝配&#xff1a;規約大于配置&#xff0c;專注核心業務外部化配置&#xff1a;一次構建、按需調配&#xff0c;到處運行嵌入式容器&#xff1a;內紙容器、無序部署、獨立運行Spring Boot Stater&#xff1a;簡化依賴、按需裝配、自我包含Pro…