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

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

go語言嵌套循環(huán) go接口

go語言循環(huán)隊列的實現(xiàn)

隊列的概念在 順序隊列 中,而使用循環(huán)隊列的目的主要是規(guī)避假溢出造成的空間浪費,在使用循環(huán)隊列處理假溢出時,主要有三種解決方案

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),橋西企業(yè)網(wǎng)站建設(shè),橋西品牌網(wǎng)站建設(shè),網(wǎng)站定制,橋西網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,橋西網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

本文提供后兩種解決方案。

順序隊和循環(huán)隊列是一種特殊的線性表,與順序棧類似,都是使用一組地址連續(xù)的存儲單元依次存放自隊頭到隊尾的數(shù)據(jù)元素,同時附設(shè)隊頭(front)和隊尾(rear)兩個指針,但我們要明白一點,這個指針并不是指針變量,而是用來表示數(shù)組當(dāng)中元素下標(biāo)的位置。

本文使用切片來完成的循環(huán)隊列,由于一開始使用三個參數(shù)的make關(guān)鍵字創(chuàng)建切片,在輸出的結(jié)果中不包含nil值(看起來很舒服),而且在驗證的過程中發(fā)現(xiàn)使用append()函數(shù)時切片內(nèi)置的cap會發(fā)生變化,在消除了種種障礙后得到了一個四不像的循環(huán)隊列,即設(shè)置的指針是順序隊列的指針,但實際上進(jìn)行的操作是順序隊列的操作。最后是對make()函數(shù)和append()函數(shù)的一些使用體驗和小結(jié),隊列的應(yīng)用放在鏈隊好了。

官方描述(片段)

即切片是一個抽象層,底層是對數(shù)組的引用。

當(dāng)我們使用

構(gòu)建出來的切片的每個位置的值都被賦為interface類型的初始值nil,但是nil值也是有大小的。

而使用

來進(jìn)行初始化時,雖然生成的切片中不包含nil值,但是無法通過設(shè)置的指針變量來完成入隊和出隊的操作,只能使用append()函數(shù)來進(jìn)行操作

在go語言中,切片是一片連續(xù)的內(nèi)存空間加上長度與容量的標(biāo)識,比數(shù)組更為常用。使用 append 關(guān)鍵字向切片中追加元素也是常見的切片操作

正是基于此,在使用go語言完成循環(huán)隊列時,首先想到的就是使用make(type, len, cap)關(guān)鍵字方式完成切片初始化,然后使用append()函數(shù)來操作該切片,但這一方式出現(xiàn)了很多問題。在使用append()函數(shù)時,切片的cap可能會發(fā)生變化,用不好就會發(fā)生擴(kuò)容或收縮。最終造成的結(jié)果是一個四不像的結(jié)果,入隊和出隊操作變得與指針變量無關(guān),失去了作為循環(huán)隊列的意義,用在順序隊列還算合適。

參考博客:

Go語言中的Nil

Golang之nil

Go 語言設(shè)計與實現(xiàn)

Go語言之結(jié)構(gòu)體嵌套

在type Student2 struct結(jié)構(gòu)體中,注意book參數(shù)引用的是地址,方便修改數(shù)據(jù)

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

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

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

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

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

一個簡單的示例:

輸出為:

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

返回:通過用 return 來進(jìn)行返回

輸出為:

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

對例子的說明:

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

引用傳遞:相當(dāng)于按指針傳遞,可以同時改變原來的值,并且消耗的內(nèi)存會更少,只有4或8個字節(jié)的消耗

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

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

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

輸出為:

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

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

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

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

輸出為

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

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

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


當(dāng)前題目:go語言嵌套循環(huán) go接口
當(dāng)前地址:http://weahome.cn/article/doejsjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部