主頁 > 區塊鏈 > Mac下golang環境安裝以及新手入門

Mac下golang環境安裝以及新手入門

2020-11-06 01:24:19 區塊鏈

Mac下golang環境安裝以及新手入門


文章目錄

      • 環境安裝
      • 環境變數配置
      • 標準命令詳解
      • 運行Go
      • 通過go命令運行
        • 通過go命令編譯運行
      • go的基本知識
        • 注釋
        • 字串連接
      • 常見的基本錯誤
      • golang學習倉庫地址

go 菜鳥教程

環境安裝

mac 環境 首先安裝brew

    brew install go

執行完命令后,如下顯示:

Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/services).
No changes to formulae.

==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/go-1.11.2.m
######################################################################## 100.0%
==> Pouring go-1.11.2.mojave.bottle.tar.gz
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall go`
==> Caveats
A valid GOPATH is required to use the `go get` command.
If $GOPATH is not specified, $HOME/go will be used by default:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
🍺  /usr/local/Cellar/go/1.11.2: 9,282 files, 404MB

需要設定GOPATH和GOROOT的環境變數,以及設定PATH.

環境變數配置

通過go env查看go的詳細資訊

go env

需要設定的環境變數包括:GOPATH ,GOBIN 以及把GOBIN加入到PATH中,GOROOT變數默認已經設定好,

如果需要修改默認的環境變數配置修改 vim ~/.bash_profile 或者 vim ~/.zshrc

#GOROOT
# CentOS 中如下設定 GOROOT,看你安裝的路徑
# export GOROOT=/usr/local/go
# Mac OS 中通過命令列工具brew安裝如下配置 GOROOT
export GOROOT=/usr/local/opt/go/libexec
#GOPATH root bin
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
#GOPATH
#export GOPATH=$HOME/go
export GOPATH=/Users/wxq/go
#GOPATH bin
export PATH=$PATH:$GOPATH/bin
export GOPROXY=https://goproxy.io 

使其立即生效

source ~/.bash_profile

然后在執行 go env的時候配置就會生效

環境變數設定完成!

標準命令詳解

go --help

Go is a tool for managing Go source code.
Go是用于管理Go源代碼的工具,

Usage用法:
  go command [arguments]

The commands are:

  build 命令用于編譯我們指定的原始碼檔案或代碼包以及它們的依賴包,
    -o 指定輸出的檔案名,可以帶上路徑,例如 go build -o a/b/c
    -i 安裝相應的包,編譯+go install
    -a 更新全部已經是最新的包的,但是對標準包不適用
    -n 把需要執行的編譯命令列印出來,但是不執行,這樣就可以很容易的知道底層是如何運行的
    -p n 指定可以并行可運行的編譯數目,默認是CPU數目
    -race 開啟編譯的時候自動檢測資料競爭的情況,目前只支持64位的機器
    -v 列印出來我們正在編譯的包名
    -work 列印出來編譯時候的臨時檔案夾名稱,并且如果已經存在的話就不要洗掉
    -x 列印出來執行的命令,其實就是和-n的結果類似,只是這個會執行
    -ccflags 'arg list' 傳遞引數給5c, 6c, 8c 呼叫
    -compiler name 指定相應的編譯器,gccgo還是gc
    -gccgoflags 'arg list' 傳遞引數給gccgo編譯連接呼叫
    -gcflags 'arg list' 傳遞引數給5g, 6g, 8g 呼叫
    -installsuffix suffix 為了和默認的安裝包區別開來,采用這個前綴來重新安裝那些依賴的包,-race的時候默認已經是-installsuffix race,大家可以通過-n命令來驗證
    -ldflags 'flag list' 傳遞引數給5l, 6l, 8l 呼叫
    -tags 'tag list' 設定在編譯的時候可以適配的那些tag,詳細的tag限制參考里面的http://golang.org/pkg/go/build/
  clean       洗掉掉執行其它命令時產生的一些檔案和目錄,
    -i 清除關聯的安裝的包和可運行檔案,也就是通過go install安裝的檔案
    -n 把需要執行的清除命令列印出來,但是不執行,這樣就可以很容易的知道底層是如何運行的
    -r 回圈的清除在import中引入的包
    -x 列印出來執行的詳細命令,其實就是-n列印的執行版本
  doc 命令可以列印附于Go語言程式物體上的檔案,
  env 用于列印Go語言的環境資訊,
  bug 啟動錯誤報告,
  fix 把指定代碼包的所有Go語言原始碼檔案中的舊版本代碼修正為新版本的代碼,
  fmt 在包源上運行gofmt,
    -l 顯示那些需要格式化的檔案
    -w 把改寫后的內容直接寫入到檔案中,而不是作為結果列印到標準輸出,
    -r 添加形如“a[b:len(a)] -> a[b:]”的重寫規則,方便我們做批量替換
    -s 簡化檔案中的代碼
    -d 顯示格式化前后的diff而不是寫入檔案,默認是false
    -e 列印所有的語法錯誤到標準輸出,如果不使用此標記,則只會列印不同行的前10個錯誤,
    -cpuprofile 支持除錯模式,寫入相應的cpufile到指定的檔案
  generate 通過處理源生成Go檔案,
  get 下載或更新安裝指定的代碼包及其依賴包,并對它們進行編譯和安裝,
    -d 只下載不安裝
    -f 只有在你包含了-u引數的時候才有效,不讓-u去驗證import中的每一個都已經獲取了,這對于本地fork的包特別有用
    -fix 在獲取原始碼之后先運行fix,然后再去做其他的事情
    -t 同時也下載需要為運行測驗所需要的包
    -u 強制使用網路去更新包和它的依賴包
    -v 顯示執行的命令
  install 用于編譯并安裝指定的代碼包及它們的依賴包,
  list 列出指定的代碼包的資訊,
  run 命令可以編譯并運行命令原始碼檔案,
  test 對Go語言撰寫的程式進行測驗,
    -bench regexp 執行相應的benchmarks,例如 -bench=.
    -cover 開啟測驗覆寫率
    -run regexp 只運行regexp匹配的函式,例如 -run=Array 那么就執行包含有Array開頭的函式
    -v 顯示測驗的詳細命令
  tool 運行指定的go工具
    go tool fix . 用來修復以前老版本的代碼到新版本,例如go1之前老版本的代碼轉化到go1,例如API的變化
    go tool vet directory|files 用來分析當前目錄的代碼是否都是正確的代碼,例如是不是呼叫fmt.Printf里面的引數不正確,例如函式里面提前return了然后出現了無用代碼之類的,
  version 列印Go的版本資訊
  vet 用于檢查Go語言原始碼中靜態錯誤的簡單工具,

Use "go help [command]" for more information about a command.

Additional help topics:

  c           calling between Go and C
  buildmode   description of build modes
  filetype    file types
  gopath      GOPATH environment variable
  environment environment variables
  importpath  import path syntax
  packages    description of package lists
  testflag    description of testing flags
  testfunc    description of testing functions

Use "go help [topic]" for more information about that topic.

運行Go

我們先寫一段GO代碼,很簡單就是列印輸出一個hello world!, 保存為hello.go檔案

package main
import "fmt" 
func main() {
   fmt.Println("Hello, World!")
}

通過go命令運行

命令運行go程式,在hello.go這個當前目錄下運行下面命令,可以輸出hello world!,

go run hello.go

通過go命令編譯運行

GO程式的代碼是可以直接編譯成exe檔案 或者 二進制檔案直接運行,在hello.go目錄下運行下面命令,即可把go程式編譯成二進制檔案

go build hello.go

上面命令檔案可以編譯成一個hello可執行檔案,然后直接在當前目錄下 ./hello 運行,可以輸出hello world!,

go的基本知識

注釋

注釋不會被編譯,每一個包應該有相關注釋,

單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋,
多行注釋也叫塊注釋,均已以 /* 開頭,并以 */ 結尾,如:

// 單行注釋
/*
 hello WXiangQian
 我是多行注釋
 */

字串連接

Go 語言的字串可以通過 ? 實作:

package main
import "fmt"
func main() {
    fmt.Println("hello" + "WXiangQian")
}

常見的基本錯誤

  • { 寫法

需要注意的是 { 不能單獨放在一行,所以以下代碼在運行時會產生錯誤:

package main
import "fmt"
func main()  
{  // 錯誤,{ 不能在單獨的行上
    fmt.Println("Hello, World!")
}
  • 多余的 Imports

Go編譯器對Go程式非常嚴格,如果你不使用,就不要有多余的請求,在上面的代碼中,試圖引入os包,但是在代碼當中,并沒有使用,Go編譯器對這樣的行為嚴厲禁止,去掉第四行代碼之后,程式就能正確編譯運行,

  • 命名區分大小寫

上述代碼中,列印函式寫的是fmt.println不是之前所寫的fmt.Println,Go語言區分大小寫,所以在編程時,要嚴格按照定義的方式進行參考和呼叫,

尤其注意Println的l不是i的大寫I!!!!!(ps:多次因為寫成PrintIn而被報錯,雖然有點白癡,但是請注意!

  • 分號分行

如果你學過C、C++、Java、Perl等等,應該已經注意到Go(至少在前面的代碼中)沒有要求在陳述句的末尾添加分號,其實在Go語言中,會自動在一行的末尾添加分號,然而,如果在一樣有兩條運算式,需要用分號顯示的進行分割,

  • 無效的分號

在import后面不可以同時加入兩個;第二個分號之前沒有任何有效的運算式,所以編譯器報了prog.go:3: empty top-level declaration錯誤,去掉多余的分號,程式可正確運行,

golang學習倉庫地址

https://github.com/WXiangQian/go-study

你的支持就是我更新的動力👍!!!

WXiangQian王先森 CSDN認證博客專家 PHP開發工程師 分享實戰經驗 作業地點:北京
WXiangQian:PHP開發工程師,不定時分享實戰文章、原始碼剖析,為廣大網友解決各種疑難雜癥,在CSDN記錄作業中遇到的點點滴滴,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/203780.html

標籤:區塊鏈

上一篇:螞蟻集團暫緩上市:致歉投資者

下一篇:基于DYDX閃電貸在Cofix和Uniswap之間套利

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more