1. 程式人生 > >GoLand(三)數據類型、變量和常量

GoLand(三)數據類型、變量和常量

%d 編譯器 需要 多變量 派生 進制 多個 推斷 字符串

Infi-chu:

http://www.cnblogs.com/Infi-chu/

一、數據類型
數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。Go語言按類別有以下幾種數據類型:
1.布爾型
兩個常量,true和false。
eg.

var a bool = true


2.數字類型
整型int,浮點型float32、float64


3.字符串類型
Go語言的字符串的字節使用UTF-8編碼標識Unicode文本。


4.派生類型
指針類型、數組類型、結構化類型、Channel類型、函數類型、切片類型、接口類型、Map類型

二、數字類型
(基於架構的類型)
1.uint8
無符號8位整型[0,255]
2.uint16
無符號16位整型[0,65535]
3.uint32
無符號32位整型[0,4294967295]
4.uint64
無符號64位整型[0,18446744073709551615]
5.int8
有符號8位整型[-128,127]
6.int16
有符號16位整型[-32768,32767]
7.int32
有符號32位整型[-2147483648,2147483647]
8.int64
有符號64位整型[-9223372036854775808,9223372036854775807]

(浮點類型)
1.float32
IEEE-754 32位浮點型數
2.float64
IEEE-754 64位浮點型數
3.complex64
32 位實數和虛數
4.complex128
64 位實數和虛數

(其他數字類型)
1.byte
類似 uint8
2.rune
類似 int32
3.uint
32 或 64 位
4.int
與 uint 一樣大小
5.uintptr
無符號整型,用於存放一個指針

三、變量
1.變量聲明
第一種,先聲明,不賦值

var a string


2.根據值自動判斷變量類型

var b = 1


3.省略var,:=左側的變量先前不能被聲明過

c := 2


4.多變量聲明

//類型相同多個變量, 非全局變量
var a1, a2, a3 int
a1, a2, a3 = 1, 2, 3
var b1, b2, b3 = 1, 2, 3 //和python很像,不需要顯示聲明類型,自動推斷
c1, c2, c3 := 1, 2, 3 //出現在:=左側的變量先前不能被聲明過

// 這種因式分解關鍵字的寫法一般用於聲明全局變量
var (
    d1 int
    d2 string
)


四、常量
常量是一個簡單值的標識符,在程序運行時,不會被修改的量。常量中的數據類型只可以是布爾型、數字型(整數型、浮點型和復數)和字符串型。
1.格式:

// 單常量聲明
// const 標識符 [類型] = value    // 類型為可選項
// 多常量聲明
// const a,b = 1,2

package main

import "fmt"

func main() {
   const LENGTH int = 10
   const WIDTH int = 5   
   var area int
   const a, b, c = 1, false, "str" //多重賦值

   area = LENGTH * WIDTH
   fmt.Printf("面積為 : %d", area)
   println()
   println(a, b, c)   
}


2.iota
iota,特殊常量,可以認為是一個可以被編譯器修改的常量。iota 在 const關鍵字出現時將被重置為 0(const 內部的第一行之前),const 中每新增一行常量聲明將使 iota 計數一次(iota 可理解為 const 語句塊中的行索引)。

eg1

package main

import "fmt"

func main() {
    const (
            a = iota   //0
            b          //1
            c          //2
            d = "ha"   //獨立值,iota += 1
            e          //"ha"   iota += 1
            f = 100    //iota +=1
            g          //100  iota +=1
            h = iota   //7,恢復計數
            i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
}


eg2

package main

import "fmt"
const (
    i=1<<iota
    j=3<<iota
    k
    l
)

func main() {
    fmt.Println("i=",i)
    fmt.Println("j=",j)
    fmt.Println("k=",k)
    fmt.Println("l=",l)
}

// i=1:左移 0 位,不變仍為 1;
// j=3:左移 1 位,變為二進制 110, 即 6;
// k=3:左移 2 位,變為二進制 1100, 即 12;
// l=3:左移 3 位,變為二進制 11000,即 24。

GoLand(三)數據類型、變量和常量