因為char *strings[]不是指針而是指針數(shù)組,那么
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了天門免費建站歡迎大家使用!
temp = strings[top];
strings[top] = strings[seek];
strings[seek] = temp;
這種交換交換的就是主調(diào)函數(shù)中的數(shù)組中的指針,把指向字符串的指針順序改變了,當(dāng)然按次序輸出就達(dá)到排序目的了……
作為C語言家族的一員,go和c一樣也支持結(jié)構(gòu)體。可以類比于java的一個POJO。
在學(xué)習(xí)定義結(jié)構(gòu)體之前,先學(xué)習(xí)下定義一個新類型。
新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。
這里要引入一個底層類型的概念。
如果一個新類型是基于某個 Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型
在上面的例子中,int就是T1的底層類型。
但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int
底層類型是很重要的,因為對兩個變量進(jìn)行顯式的類型轉(zhuǎn)換,只有底層類型相同的變量間才能相互轉(zhuǎn)換。底層類型是判斷兩個類型本質(zhì)上是否相同的根本。
這種類型定義方式通常用在 項目的漸進(jìn)式重構(gòu),還有對已有包的二次封裝方面
類型別名表示新類型和原類型完全等價,實際上就是同一種類型。只不過名字不同而已。
一般我們都是定義一個有名的結(jié)構(gòu)體。
字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。
還有一個點提一下
如果換行來寫
Age: 66,后面這個都好不能省略
還有一個點,觀察e3的賦值
new返回的是一個指針。然后指針可以直接點號賦值。這說明go默認(rèn)進(jìn)行了取值操作
e3.Age 等價于 (*e3).Age
如上定義了一個空的結(jié)構(gòu)體Empty。打印了元素e的內(nèi)存大小是0。
有什么用呢?
基于空結(jié)構(gòu)體類型內(nèi)存零開銷這樣的特性,我們在日常 Go 開發(fā)中會經(jīng)常使用空 結(jié)構(gòu)體類型元素,作為一種“事件”信息進(jìn)行 Goroutine 之間的通信
這種以空結(jié)構(gòu)體為元素類建立的 channel,是目前能實現(xiàn)的、內(nèi)存占用最小的 Goroutine 間通信方式。
這種形式需要說的是幾個語法糖。
語法糖1:
對于結(jié)構(gòu)體字段,可以省略字段名,只寫結(jié)構(gòu)體名。默認(rèn)字段名就是結(jié)構(gòu)體名
這種方式稱為 嵌入字段
語法糖2:
如果是以嵌入字段形式寫的結(jié)構(gòu)體
可以省略嵌入的Reader字段,而直接訪問ReaderName
此時book是一個各個屬性全是對應(yīng)類型零值的一個實例。不是nil。這種情況在Go中稱為零值可用。不像java會導(dǎo)致npe
結(jié)構(gòu)體定義時可以在字段后面追加標(biāo)簽說明。
tag的格式為反單引號
tag的作用是可以使用[反射]來檢視字段的標(biāo)簽信息。
具體的作用還要看使用的場景。
比如這里的tag是為了幫助 encoding/json 標(biāo)準(zhǔn)包在解析對象時可以利用的規(guī)則。比如omitempty表示該字段沒有值就不打印出來。
Go語言標(biāo)準(zhǔn)庫中提供了sort包對整型,浮點型,字符串型切片進(jìn)行排序,檢查一個切片是否排好序,使用二分法搜索函數(shù)在一個有序切片中搜索一個元素等功能。
關(guān)于sort包內(nèi)的函數(shù)說明與使用,請查看
在這里簡單講幾個sort包中常用的函數(shù)
在Go語言中,對字符串的排序都是按照字節(jié)排序,也就是說在對字符串排序時是區(qū)分大小寫的。
二分搜索算法
Go語言中提供了一個使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比較㏒?n個元素,其中n為切片中元素的總數(shù)。
sort.Search(size,fn)函數(shù)接受兩個參數(shù):所處理的切片的長度和一個將目標(biāo)元素與有序切片的元素相比較的函數(shù),該函數(shù)是一個閉包,如果該有序切片是升序排列,那么在判斷時使用 有序切片的元素 = 目標(biāo)元素。該函數(shù)返回一個int值,表示與目標(biāo)元素相同的切片元素的索引。
在切片中查找出某個與目標(biāo)字符串相同的元素索引