Go語言核心編程(臨時發(fā)布版)

? ? ? ? ? ? ? ?Go語言核心編程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?原創(chuàng)者:文思? ?

?? ? ? ? ? ? ?

一、認識Go語言

1、Go簡介及應(yīng)用場景

Go語言,我們可以簡單的寫成Golang,是Google公司創(chuàng)造和主推的。

Go可以做什么?區(qū)塊鏈開發(fā)、Go服務(wù)端開發(fā)、Golang分布式/云計算

Go的優(yōu)勢:處理大并發(fā)、處理數(shù)據(jù)、計算能力

Go目前的應(yīng)用領(lǐng)域:區(qū)塊鏈應(yīng)用、后端服務(wù)應(yīng)用支撐(排序、推薦、搜索、按條件分流等)、云計算/云服務(wù)(盛大云計算:CND調(diào)度|分發(fā)系統(tǒng)|監(jiān)控系統(tǒng)|短域名服務(wù)、京東消息推送云服務(wù)及京東分布式文件系統(tǒng)后端全部用go實現(xiàn))

2、Golang的學習方法

高效;先建立整體框架,然后細節(jié);先know how再know why;多琢磨別人怎么做;總結(jié)學習經(jīng)驗;后期注重技術(shù)基礎(chǔ)及細節(jié)原理的認識

Go語言的吉祥物,金花鼠

3、Go語言小故事

為何要創(chuàng)造Go語言?

發(fā)展歷程:

2007年原型

2009年開源發(fā)布

2015年1.5版本中移除了最后的殘余的C代碼

2017年2月17日1.8版本

2017年8月24日1.9版本,1.9.2版本

2018年2月16日1.10版本

4、Go語言特點:

(1)? Go=C+Python,兼顧運行速度與動態(tài)語言的快速開發(fā)。繼承了C的理念,保留了C的編譯執(zhí)行方式,但弱化了指針。

(2) 引入包的概念,用于組織程序結(jié)構(gòu),Go語言的每一個文件都要屬于一個包,而不能單獨存在。

(3) 垃圾回收機制。內(nèi)存自動回收,不需要開發(fā)人員管理

(4)? 天然并發(fā)(重要特點):從語言層面支持并發(fā),實現(xiàn)簡單;goroutine輕量級線程,可實現(xiàn)大并處理,高效利用多核;基于CPS并發(fā)模型實現(xiàn)。

(5)? 吸收了管道通信機制,形成了Go語言特有的管道Channel,通過管道可以實現(xiàn)不同goroute之間的通信。

(6) 函數(shù)可以返回多個值,且go語句后面不需要寫分號(編譯器會自動加分號)

(7) 新的創(chuàng)新:比如切片slice、延時執(zhí)行defer等。

5、Go語言的開發(fā)工具

1、visual? studio?code (VSCode)運行于主流操作系統(tǒng)智商,默認提供Go語言語法高亮,安裝Go語言插件后可以智能提示、編譯運行。

2、Sublime Text可免費試用默認也支持Go語法,但一定次數(shù)后提示是否購買。

3、Vim 是從vi發(fā)展出來的,代碼補全、編譯、錯誤跳轉(zhuǎn)等方便編程的功能豐富。

4、Emacs 傳說中的神器,不僅是一個編輯器,可稱為一個集成運行環(huán)境。

5、Eclipse

6、LiteIDE 中國人開發(fā)專門Go語言開發(fā)

7、JetBrains公司的產(chǎn)品,付費,需要安裝Go語言

建議學習時使用VSCode或vim。一定階段后工作使用時用Eclipsse等自動化較強的開發(fā)工具。

二、開發(fā)實戰(zhàn)

創(chuàng)建一個文件夾gocode,類似java的workspace

package main//歸屬到main包下

import "fmt"http://引入fmt包

func main(){

????fmt.Println("hello")//輸出hello

}

1、安裝開發(fā)環(huán)境、sdk

https://www.golangtc.com/download下載sdk然后解壓即可:

配置環(huán)境變量:

GOROOT 指定sdk的安裝路徑

Path 添加sdk的/bin目錄

GOPATH 工作目錄,以后go項目存放的路徑

例如:

2、快速入門

go程序的目錄結(jié)構(gòu)

d:/goproject

??|--src

??????|--go code

????????????????????????? |--project1(項目)

開始hello,world

通過go build命令進行編譯源文件:go build? heelo.go

運行hello.exe文件即可:hello.ext

也可以用go? run編譯后直接執(zhí)行,go run hello.go:

大家注意,go和java在編譯時不同的一點是,go可以指定編譯后的文件名稱。比如:

執(zhí)行流程:

先編譯再執(zhí)行:類似java,編譯后的exe相當于java的class

使用go? run直接編譯執(zhí)行:底層也是先編譯再執(zhí)行。

先編譯再執(zhí)行的好處就是可以把exe拷貝到?jīng)]有g(shù)o的安裝環(huán)境下執(zhí)行

編譯后的exe文件會將依賴的庫也編譯進來,所以exe會比go文件大很多。

注意事項:?????

Go應(yīng)用程序的執(zhí)行入口是main函數(shù)(和java一樣)。

Go語言嚴格區(qū)分大小寫。

Go方法由一條一條語句構(gòu)成,語句后不需要加分號。

Go語言一條一條編譯,不能把多條語句寫在統(tǒng)一行。

Go語言定義的變量或者import引入的包引入后沒有被使用,代碼不能編譯通過(和java不同)。

大括號成對出現(xiàn),缺一不可。

3、轉(zhuǎn)義字符及注釋、規(guī)范的編碼風格

\t?? 制表位

\n?? 換行符

\\?? 一個\

\”?? 一個”

\r?? 一個回車


1)行注釋://

2)塊注釋:/**/

編碼風格:官方推薦用行注釋來注釋方法和語句。

正確的縮進和空白,可以使用鍵盤進行縮進,也能使用gofmt命令來進行格式化(gofmt –w main.go該指令將格式化后的內(nèi)容重新寫入到文件)。

運算符兩邊習慣性各加一個空格。比如:2 + 3

一行盡量不要超過80個字符,如果超長建議使用換行符

左側(cè)大括號要寫在函數(shù)同一行,比如:

func main{

}

4、官方編程指南和標準庫API

https://golang.org/#

點擊tour選擇中文,可以看中文版

Golang的中文網(wǎng)站https://studygolang.com/

對應(yīng)api一般都可以在源碼下找到

5、變量

Golang的變量是有數(shù)據(jù)類型的。

1定義變量? 2聲明變量? 3使用變量

var?i?int

i = 10

變量使用的三種方式:

1指定變量類型,聲明后若不賦值,使用默認值

2根據(jù)值自行判斷變量類型

3省略var,變量名 := 變量值???????

使用變量及一次性聲明多個變量,示例:

packagemain

import "fmt"

func main(){

????var i int

????fmt.Println(i)

????var t = 100

????fmt.Println(t)

????a := 1000

????fmt.Println(a)

//以下是一次性聲明多個變量的三種方式

????var n1,n2,n3 int

????fmt.Println(n1,",",n2,",",n3)

????var m1,m2,m3 = 10000,"tom",20000

????fmt.Println(m1,",",m2,",",m3)

????a1,a2,a3 := 100000,"jack",300000

????fmt.Println(a1,",",a2,",",a3)

}

運行輸出:

0

100

1000

0, 0 , 0

10000, tom , 20000

100000, jack , 300000

全局變量:在函數(shù)外部定義的變量就是全局變量。也可以分開創(chuàng)建聲明和使用,也可以一次性聲明,示例:

import "fmt"

var n1 = 1

var n2 = 2

var n3 = 3

//以下是一次性聲明多個全局變量

var(

????m1 = 11

????m2 = 22

????m3 = 33

)

func main(){

????fmt.Println(n1,",",n2,",",n3)

????fmt.Println(m1,",",m2,",",m3)

}

運行輸出:

1, 2 , 3

11, 22 , 33

局部變量有默認的值,全局變量沒有默認值。(這點和java相反)

看到全局變量沒有初始化賦值報錯了。? ? ??

6、數(shù)據(jù)類型

6.1基本數(shù)據(jù)類型

整數(shù)類型:int(有符號),int8,int16,int32,int64,uint(無符號),uint8,uint16,uint32,uint64,byte,

rune(等價于int32用于unicode碼)

浮點型:float32,float64

字符型:沒有專門的字符型,使用byte來保存單個字母字符

布爾型:bool

字符串:string(golang將string歸屬為基本數(shù)據(jù)類型,這和java不同)

6.2派生/復(fù)雜數(shù)據(jù)類型

指針,數(shù)組,結(jié)構(gòu)體,管道,函數(shù),切片,接口,map

6.3整數(shù)類型詳解:

int8 有符號,占用1字節(jié),表數(shù)范圍-128 -

127

int16有符號,占用2字節(jié),表數(shù)范圍-2(15次方) - 2(15次方)-1

int32有符號,占用4字節(jié),表數(shù)范圍-2(31次方) - 2(31次方)-1

int64有符號,占用8字節(jié),表數(shù)范圍-2(63次方) - 2(63次方)-1

其具體的大小和系統(tǒng)有關(guān)。

6.4變量使用細節(jié)

Golang默認的整數(shù)類型為int類型,Golang程序中整型變量在使用時遵守“保小不保大”的原則,即:在保證程序正確運行下,盡量使用占用空間小的數(shù)據(jù)類型。

bit是計算機中最小的存儲單位,byte是計算機中最基本的存儲單元。1byte = 8 bit

當我們var t =

100使用程序自行判斷變量類型時,我們怎么知道變量的類型和字節(jié)大小呢,可以用fmt的Printf輸出:

packagemain

import "fmt"

import "unsafe"

func main(){

??? var t? =100 //t是什么類型

??? //fmt.Println()可以用作格式化輸出

???fmt.Printf("t的類型 %T",t)

???fmt.Printf("\n")

???fmt.Printf("t占用的字節(jié) %d",unsafe.Sizeof(t))

}

挨個import太麻煩,也不專業(yè),可以一次性集中引入,真正開發(fā)中的寫法都是import集中引入:

packagemain

import(

??? "fmt"

??? "unsafe"

)

func main(){

??? var t? =100 //t是什么類型

??? //fmt.Println()可以用作格式化輸出

???fmt.Printf("t的類型 %T",t)

???fmt.Printf("\n")

???fmt.Printf("t占用的字節(jié) %d",unsafe.Sizeof(t))

}

運行程序顯示:

t的類型 int

t占用的字節(jié) 8

未完,待續(xù)......

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

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

  • Go語言數(shù)據(jù)類型 Go語言本質(zhì)是用C語言編寫的一套高級開發(fā)語言, 所以Go語言中的數(shù)據(jù)類型大部分都是由C語言演變而...
    極客江南閱讀 992評論 0 6
  • Golang是我最喜歡的一門語言,它簡潔、高效、易學習、開發(fā)效率高、還可以編譯成機器碼… 雖然它一出世,就飽受關(guān)注...
    盤木閱讀 3,703評論 0 7
  • fmt格式化字符串 格式:%[旗標][寬度][.精度][arg索引]動詞旗標有以下幾種:+: 對于數(shù)值類型總是輸出...
    皮皮v閱讀 1,223評論 0 3
  • 孫悟空有一個不平凡的成長過程,從美猴王到弼馬瘟再到齊天大圣、孫行者,經(jīng)歷了種種磨難,最后成為了斗戰(zhàn)勝佛。 在孫...
    llllllHllllll閱讀 432評論 0 1
  • 第二十七章 郭國柱家的廚房就緊挨著帶有土炕的房間。說是廚房,實際上就是一個自己搭建的簡陋的油氈頂棚房,橫豎跨,各一...
    姜蘇閱讀 374評論 0 0

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