『No1: Go 上手指南導(dǎo)學(xué)』

golang-learning-one.png

第一期

接觸 GO 語言大概一個(gè)多月了,最近項(xiàng)目需要使用 Go 語言進(jìn)行相關(guān)的開發(fā)。所以需要學(xué)習(xí)。

一個(gè)月的接觸大概已經(jīng)知道了 Go 語言的語言特性。接下來就是不斷的練習(xí)和深入特殊特性。

為了更好的總結(jié)和創(chuàng)造刻意練習(xí)的機(jī)會,將Go 語言的相關(guān)文章成體系的學(xué)習(xí),特意簡書開文集,

進(jìn)行 Go 語言的學(xué)習(xí)。

文章相關(guān)說明

一直以來都有一個(gè)特別大的誤區(qū),以為準(zhǔn)備好了才動(dòng)手,這其實(shí)是不對的,因?yàn)槟阕约憾疾幻鞔_什么才叫準(zhǔn)備好,又或者什么時(shí)候準(zhǔn)備動(dòng)手。

項(xiàng)目相關(guān)的人最近也是零基礎(chǔ)學(xué)習(xí) Go 語言, 畢竟多幾年工作經(jīng)驗(yàn),特意觀察他們的學(xué)習(xí)方式和我之前的學(xué)習(xí)方式比對。其實(shí)絕大多數(shù)程序員都不再是拿本很厚的書進(jìn)行啃,從零攻克對新語言的障礙,而是直接奔著解決問題出發(fā),最重要的是整體的設(shè)計(jì)邏輯,而不是語言,待他解決了這個(gè)問題之后,也就慢慢的熟悉了新語言的特性。

比如:

  • 如何定義變量,常量
  • 如何編寫函數(shù)
  • 新語言的基本數(shù)據(jù)結(jié)構(gòu)
  • 判斷
  • 循環(huán)
  • 基本庫的使用
    ...

為此我專門細(xì)讀了 程序天才 -- 王垠 的文章《如何掌握所有程序語言》,文章中他在反復(fù)強(qiáng)調(diào)[語言特性],即:程序語言的共性。

比如:

  • 變量定義
  • 算術(shù)運(yùn)算
  • for 循環(huán)語句,while 循環(huán)語句
  • 函數(shù)定義,函數(shù)調(diào)用
  • 遞歸
  • 靜態(tài)類型系統(tǒng)
  • 類型推導(dǎo)
  • lambda 函數(shù)
  • 面向?qū)ο?/li>
  • 垃圾回收
  • 指針?biāo)阈g(shù)
  • goto 語句
    ...

所以今后的學(xué)習(xí)過程,進(jìn)行思維轉(zhuǎn)換,比如學(xué)習(xí)一門新語言該怎么學(xué),如果你非要看書,前期也不該看很厚的書,應(yīng)該選擇一些小冊子之類的介紹新語言的基礎(chǔ)特性,待你熟悉起來的,再進(jìn)行語言的深入學(xué)習(xí)。

這個(gè)文集的文章主要是一些小代碼,即實(shí)現(xiàn)一些很小的功能的函數(shù)集, 又可能是對一個(gè)庫或者包的簡單使用,也可能是教你如何進(jìn)行編寫測試的,也可能是Go 相關(guān)的一些,比如工程的管理,包的管理之類的。

大概就是這樣。

下面開始第一期的正文:

Go 語言環(huán)境的搭建

開始之前,先回顧下一般我們使用其他語言環(huán)境搭建是什么樣的流程,比如Python

  • 下載 Python
  • 設(shè)置環(huán)境變量
  • 安裝集成開發(fā)環(huán)境
  • 安裝第三方庫

好,Go 語言的環(huán)境搭建的一般步驟也是如此。

1. 下載

選擇適合操作系統(tǒng)的版本進(jìn)行下載。

2. 設(shè)置環(huán)境變量

主要設(shè)置下面幾個(gè)參數(shù):

  • GOROOT : 即安裝Go 的目錄
  • GOPATH :即工程目錄

其他設(shè)置默認(rèn)。

如何驗(yàn)證配置正確且可以使用:

go env # 查看設(shè)置的參數(shù)

go version # 查看安裝的 Go 的版本

比如:

GOPATH = C:\Users\wuxiaoshen\go
GOROOT =  D:\1_System\2_Installation\G_go


3. 集成開發(fā)環(huán)境

雖然市面上有各種各樣的集成開發(fā)環(huán)境,但我喜歡 Jetbrains 旗下的產(chǎn)品,所有的編程語言都有對應(yīng)的集成開發(fā)環(huán)境,而且熟悉了一個(gè),其他的都可以開箱即用。

集成開發(fā)環(huán)境: GoLand

在集成開發(fā)環(huán)境內(nèi)設(shè)置:GOROOT, GOPATH

123.png

4. 工程結(jié)構(gòu)

即 GOPATH 目錄下存在下面三個(gè)文件:

核心是 src 目錄:主要存放第三方包或者自己的源代碼

bin 目錄:主要是編譯生成的二進(jìn)制文件的存放目錄,假如設(shè)置了 GOBIN

pkg 目錄: 編譯、執(zhí)行過程中生成的文件

bin
pkg
src
   github.com
   yourproject

5. 編寫代碼

即 在GOPATH 目錄下新建一個(gè)文件夾:demo-for-golang

bin
pkg
src
    github.com
    demo-for-golang
        first
           one_2018_01_14.go
        main
           main.go
          
# one_2018_01_14.go

package first

import (
    "fmt"
)

func PrintFirst(){
    fmt.Print("這是第一期:環(huán)境搭建。")
}

# main.go
package main

import (
    "demo-for-golang/first"
)

func main(){
    first.PrintFirst()
}

執(zhí)行 go run main.go 即可打?。?這是第一期: 環(huán)境搭建。

從上面的代碼可以看出 Go 語言的代碼的一般結(jié)構(gòu):

  • 包名
  • 導(dǎo)入包:不管是你自己寫的文件還是第三方庫 (其實(shí)就是導(dǎo)入文件夾里的文件)
  • 編寫函數(shù)
  • 程序的入口是主函數(shù):main()

6. 包的組織和管理

下載第三方庫的方法是使用 Go 命令行: go get

比如下載包管理的庫:govendor

go get -u -v github.com/kardianos/govendor

如果你之前的 GOPATH 沒有問題,那么會在GOPATH 的src 目錄下多一個(gè) github.com 的文件夾:下面有這樣一個(gè)文件夾:..\src\github.com\kardianos\govendor 即表示下載 govendor 成功。

正確使用govendor 命令需要將:GOBIN 加入環(huán)境變量中,否則會顯示:bash: govendor: command not found

正確使用govendor 的前提你需要先安裝 git,且你的工程在 src 目錄下:

比如像這樣的結(jié)構(gòu):

bin
pkg
src
   github.com
   demo-for-golang

進(jìn)入 demo-for-golang 目錄下:

  • 執(zhí)行 govendor init
  • 執(zhí)行 govendor add +external

即會在當(dāng)前目錄下多出一個(gè) vendor 目錄,里面有一些自動(dòng)生成的文件夾和文件。

這個(gè)工具的實(shí)質(zhì)是:1. go get 第三方庫,src 目錄下會存放下載下來的庫 2. 項(xiàng)目可以只是使用了其中的一些庫 3. govendor 自動(dòng)將項(xiàng)目中使用到的庫從 src 某目錄(一般是gitHub.com 目錄)下把用到的庫拷貝至你的目錄下的vendor 文件夾下

比如:

程序代碼中使用的 Goconvey 這個(gè)第三方庫

按照上面的步驟,最后的結(jié)果大概這樣。

345.png

總結(jié)

本文大概講述了 Go 語言環(huán)境的搭建,以及工程目錄,和包管理工具。希望能對你有所啟發(fā)。

重點(diǎn)是:

  • 理解 GOPATh
  • 理解 GOBIN
  • 理解 GOROOT

這幾個(gè)變量值得設(shè)置。

以及:

  • Govendor 的使用
  • 基本的 go 代碼和工程的結(jié)構(gòu)

最后再以一張圖表示以后創(chuàng)建項(xiàng)目的整體目錄結(jié)構(gòu):


567.png
  • src 是GOPATH 的路徑
  • github.com 是下載的第三方庫的安裝路徑
  • demo-for-golang 是自己創(chuàng)建的目錄

以后需要?jiǎng)?chuàng)建目錄就是不斷的在 GOPATH src 目錄下創(chuàng)建文件夾

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引言 Go 語言這兩年在語言排行榜上的上升勢頭非常猛,Go 語言雖然是靜態(tài)編譯型語言,但是它卻擁有腳本化的語法,支...
    一縷殤流化隱半邊冰霜閱讀 33,726評論 11 90
  • 1. 分布式系統(tǒng)核心問題 參考書籍:《區(qū)塊鏈原理、設(shè)計(jì)與應(yīng)用》 一致性問題例子:兩個(gè)不同的電影院買同一種電影票,如...
    molscar閱讀 1,001評論 0 0
  • 申金鑫 17101223365 轉(zhuǎn)載自公眾號flysnow_org 【嵌牛導(dǎo)讀】:本文介紹了各種系統(tǒng)下的Go語言環(huán)...
    Felixxin閱讀 3,457評論 0 20
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 本人13年開始北京搖號,2017-10-25搖號時(shí),上天打了個(gè)盹,把我給抓中了 :) 。 石家莊遷出、北京遷入,差...
    Derek_su閱讀 2,281評論 0 0

友情鏈接更多精彩內(nèi)容