Go語(yǔ)言從入門(mén)到精通-01 | 數(shù)據(jù)類(lèi)型與表達(dá)式

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

上一篇文章我們給了一個(gè)入門(mén)程序,接下來(lái)我們介紹在Go語(yǔ)言中的數(shù)據(jù)類(lèi)型和表達(dá)式相關(guān)的內(nèi)容。由于本文是簡(jiǎn)介性的文章,因此并不會(huì)事無(wú)巨細(xì)的介紹所有內(nèi)容,只是能夠讓讀者達(dá)到理解基本概念,并能夠使用的程度,更為深入的學(xué)習(xí)還需要其它材料。

這個(gè)圖片是裝飾

數(shù)據(jù)類(lèi)型與變量

同任何其它編程語(yǔ)言一樣,Go語(yǔ)言支持多種類(lèi)型的數(shù)據(jù)。從大的分類(lèi)上面Go語(yǔ)言支持布爾類(lèi)型、數(shù)字類(lèi)型、字符串和派生類(lèi)型等幾種。

變量是存儲(chǔ)數(shù)據(jù)的存儲(chǔ)空間的別名,通過(guò)變量開(kāi)發(fā)人員可以方便的訪問(wèn)內(nèi)存空間,也就是訪問(wèn)其中存儲(chǔ)的數(shù)據(jù)。Go語(yǔ)言的變量是類(lèi)型相關(guān)的,也就是定義變量時(shí)需要指定變量的類(lèi)型,不同類(lèi)型的變量占用的內(nèi)存空間是不同的。

下面我們通過(guò)一個(gè)具體的示例說(shuō)明數(shù)據(jù)類(lèi)型和變量。

package main 

import "fmt"

func main() { 

    /* 下面一行定義一個(gè)int8類(lèi)型的變量,也稱為聲明
     * 變量。 可以看出聲明方式由3部分構(gòu)成,關(guān)鍵字
     * var,變量名var_name和變量類(lèi)型int8。Go語(yǔ)言的
     * 變量聲明方式與C或者Java等語(yǔ)言的方式不太一
     * 樣,剛開(kāi)始學(xué)可能覺(jué)得有些怪,但并非Go語(yǔ)言獨(dú)創(chuàng)。*/
    var var_name int8

    /* 變量的賦值,也就是讓變量的內(nèi)容變?yōu)槟硞€(gè)值。 */
    var_name = 5

    /* 定義一個(gè)16位的整型數(shù),第二行進(jìn)行2個(gè)變量運(yùn)
     * 算。 由于變量的類(lèi)型不一樣,因此需要進(jìn)行強(qiáng)制
     * 類(lèi)型轉(zhuǎn)換。 */
    var var_name_x int16
    var_name_x = 11 + int16(var_name)
    
    /* 上面介紹的都是數(shù)字型的數(shù)據(jù)類(lèi)型,除了上面的
     * 類(lèi)型外,還有int32,int64,uint8,uint16,
     * uint32,uint64等類(lèi)型,這些表示的是整型數(shù)。
     * 而以u(píng)int頭的表示無(wú)符號(hào)整型數(shù)。 */

    fmt.Println(var_name_x)
    
    /* 除了整型數(shù)外,還有浮點(diǎn)型數(shù),浮點(diǎn)型數(shù)就是我們
     * 日常說(shuō)的小數(shù) */
    var float_name float32
    float_name = 1.2
    
    fmt.Println(float_name)
    /* 浮點(diǎn)型數(shù)包括32位和64位兩種,也就是float32和float64。 */
    
    /* 下面介紹的類(lèi)型是字符串類(lèi)型。 */
    var str_name string
    str_name = "test"
    fmt.Println(str_name)
    
    /* 變量可以在聲明的時(shí)候直接初始化。 */
    var int_name int16 = 12
    fmt.Println(int_name)
    
    /* 可以同時(shí)聲明多個(gè)變量,如下是定義3個(gè)都為
     * int32類(lèi)型的變量,并進(jìn)行初始化,初始化并非
     * 強(qiáng)制要求的 */
    var int_name_1, int_name_2, int_name_3 int32 = 1, 2, 3 
    fmt.Println(int_name_1, int_name_2, int_name_3)
    
    /* 可以不聲明變量類(lèi)型,這樣編譯器會(huì)自動(dòng)選擇類(lèi)型 */
    var int_name_4 = 160
    
    /* 下面是最簡(jiǎn)單的變量聲明方式,可以將var關(guān)鍵字省略 */
    int_name_5 := 170
    fmt.Println(int_name_4, int_name_5)
    
    /* 最后說(shuō)明一下,變量名可以字母、下劃線和數(shù)字,但只能以非數(shù)字開(kāi)頭。*/
    
}

當(dāng)然,這里介紹了有限的幾種數(shù)據(jù)類(lèi)型,但在后面的使用中基本上夠用了。

運(yùn)算符和表達(dá)式

程序大部分都是進(jìn)行運(yùn)算的,了解了變量的這些類(lèi)型,我們看一下Go語(yǔ)言如何進(jìn)行計(jì)算。Go語(yǔ)言的計(jì)算包括常規(guī)的加減乘除、關(guān)系運(yùn)算、位運(yùn)算和邏輯運(yùn)算。這些運(yùn)算與其它語(yǔ)言的運(yùn)算并沒(méi)有任何本質(zhì)的差異,運(yùn)算符也基本一致。

運(yùn)算符,所謂運(yùn)算符就是進(jìn)行運(yùn)算的符號(hào),比如+、-、*和/等,分別表示加減乘除。而>則用于計(jì)算兩個(gè)值的大小關(guān)系。

表達(dá)式是運(yùn)算符和數(shù)字或者變量的組合,用于進(jìn)行一系列的計(jì)算,最后會(huì)計(jì)算出一個(gè)結(jié)果。表達(dá)式中各個(gè)運(yùn)算符之間有優(yōu)先級(jí),基本遵循數(shù)學(xué)運(yùn)算的規(guī)則。

package main 
import "fmt"
func main() { 
        var int_name_1, int_name_2, int_name_3 int32 = 1, 2, 3
    var int_name_4 int32 = 0

    /* Go語(yǔ)言支持常見(jiàn)的算術(shù)云算法,包括加減乘除和取模等 */
    int_name_4 = int_name_1 + int_name_2
    int_name_4 = int_name_1 - int_name_2
    int_name_4 = int_name_1 * int_name_2
    int_name_4 = int_name_1 / int_name_2
    int_name_4 = int_name_1 % int_name_2 /*取模*/

    int_name_3 ++ //自增
    int_name_3 --

    fmt.Println(int_name_1, int_name_2, int_name_3, int_name_4)

    /* 關(guān)系運(yùn)算,也就是判斷2個(gè)變量的大小關(guān)系,如果滿足條件則返回真(true),否則返回假(false) */
    var a bool

    /* 舉個(gè)簡(jiǎn)單的例子,計(jì)算1是否大于2,如果大于則返回true,否則返回false。結(jié)果是顯然的 */
    a = 1 > 2 
    fmt.Println(a)

    a = 1 < 2
    a = 1 >= 2
    a = 1 <= 2
    a = 1 == 2 //相等判斷
    a = 1 != 2 //不等判斷

    /* 邏輯運(yùn)算,也稱為布爾運(yùn)算,判斷一個(gè)或者多個(gè)值或者變量的邏輯關(guān)系 */
    var b = bool

    b = 1 && 1 //與運(yùn)算
    b = 1 || 1 //或運(yùn)算
    b = !1 //非運(yùn)算
    fmt.Println(b)

    /* 除了上述運(yùn)算外,還有位運(yùn)算,分別用& | ^表示按位與、或和異或運(yùn)算。本文不在贅述。 */    

}

運(yùn)算符的優(yōu)先級(jí)

我們?cè)谝粋€(gè)表達(dá)式中不可能只用一個(gè)云算法,同時(shí)運(yùn)用多個(gè)運(yùn)算符的情況是經(jīng)常存在的。因此Go語(yǔ)言中定義了在同時(shí)出現(xiàn)多個(gè)運(yùn)算符是的等級(jí)。等級(jí)越高,則表示該運(yùn)算符會(huì)優(yōu)先執(zhí)行。優(yōu)先順序依次為:

  1. ^ !
    • / % << >> & &^
      • | ^
  2. == != < <= >= >
  3. <-
  4. &&
  5. ||

同一級(jí)別的從左向右執(zhí)行。另外,括弧優(yōu)先級(jí)是最高的,也就是括弧中的內(nèi)容會(huì)優(yōu)先執(zhí)行,下面是例程:

package main
import "fmt"
func main() {
     var a int = 20
     var b int = 10
     var c int = 15
     var d int = 5
     var e int;

     e = (a + b) * c / d; // ( 30 * 15 ) / 5
     fmt.Printf("(a + b) * c / d 的值為 : %d", e );

     e = ((a + b) * c) / d; // (30 * 15 ) / 5
     fmt.Printf("((a + b) * c) / d 的值為 : %d" , e );

     e = (a + b) * (c / d); // (30) * (15/5)
     fmt.Printf("(a + b) * (c / d) 的值為 : %d", e );

     e = a + (b * c) / d; // 20 + (150/5)
     fmt.Printf("a + (b * c) / d 的值為 : %d" , e ); 
}

好了,今天先到這,學(xué)完本文基本上清楚了在程序設(shè)計(jì)中如何進(jìn)行運(yùn)算。后面我們?cè)俳榻B函數(shù)的概念。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容