![模塊三go語言實戰(zhàn)應(yīng)用27講37丨strings包與字符串操作_第1頁](http://file4.renrendoc.com/view/d6bd078cda645c5ae4d65f386219ee58/d6bd078cda645c5ae4d65f386219ee581.gif)
![模塊三go語言實戰(zhàn)應(yīng)用27講37丨strings包與字符串操作_第2頁](http://file4.renrendoc.com/view/d6bd078cda645c5ae4d65f386219ee58/d6bd078cda645c5ae4d65f386219ee582.gif)
![模塊三go語言實戰(zhàn)應(yīng)用27講37丨strings包與字符串操作_第3頁](http://file4.renrendoc.com/view/d6bd078cda645c5ae4d65f386219ee58/d6bd078cda645c5ae4d65f386219ee583.gif)
![模塊三go語言實戰(zhàn)應(yīng)用27講37丨strings包與字符串操作_第4頁](http://file4.renrendoc.com/view/d6bd078cda645c5ae4d65f386219ee58/d6bd078cda645c5ae4d65f386219ee584.gif)
![模塊三go語言實戰(zhàn)應(yīng)用27講37丨strings包與字符串操作_第5頁](http://file4.renrendoc.com/view/d6bd078cda645c5ae4d65f386219ee58/d6bd078cda645c5ae4d65f386219ee585.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
我們今天主要來說一說標(biāo)準(zhǔn)庫中的srgs代碼包。這個代碼包也用到了不少ncde包ncduf8包中的程序?qū)嶓w。下面這個問題就是針對tisBile類型的。我們今天的問題是:與srg比,tisBile類型的值有哪些優(yōu)勢?先來說說sig類型。我們都知道,在Gotrg類型的值是不可變的。如果我們想獲得一個不一樣的字符串,那么就只能基于原字符串進(jìn)行裁剪、拼接等操作,從而生成一個新的字符串。在底層,一個tig值內(nèi)被一塊的內(nèi)間中時,內(nèi)存的字節(jié)數(shù)量也會被記錄下來,并用于表示該tig值的長度。你可以把這塊內(nèi)存的內(nèi)容看成一個字節(jié)數(shù)組,而相應(yīng)的sigsig值上應(yīng)用切片表達(dá)式,就相當(dāng)于在對其底層的字節(jié)數(shù)組做切片。另外,我們在進(jìn)行字符串拼接的時候,Go更具體地說,一個sigidr值中有一個用于承載內(nèi)容的容器(以下簡稱內(nèi)容容器)。它是一個以ye類型的切片(以下簡稱字節(jié)切片)。由于這樣的字節(jié)切片的底層數(shù)組就是一個字節(jié)數(shù)組,所以我們可以說它與sig容的方式是一樣的。實際上,它們都是通過一個uaePoter正是因為這樣的內(nèi)部構(gòu)造,Bler節(jié)切片本身來說,它包含的任何元素值都可以被修改,但是ulr這就意味著,已存在于ulr值中的內(nèi)容是不可變的。因此,我們可以利用uler值提供的方法拼接的內(nèi)容,而絲毫不用擔(dān)心這些方影響到已存在的內(nèi)容。這里所說的方法指的是,Bier值擁有的一系列指針方法,包括:ieWtBtertRnWiSrng我們可以通過調(diào)用上述方法把新的內(nèi)容拼接到已存在的內(nèi)容的尾部(也就是右邊)必要,uler值會自動地對自身的內(nèi)容容器進(jìn)行擴容。這里的自動擴容策略與切片的擴容策略一致。換句話說,我們在向uleridr值中已存在的內(nèi)容就不會再被拷貝。除了ulr值的自動擴容,我們還可以選擇手動擴容,這通過調(diào)用uder值的Gow方法就可以做到。row方法也可以被稱為擴容方法,它接受一個nt類型的參數(shù)n必要,rw方把其所屬值中內(nèi)容容器的容量增加n字節(jié)更體講它生成一個字節(jié)切片作為新的內(nèi)容容器,該切片的容量會是原容器容量的二倍再加上n。之后,它會把原容器中的所有字節(jié)全部拷貝到新容器中。varbuilder1fmt.Println("Growthebuilderfmt.Printf("Thelengthofcontentsinthebuilderis%d.\n",當(dāng)然,Grow方法還可能什么都不做。這種情況的前提條件是:當(dāng)前的內(nèi)容容器中的未用容量已經(jīng)夠用了,即:未用容量大于或等于n的前提條件是類似的。fmt.Println("Resetthebuilderfmt.Printf("Thethirdoutput(%d):\n%q\n",builder1.Len(),最后,Builder值是可以被重用的。通過調(diào)用它的Reset方法,我們可以讓Builder一旦被重用,ulr被Go語言的回收器標(biāo)記并回收掉。問題我們只要調(diào)用了Bier調(diào)用們,就不以任方式所屬行。否只要何副本上調(diào)用上述方法就都會panic。這種panic會告訴我們,這樣的使用方式是并不合法的,因為這里的Builder值是副本而varbuilder1builder3:=//builder3.Grow(1)//這里會panic_=正是由于已使用的Bler值不能再被,所以肯定不會出現(xiàn)多個uler容器(也就是那個字節(jié)切片)共用一個底層字節(jié)數(shù)組的情況。這樣也就避免了多個同源的idr值在拼接內(nèi)容時可能產(chǎn)生的問題。不過,雖然已使用的uler不再被,它的值卻。無么時,我們都可以通過任何方式這樣的指針值。注意,這樣的指針值指向的都會是同一個idrf2:=func(bp*strings.Builder)(*bp).Grow(1)//這里雖然不會panic,但不是并發(fā)安全的builder4:=//builder4.Grow(1)//這里會panic_=67正因為如此,這里就產(chǎn)生了一個問題,即:如果uler生。這就是我們所說的操作和并發(fā)安全問題。idr值自己是無法解決這些問題的。所以,我們在通過傳遞其指針值共享ulr值Bler值以及它的指針值。我們可以在各處分別一個uler值來使用,也可以先一個uler值,然后在eet方法即可。builder5:=builder5.Grow(1)//這里不會panic總之,關(guān)于ier值的約束是有意義的,也是很有必要的。雖然我們?nèi)匀豢梢酝ㄟ^某些方式共享Bilr的Bler值,不會有任何問題。與srgBider類型恰恰相反,tnsReer類型是為了高效字符串而存在的。后者的高效主要體現(xiàn)在它對字符串的機制上,它封裝了很多用于在tig內(nèi)容的最佳實踐。rns.ae類型的值(以下簡稱Rdr值串中的內(nèi)容。在的過程中,edr值會保存已的字節(jié)的計數(shù)(以下簡稱已讀計此外,這個已讀計數(shù)也是回退和位置設(shè)定時的重要依據(jù)。雖然它屬于Rdr部結(jié)構(gòu),但我們還是可以通過該值的LnSze把它計算出來的。代碼如下:varreader1readingIndex:=reader1.Size()-int64(reader1.Len())//aer值擁有的大部分用于的方法都會及時地更新已讀計數(shù)。比如,Rdyte會在成功后將這個計數(shù)的值加1。,Rdune在功之會把被的所占字節(jié)為計增除此之外,edrek方法也會更新該值的已讀計數(shù)。實際上,這個Sk次的起始索引位置。另外,如果我們把常量oSkurentfst的值來計算新的計數(shù)值。offset2:=expectedIndex:=reader1.Size()-int64(reader1.Len())+fmt.Printf("Seekwithoffset%dandwhence%d...\n",offset2,readingIndex,_:=reader1.Seek(offset2,fmt.Printf("Thereadingindexinreader:%d(returnedbySeek)\n",fmt.Printf("Thereadingindexinreader:%d(computedbyme)\n",綜上所述,edr現(xiàn)高的就在內(nèi)部讀計計數(shù)就代下一次的起始索引位置。它可以很容易地被計算出來。edrek方法可以直接設(shè)定該值中的已讀計數(shù)值。今天,我們主要討論了tis代碼包中的兩個重要類型,即:Bier和eer者用于構(gòu)建字符串,而后者則用于字符串。與rg值相比,lr值的優(yōu)勢主要體現(xiàn)在字符串拼接方面。它可以在保證已存在的內(nèi)容不變的前提下,拼接的內(nèi)容,并且會在拼接的過程中,盡量減少內(nèi)存分配和內(nèi)容拷貝的次數(shù)。不過,這類值在使用上也是有約束的。它在被真正使用之后就不能再被了,否則就會引發(fā)panic。雖然這個約束很嚴(yán)格,但是也可以帶來一定的好處。它可以有效地避免一些操作。雖然我們可以通過一些(比如傳遞它的指針值)繞過個束但是大利的。最好的解決方案就是分別、分開使用、互不。aer值讓我方便一符串內(nèi)容的高要體它對串的機制上。在的過程中,Rar會保已節(jié)的,也讀計。計數(shù)著下次始索置,也是鍵所我們利用Ln方法和Se方法,計算出其中的已讀計數(shù)的值。有了它,我們就可以更加靈活地進(jìn)行字符串了。我只在本文介紹了上述兩個數(shù)據(jù)類型,但并不意味著srgssrgs包還提供了大量的函數(shù)。比如: 今天的思考題是:*rns.idersrn.edeGo 售賣。頁面已增加防盜追蹤,將依法其上一 36|unicode與字符編 5 //Stringreturnstheaccumulatedstring.func(b*Builder)St
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年房屋交易代持策劃協(xié)議書
- 2025年出租車服務(wù)協(xié)議標(biāo)準(zhǔn)
- 2025年特種乳膠制品項目規(guī)劃申請報告范文
- 2025年臨時社區(qū)工作者合作協(xié)議書倡議
- 2025年北京事業(yè)單位勞動合同模板
- 2025年住宅空間策劃設(shè)計合同樣本
- 2025年亞太地區(qū)物流協(xié)作協(xié)議
- 2025年冷庫租賃合同示例
- 2025年完善配送服務(wù)合同模板
- 2025年官方標(biāo)準(zhǔn)延期借款合同協(xié)議書
- 【龍集鎮(zhèn)稻蝦綜合種養(yǎng)面臨的問題及優(yōu)化建議探析(論文)13000字】
- 25 黃帝的傳說 公開課一等獎創(chuàng)新教案
- 人教版音樂三年級下冊第一單元 朝景 教案
- 《師范硬筆書法教程(第2版)》全套教學(xué)課件
- 中國聯(lián)通H248技術(shù)規(guī)范
- 孫權(quán)勸學(xué)省公共課一等獎全國賽課獲獎?wù)n件
- DL-T-692-2018電力行業(yè)緊急救護(hù)技術(shù)規(guī)范
- 精索靜脈曲張臨床路徑表單
- 委外催收機構(gòu)入圍項目投標(biāo)技術(shù)方案(技術(shù)標(biāo))
- 2024年杭州錢塘新區(qū)建設(shè)投資集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 2023年四川省綿陽市中考數(shù)學(xué)試卷
評論
0/150
提交評論