Go語(yǔ)言從入門到精通-03 | 復(fù)雜數(shù)據(jù)類型

請(qǐng)從github下載配套代碼: https://github.com/shuningzhang/learn_golang
電子書下載地址: https://u19702000.ctfile.com/dir/19702000-33357795-bb2f31/

前面文章本號(hào)給大家介紹了基本的數(shù)據(jù)類型眨业,表達(dá)式和函數(shù)等內(nèi)容级历。有的時(shí)候基本的數(shù)據(jù)類型可能不能滿足我們開發(fā)的需求,我們可能需要一些數(shù)據(jù)類型的組合霹菊。比如我們要把一個(gè)班級(jí)里面所有人的平均成績(jī)存在一起擦酌,然后計(jì)算整個(gè)班級(jí)的平均成績(jī)霸妹。大家想一下错妖,這種情況下應(yīng)該用什么類型的變量?

Go語(yǔ)言從入門到精通-03 | 復(fù)雜數(shù)據(jù)類型

數(shù)組

接著上面我們舉的例子谆棺,如果要計(jì)算平均成績(jī)?cè)趺崔k呢栽燕?這就用到了數(shù)組的概念。數(shù)組從字面上理解就是一組數(shù)改淑,它是指類型相同的一組數(shù)碍岔。這組數(shù)在內(nèi)存中是順序存儲(chǔ)的,因此朵夏,我們可以通過數(shù)組名字的索引來(lái)訪問其中的數(shù)據(jù)蔼啦,而不同定義多個(gè)變量。

圖1 數(shù)組內(nèi)部結(jié)構(gòu)示意圖

如圖1是數(shù)組內(nèi)部結(jié)構(gòu)的示意圖侍郭,我們可以通過數(shù)組的索引訪問數(shù)組內(nèi)部的數(shù)據(jù)询吴。通常數(shù)組的索引是從0開始的,0表示第一個(gè)元素亮元。下面我們給出一個(gè)Go語(yǔ)言的具體示例:

package main

import "fmt"

/* 這個(gè)函數(shù)用于計(jì)算幾個(gè)學(xué)生成績(jī)的均值 */
func calc_average () (float32) {
    var student_1 uint32 = 67
    var student_2 uint32 = 89
    var student_3 uint32 = 96
    var student_4 uint32 = 87
    var student_5 uint32 = 79
    var sum uint32 = 0
    var result float32 = 0;

    sum = student_1 + student_2 +
          student_3 + student_4 +
          student_5

    result = float32(sum) / 5
    
    return result
}

/* 上面函數(shù)計(jì)算均值數(shù)據(jù)數(shù)量少猛计,可能并看不出有
 * 多麻煩,如果有100個(gè)學(xué)生爆捞,上面一個(gè)函數(shù)將會(huì)非常
 * 復(fù)雜奉瘤。
 * 下面這個(gè)函數(shù)利用了數(shù)組,功能是一樣的煮甥。*/
func calc_average_ex() (float32) {
    /* 這里定義一個(gè)數(shù)組盗温,并進(jìn)行初始化,初始化不
     * 是必須的成肘。
     *  數(shù)組的名稱      數(shù)量 類型       數(shù)組初始化的數(shù)據(jù)     卖局。*/
    var students = [5] uint32 {67, 89, 96, 87, 79}
    var sum uint32 = 0
    var result float32 = 0
    var i uint32 = 0

    /* 通過數(shù)組,結(jié)合for循環(huán)可以非常容易的計(jì)算
     * 累加和双霍。
     * 數(shù)組索引是從0開始的砚偶,0表示第一個(gè)元素批销。 */
    for i = 0; i<5; i++ {
    
        /* 數(shù)組的訪問通過[]進(jìn)行,其中i是索引染坯。
         * 讀或者寫其中的值都通過[]訪問均芽。 */
        sum += students[i] 
    }

    result = float32(sum) / 5

    return result
}

func main() {
    /* 這里是函數(shù)的調(diào)用 */
    fmt.Println( calc_average_ex() )
}

上面數(shù)組數(shù)量,如果有初始化的情況下可以不必指定大小单鹿,此時(shí)編譯器會(huì)根據(jù)初始化的數(shù)據(jù)數(shù)量自動(dòng)確定大小掀宋,具體定義的格式如下:

var students = [...] uint32 {67, 89, 96, 87, 79}

數(shù)組的內(nèi)容還很多,我們這里先學(xué)會(huì)基本的使用仲锄,后續(xù)再詳細(xì)介紹劲妙。

結(jié)構(gòu)體

上面數(shù)組用于計(jì)算非常方便,但是如果我們需要一種數(shù)據(jù)類型表示學(xué)生昼窗,比如包含姓名是趴、年齡和分?jǐn)?shù)等,這樣就比較難以實(shí)現(xiàn)了澄惊。這時(shí)就可以通過結(jié)構(gòu)體來(lái)實(shí)現(xiàn)。結(jié)構(gòu)體是對(duì)多種數(shù)據(jù)類型的封裝富雅,形成一個(gè)新的數(shù)據(jù)類型掸驱,之后我們就可以將該類型作為一種數(shù)據(jù)類型使用,使用的方式與普通數(shù)據(jù)類型一樣没佑。

package main

import "fmt"

/* 這里是結(jié)構(gòu)體的定義毕贼,定義部分包含3部分
 * type關(guān)鍵字, 名稱  struct關(guān)鍵字蛤奢。 之后
 * 是結(jié)構(gòu)體定義的主體鬼癣,里面具體的成員定義。
 * 成員定義有名稱和類型構(gòu)成啤贩。*/
type Student struct {
    name string
    age uint8
    score uint8
}

func main() {
    /* 這里是結(jié)構(gòu)體類型的定義待秃,與普通變量無(wú)疑 */
    var zhang Student

    /* 還可以在定義的時(shí)候進(jìn)行初始化 */
    var wang = Student{"ericwang", 17, 99}
    

    /* 成員訪問, 通過        變量名.成員       進(jìn)行訪問痹屹。 */
    zhang.name = "sunnyzhang"
    zhang.age = 18
    zhang.score = 98

    /* 獲取成員的值 */
    fmt.Println( zhang.age, wang.age )
}

接口

在面向?qū)ο缶幊讨姓掠簦梢赃@么說:“接口定義了對(duì)象的行為”, 那么具體的實(shí)現(xiàn)行為就取決于對(duì)象了志衍。在Go中暖庄,接口是一組方法簽名。當(dāng)一個(gè)類型為接口中的所有方法提供定義時(shí)楼肪,它被稱為實(shí)現(xiàn)該接口培廓。它與oop非常相似。接口指定類型應(yīng)具有的方法春叫,類型決定如何實(shí)現(xiàn)這些方法肩钠。下面我們看一個(gè)具體的實(shí)例:

package main

import "fmt"

/* 這里是接口的定義俘侠,定義部分包含3部分
 * type關(guān)鍵字, 名稱  interface關(guān)鍵字蔬将。 之后
 * 是接口定義的主體爷速,里面包含該接口具有的
 * 方法定義 */
type Student interface {
    get_name() string
    get_age() uint8
    
}

/* 這里定義的是結(jié)構(gòu)體的數(shù)據(jù)類型
 * */
type StudentS struct {
    name string
    age uint32
}

/* 下面是接口的具體實(shí)現(xiàn),對(duì)接口的get_name方法
 * 進(jìn)行了實(shí)現(xiàn)霞怀,并且綁定到了StudentS類型上惫东。
 * 這種定義方式與C++和Java的非常不同,這里沒有
 * this或者self毙石,而是有開發(fā)者自己定義廉沮。*/
func (student StudentS) get_name () string{
    return student.name
}

func main() {
    var student = StudentS{"sunnyzhang", 18}

    /* 獲取成員的值 */
    fmt.Println( student.get_name() )
}

好了,今天我們對(duì)基本的符合數(shù)據(jù)類型進(jìn)行了基本的介紹徐矩,大家也基本可以依葫蘆畫瓢了滞时。后面我們?cè)俳Y(jié)合實(shí)例進(jìn)行深入的介紹。

截止到目前滤灯,我們通過4篇文章對(duì)Go語(yǔ)言的基本語(yǔ)法有了一個(gè)基本的認(rèn)識(shí)坪稽,后面我們將進(jìn)入正題,開發(fā)我們的Web服務(wù)程序鳞骤。希望通過這些實(shí)例能夠讓大家對(duì)Go語(yǔ)言有更加深入的了解窒百。如果有任何問題,也希望大家在下面留言豫尽,作者會(huì)盡可能詳細(xì)的回復(fù)大家篙梢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市美旧,隨后出現(xiàn)的幾起案子渤滞,更是在濱河造成了極大的恐慌,老刑警劉巖榴嗅,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妄呕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡录肯,警方通過查閱死者的電腦和手機(jī)趴腋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)论咏,“玉大人优炬,你說我怎么就攤上這事√埃” “怎么了蠢护?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)养涮。 經(jīng)常有香客問我葵硕,道長(zhǎng)眉抬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任懈凹,我火速辦了婚禮蜀变,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘介评。我一直安慰自己库北,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布们陆。 她就那樣靜靜地躺著寒瓦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坪仇。 梳的紋絲不亂的頭發(fā)上杂腰,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音椅文,去河邊找鬼喂很。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雾袱,可吹牛的內(nèi)容都是我干的恤筛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芹橡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了望伦?” 一聲冷哼從身側(cè)響起林说,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屯伞,沒想到半個(gè)月后腿箩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劣摇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年珠移,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末融。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钧惧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勾习,到底是詐尸還是另有隱情浓瞪,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布巧婶,位于F島的核電站捺萌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芯急。R本人自食惡果不足惜拙泽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埋哟。 院中可真熱鬧,春花似錦、人聲如沸罚勾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荧库。三九已至,卻和暖如春赵刑,著一層夾襖步出監(jiān)牢的瞬間分衫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工般此, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚪战,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓铐懊,卻偏偏與公主長(zhǎng)得像邀桑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子科乎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容