真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言模板語法 go模板函數(shù)

Go語言基礎(chǔ)語法(一)

本文介紹一些Go語言的基礎(chǔ)語法。

泰州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

先來看一個(gè)簡(jiǎn)單的go語言代碼:

go語言的注釋方法:

代碼執(zhí)行結(jié)果:

下面來進(jìn)一步介紹go的基礎(chǔ)語法。

go語言中格式化輸出可以使用 fmt 和 log 這兩個(gè)標(biāo)準(zhǔn)庫,

常用方法:

示例代碼:

執(zhí)行結(jié)果:

更多格式化方法可以訪問中的fmt包。

log包實(shí)現(xiàn)了簡(jiǎn)單的日志服務(wù),也提供了一些格式化輸出的方法。

執(zhí)行結(jié)果:

下面來介紹一下go的數(shù)據(jù)類型

下表列出了go語言的數(shù)據(jù)類型:

int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲(chǔ)的是一個(gè)地址,這個(gè)地址存儲(chǔ)最終的值。

常量是在程序編譯時(shí)就確定下來的值,程序運(yùn)行時(shí)無法改變。

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

Go 語言的運(yùn)算符主要包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符以及指針相關(guān)運(yùn)算符。

算術(shù)運(yùn)算符:

關(guān)系運(yùn)算符:

邏輯運(yùn)算符:

位運(yùn)算符:

賦值運(yùn)算符:

指針相關(guān)運(yùn)算符:

下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯(lián)用,這里不做介紹。

if語法格式如下:

if ... else :

else if:

示例代碼:

語法格式:

另外,添加 fallthrough 會(huì)強(qiáng)制執(zhí)行后面的 case 語句,不管下一條case語句是否為true。

示例代碼:

執(zhí)行結(jié)果:

下面介紹幾種循環(huán)語句:

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

也可以通過標(biāo)記退出循環(huán):

--THE END--

go語言語法(基礎(chǔ)語法篇)

import "workname/packetfolder"

導(dǎo)入多個(gè)包

方法調(diào)用 包名.函數(shù)//不是函數(shù)或結(jié)構(gòu)體所處文件或文件夾名

packagename.Func()

前面加個(gè)點(diǎn)表示省略調(diào)用,那么調(diào)用該模塊里面的函數(shù),可以不用寫模塊名稱了:

當(dāng)導(dǎo)入一個(gè)包時(shí),該包下的文件里所有init()函數(shù)都會(huì)被執(zhí)行,然而,有些時(shí)候我們并不需要把整個(gè)包都導(dǎo)入進(jìn)來,僅僅是是希望它執(zhí)行init()函數(shù)而已。下劃線的作用僅僅是為了調(diào)用init()函數(shù),所以無法通過包名來調(diào)用包中的其他函數(shù)

import _ package

變量聲明必須要使用否則會(huì)報(bào)錯(cuò)。

全局變量運(yùn)行聲明但不使用。

func 函數(shù)名 (參數(shù)1,參數(shù)2,...) (返回值a 類型a, 返回值b 類型b,...)

func 函數(shù)名 (參數(shù)1,參數(shù)2,...) (返回值類型1, 返回值類型2,...)

func (this *結(jié)構(gòu)體名) 函數(shù)名(參數(shù) string) (返回值類型1, 返回值類型2){}

使用大小來區(qū)分函數(shù)可見性

大寫是public類型

小寫是private類型

func prifunc int{}

func pubfunc int{}

聲明靜態(tài)變量

const value int

定義變量

var value int

聲明一般類型、接口和結(jié)構(gòu)體

聲明函數(shù)

func function () int{}

go里面所有的空值對(duì)應(yīng)如下

通道類型

內(nèi)建函數(shù) new 用來分配內(nèi)存,它的第一個(gè)參數(shù)是一個(gè)類型,不是一個(gè)值,它的返回值是一個(gè)指向新分配類型零值的指針

func new(Type) *Type

[這位博主有非常詳細(xì)的分析]

Go 語言支持并發(fā),我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。

goroutine 是輕量級(jí)線程,goroutine 的調(diào)度是由 Golang 運(yùn)行時(shí)進(jìn)行管理的。

同一個(gè)程序中的所有 goroutine 共享同一個(gè)地址空間。

語法格式如下:

通道(channel)是用來傳遞數(shù)據(jù)的一個(gè)數(shù)據(jù)結(jié)構(gòu)。

通道的聲明

通道可用于兩個(gè) goroutine 之間通過傳遞一個(gè)指定類型的值來同步運(yùn)行和通訊。操作符 - 用于指定通道的方向,發(fā)送或接收。如果未指定方向,則為雙向通道。

[這里有比較詳細(xì)的用例]

go里面的空接口可以指代任何類型(無論是變量還是函數(shù))

聲明空接口

go里面的的強(qiáng)制類型轉(zhuǎn)換語法為:

int(data)

如果是接口類型的強(qiáng)制轉(zhuǎn)成其他類型的語法為:

go里面的強(qiáng)制轉(zhuǎn)換是將值復(fù)制過去,所以在數(shù)據(jù)量的時(shí)候有比較高的運(yùn)行代價(jià)

講講go語言的結(jié)構(gòu)體

作為C語言家族的一員,go和c一樣也支持結(jié)構(gòu)體。可以類比于java的一個(gè)POJO。

在學(xué)習(xí)定義結(jié)構(gòu)體之前,先學(xué)習(xí)下定義一個(gè)新類型。

新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。

這里要引入一個(gè)底層類型的概念。

如果一個(gè)新類型是基于某個(gè) Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型

在上面的例子中,int就是T1的底層類型。

但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int

底層類型是很重要的,因?yàn)閷?duì)兩個(gè)變量進(jìn)行顯式的類型轉(zhuǎn)換,只有底層類型相同的變量間才能相互轉(zhuǎn)換。底層類型是判斷兩個(gè)類型本質(zhì)上是否相同的根本。

這種類型定義方式通常用在 項(xiàng)目的漸進(jìn)式重構(gòu),還有對(duì)已有包的二次封裝方面

類型別名表示新類型和原類型完全等價(jià),實(shí)際上就是同一種類型。只不過名字不同而已。

一般我們都是定義一個(gè)有名的結(jié)構(gòu)體。

字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。

還有一個(gè)點(diǎn)提一下

如果換行來寫

Age: 66,后面這個(gè)都好不能省略

還有一個(gè)點(diǎn),觀察e3的賦值

new返回的是一個(gè)指針。然后指針可以直接點(diǎn)號(hào)賦值。這說明go默認(rèn)進(jìn)行了取值操作

e3.Age 等價(jià)于 (*e3).Age

如上定義了一個(gè)空的結(jié)構(gòu)體Empty。打印了元素e的內(nèi)存大小是0。

有什么用呢?

基于空結(jié)構(gòu)體類型內(nèi)存零開銷這樣的特性,我們?cè)谌粘?Go 開發(fā)中會(huì)經(jīng)常使用空 結(jié)構(gòu)體類型元素,作為一種“事件”信息進(jìn)行 Goroutine 之間的通信

這種以空結(jié)構(gòu)體為元素類建立的 channel,是目前能實(shí)現(xiàn)的、內(nèi)存占用最小的 Goroutine 間通信方式。

這種形式需要說的是幾個(gè)語法糖。

語法糖1:

對(duì)于結(jié)構(gòu)體字段,可以省略字段名,只寫結(jié)構(gòu)體名。默認(rèn)字段名就是結(jié)構(gòu)體名

這種方式稱為 嵌入字段

語法糖2:

如果是以嵌入字段形式寫的結(jié)構(gòu)體

可以省略嵌入的Reader字段,而直接訪問ReaderName

此時(shí)book是一個(gè)各個(gè)屬性全是對(duì)應(yīng)類型零值的一個(gè)實(shí)例。不是nil。這種情況在Go中稱為零值可用。不像java會(huì)導(dǎo)致npe

結(jié)構(gòu)體定義時(shí)可以在字段后面追加標(biāo)簽說明。

tag的格式為反單引號(hào)

tag的作用是可以使用[反射]來檢視字段的標(biāo)簽信息。

具體的作用還要看使用的場(chǎng)景。

比如這里的tag是為了幫助 encoding/json 標(biāo)準(zhǔn)包在解析對(duì)象時(shí)可以利用的規(guī)則。比如omitempty表示該字段沒有值就不打印出來。

Go語言”奇怪用法“有哪些

1,go的變量聲明順序是:”先寫變量名,再寫類型名“,此與C/C++的語法孰優(yōu)孰劣,可見下文解釋:

2,go是通過package來組織的(與python類似),只有package名為main的包可以包含main函數(shù),一個(gè)可執(zhí)行程序有且僅有一個(gè)main包,通過import關(guān)鍵字來導(dǎo)入其他非main包。

3,可見性規(guī)則。go語言中,使用大小寫來決定該常量、變量、類型、接口、結(jié)構(gòu)或函數(shù)是否可以被外部包含調(diào)用。根據(jù)約定,函數(shù)名首字母小寫即為private,函數(shù)名首字母大寫即為public。

4,go內(nèi)置關(guān)鍵字(25個(gè)均為小寫)。

5,函數(shù)不用先聲明,即可使用。

6,在函數(shù)內(nèi)部可以通過 := 隱士定義變量。(函數(shù)外必須顯示使用var定義變量)

7,go程序使用UTF-8編碼的純Unicode文本編寫。

8,使用big.Int的陷阱:

9,從技術(shù)層面講,go語言的語句是以分號(hào)分隔的,但這些是由編譯器自動(dòng)添加的,不用手動(dòng)輸入,除非需要在同一行中寫入多個(gè)語句。沒有分號(hào)及只需少量的逗號(hào)和圓括號(hào),使得go語言的程序更容易閱讀。

10,go語言只有一個(gè)循環(huán)結(jié)構(gòu)——for循環(huán)。

11,go里的自增運(yùn)算符只有——“后++”

12,go語言中的slice用法類似python中數(shù)組,關(guān)于slice的詳細(xì)用法可見:

13,函數(shù)也是一個(gè)值,使用匿名函數(shù)返回一個(gè)值。

14,函數(shù)閉包的使用,閉包是一個(gè)匿名函數(shù)值,會(huì)引用到其外部的變量。

Go語言和其他語言的不同之基本語法

Go語言作為出現(xiàn)比較晚的一門編程語言,在其原生支持高并發(fā)、云原生等領(lǐng)域的優(yōu)秀表現(xiàn),像目前比較流行的容器編排技術(shù)Kubernetes、容器技術(shù)Docker都是用Go語言寫的,像Java等其他面向?qū)ο蟮恼Z言,雖然也能做云原生相關(guān)的開發(fā),但是支持的程度遠(yuǎn)沒有Go語言高,憑借其語言特性和簡(jiǎn)單的編程方式,彌補(bǔ)了其他編程語言一定程度上的不足,一度成為一個(gè)熱門的編程語言。

最近在學(xué)習(xí)Go語言,我之前使用過C#、Java等面向?qū)ο缶幊痰恼Z言,發(fā)現(xiàn)其中有很多的編程方式和其他語言有區(qū)別的地方,好記性不如爛筆頭,總結(jié)一下,和其他語言做個(gè)對(duì)比。這里只總結(jié)差異的地方,具體的語法不做詳細(xì)的介紹。

種一棵樹最好的時(shí)間是十年前,其次是現(xiàn)在。

3)變量初始化時(shí)候可以和其他語言一樣直接在變量后面加等號(hào),等號(hào)后面為要初始化的值,也可以使用變量名:=變量值的簡(jiǎn)單方式

3)變量賦值 Go語言的變量賦值和多數(shù)語言一致,但是Go語言提供了多重賦值的功能,比如下面這個(gè)交換i、j變量的語句:

在不支持多重賦值的語言中,交換兩個(gè)變量的值需要引入一個(gè)中間變量:

4)匿名變量

在使用其他語言時(shí),有時(shí)候要獲取一個(gè)值,卻因?yàn)樵摵瘮?shù)返回多個(gè)值而不得不定義很多沒有的變量,Go語言可以借助多重返回值和匿名變量來避免這種寫法,使代碼看起來更優(yōu)雅。

假如GetName()函數(shù)返回3個(gè)值,分別是firstName,lastName和nickName

若指向獲得nickName,則函數(shù)調(diào)用可以這樣寫

這種寫法可以讓代碼更清晰,從而大幅降低溝通的復(fù)雜度和維護(hù)的難度。

1)基本常量

常量使用關(guān)鍵字const 定義,可以限定常量類型,但不是必須的,如果沒有定義常量的類型,是無類型常量

2)預(yù)定義常量

Go語言預(yù)定義了這些常量 true、false和iota

iota比較特殊,可以被任務(wù)是一個(gè)可被編譯器修改的常量,在每個(gè)const關(guān)鍵字出現(xiàn)時(shí)被重置為0,然后在下一個(gè)const出現(xiàn)之前每出現(xiàn)一個(gè)iota,其所代表的數(shù)字會(huì)自動(dòng)加1.

3)枚舉

1)int 和int32在Go語言中被認(rèn)為是兩種不同類型的類型

2)Go語言定義了兩個(gè)浮點(diǎn)型float32和float64,其中前者等價(jià)于C語言的float類型,后者等價(jià)于C語言的double類型

3)go語言支持復(fù)數(shù)類型

復(fù)數(shù)實(shí)際上是由兩個(gè)實(shí)數(shù)(在計(jì)算機(jī)中使用浮點(diǎn)數(shù)表示)構(gòu)成,一個(gè)表示實(shí)部(real)、一個(gè)表示虛部(imag)。也就是數(shù)學(xué)上的那個(gè)復(fù)數(shù)

復(fù)數(shù)的表示

實(shí)部與虛部

對(duì)于一個(gè)復(fù)數(shù)z=complex(x,y),就可以通過Go語言內(nèi)置函數(shù)real(z)獲得該復(fù)數(shù)的實(shí)部,也就是x,通過imag(z)獲得該復(fù)數(shù)的虛部,也就是y

4)數(shù)組(值類型,長(zhǎng)度在定義后無法再次修改,每次傳遞都將產(chǎn)生一個(gè)副本。)

5)數(shù)組切片(slice)

數(shù)組切片(slice)彌補(bǔ)了數(shù)組的不足,其數(shù)據(jù)結(jié)構(gòu)可以抽象為以下三個(gè)變量:

6)Map 在go語言中Map不需要引入任何庫,使用很方便

Go循環(huán)語句只支持for關(guān)鍵字,不支持while和do-while

goto語句的語義非常簡(jiǎn)單,就是跳轉(zhuǎn)到本函數(shù)內(nèi)的某個(gè)標(biāo)簽

今天就介紹到這里,以后我會(huì)在總結(jié)Go語言在其他方面比如并發(fā)編程、面向?qū)ο蟆⒕W(wǎng)絡(luò)編程等方面的不同及使用方法。希望對(duì)大家有所幫助。


名稱欄目:go語言模板語法 go模板函數(shù)
網(wǎng)站地址:http://weahome.cn/article/hggjdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部