go語(yǔ)言重點(diǎn) go語(yǔ)言基礎(chǔ)語(yǔ)法

GO語(yǔ)言學(xué)習(xí)系列八——GO函數(shù)(func)的聲明與使用

GO是編譯性語(yǔ)言,所以函數(shù)的順序是無(wú)關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫(xiě)在最前面,其余函數(shù)按照功能需要進(jìn)行排列

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的深澤網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

GO的函數(shù) 不支持嵌套,重載和默認(rèn)參數(shù)

GO的函數(shù) 支持 無(wú)需聲明變量,可變長(zhǎng)度,多返回值,匿名,閉包等

GO的函數(shù)用 func 來(lái)聲明,且左大括號(hào) { 不能另起一行

一個(gè)簡(jiǎn)單的示例:

輸出為:

參數(shù):可以傳0個(gè)或多個(gè)值來(lái)供自己用

返回:通過(guò)用 return 來(lái)進(jìn)行返回

輸出為:

上面就是一個(gè)典型的多參數(shù)傳遞與多返回值

對(duì)例子的說(shuō)明:

按值傳遞:是對(duì)某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值

引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變?cè)瓉?lái)的值,并且消耗的內(nèi)存會(huì)更少,只有4或8個(gè)字節(jié)的消耗

在上例中,返回值 (d int, e int, f int) { 是進(jìn)行了命名,如果不想命名可以寫(xiě)成 (int,int,int){ ,返回的結(jié)果都是一樣的,但要注意:

當(dāng)返回了多個(gè)值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用 _ 來(lái)補(bǔ)位,例如上例的返回我們可以寫(xiě)成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來(lái)舍棄掉

在參數(shù)后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個(gè)可變長(zhǎng)度的參數(shù)

輸出為:

在上例中, strs ...string 中, strs 的實(shí)際值是b,c,d,e,這就是一個(gè)最簡(jiǎn)單的傳遞可變長(zhǎng)度的參數(shù)的例子,更多一些演變的形式,都非常類似

在GO中 defer 關(guān)鍵字非常重要,相當(dāng)于面相對(duì)像中的析構(gòu)函數(shù),也就是在某個(gè)函數(shù)執(zhí)行完成后,GO會(huì)自動(dòng)這個(gè);

如果在多層循環(huán)中函數(shù)里,都定義了 defer ,那么它的執(zhí)行順序是先進(jìn)后出;

當(dāng)某個(gè)函數(shù)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí), defer 也會(huì)被調(diào)用

輸出為

這是一個(gè)最簡(jiǎn)單的測(cè)試了,當(dāng)然還有更復(fù)雜的調(diào)用,比如調(diào)試程序時(shí),判斷是哪個(gè)函數(shù)出了問(wèn)題,完全可以根據(jù) defer 打印出來(lái)的內(nèi)容來(lái)進(jìn)行判斷,非常快速,這種留給你們?nèi)?shí)現(xiàn)

一個(gè)函數(shù)在函數(shù)體內(nèi)自己調(diào)用自己我們稱之為遞歸函數(shù),在做遞歸調(diào)用時(shí),經(jīng)常會(huì)將內(nèi)存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調(diào)用

本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct

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

import "workname/packetfolder"

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

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

packagename.Func()

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

當(dāng)導(dǎo)入一個(gè)包時(shí),該包下的文件里所有init()函數(shù)都會(huì)被執(zhí)行,然而,有些時(shí)候我們并不需要把整個(gè)包都導(dǎo)入進(jìn)來(lái),僅僅是是希望它執(zhí)行init()函數(shù)而已。下劃線的作用僅僅是為了調(diào)用init()函數(shù),所以無(wú)法通過(guò)包名來(lái)調(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){}

使用大小來(lái)區(qū)分函數(shù)可見(jiàn)性

大寫(xiě)是public類型

小寫(xiě)是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 用來(lái)分配內(nèi)存,它的第一個(gè)參數(shù)是一個(gè)類型,不是一個(gè)值,它的返回值是一個(gè)指向新分配類型零值的指針

func new(Type) *Type

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

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

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

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

語(yǔ)法格式如下:

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

通道的聲明

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

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

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

聲明空接口

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

int(data)

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

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

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

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

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

go語(yǔ)言的注釋方法:

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

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

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

常用方法:

示例代碼:

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

更多格式化方法可以訪問(wèn)中的fmt包。

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

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

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

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

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

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

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

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

Go 語(yǔ)言的運(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語(yǔ)言中的if語(yǔ)句和switch語(yǔ)句。另外還有一種控制語(yǔ)句叫select語(yǔ)句,通常與通道聯(lián)用,這里不做介紹。

if語(yǔ)法格式如下:

if ... else :

else if:

示例代碼:

語(yǔ)法格式:

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

示例代碼:

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

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

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

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

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

--THE END--

當(dāng)前名稱:go語(yǔ)言重點(diǎn) go語(yǔ)言基礎(chǔ)語(yǔ)法
本文地址:http://muchs.cn/article0/hjdsio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站微信小程序、品牌網(wǎng)站建設(shè)、搜索引擎優(yōu)化網(wǎng)站改版、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名