1. 程式人生 > >go兩種數據類型的區別、數據類型和操作符、常量、變量聲明

go兩種數據類型的區別、數據類型和操作符、常量、變量聲明

har 其中 類型轉換 info code pre 常量 都在 寫法

值類型和引用類型

1、值類型:變量直接存儲值,內存通常在棧中分配。  

  基本數據類型int、float、bool、string以及數組和struct。

技術分享圖片

2、引用類型:變量存儲的是一個地址,這個地址存儲最終的值。內存通常在堆上分配。通過GC回收。

  指針、slice(切片)、map、chan(管道)、interface等都是引用類型。

技術分享圖片

堆和棧的區別:
  一、堆棧空間分配區別:
  1、棧(操作系統):由操作系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧;
  2、堆(操作系統): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。
  二、堆棧緩存方式區別:
  1、棧使用的是一級緩存, 他們通常都是被調用時處於存儲空間中,調用完畢立即釋放,調用對象的速度較快;(棧空間)
  2、堆是存放在二級緩存中,生命周期由虛擬機的垃圾回收算法來決定(並不是一旦成為孤兒對象就能被回收)。
調用對象的速度要相對慢一些。(物理硬盤空間)   三、堆棧數據結構區別:   堆(數據結構):堆可以被看成是一棵樹,如:堆排序;   棧(數據結構):一種先進後出的數據結構。(函數的調用就是棧,先進後出) 

值類型和引用類型實例:

技術分享圖片實例一 技術分享圖片實例二

變量的作用域(全局區域只能聲明變量,不能執行語句,a:=1,這類語句編譯不能通過

1、在函數內部聲明的變量叫做局部變量,生命周期僅限於函數內部。在{ }裏面的語句塊裏面的變量生命周期僅限於語句塊。

2、在函數外部聲明的變量叫做全局變量,生命周期作用於整個包,如果是大寫的,則作用於整個程序。

技術分享圖片實例一 技術分享圖片實例二 技術分享圖片實例三

數據類型和操作符

1、bool類型,只能存true和false

2、相關操作符, !、&&、||

3、數字類型,主要有int、int8、int16、int32、int64、uint8(無符號整形)、uint16、uint32、uint64、float32、float64

4、類型轉換,type(variable),比如:var a int=8; var b int32=int32(a)

5、邏輯操作符: == 、!=、<、<=、>和 >=

6、數學操作符:+、-、*、/等等

7、字符類型:var a byte

  var a byte = ‘c’

8、字符串類型: var str string

9、字符串表示兩種方式: 1)" "雙引號 2)`` 反引號

所有整數初始化為0,所有浮點數初始化為0.0,所有布爾類型初始化為False

技術分享圖片View Code

10、位操作符

a.與操作:& 1&1 =1 1&0 = 0 0&1 =0 0&0 = 0

b.或操作:|   1|1 = 1 1&0 = 1 0&1 =1 0&0 = 0

d.異或操作:^ 1|1 = 0 1&0 = 1 0&1 =1 0&0 = 0

左移<<   1<<10=1024

右移>> 1024>>10=1

技術分享圖片位操作符實例

常量

1.常量使用const 修飾,代表永遠是只讀的,不能修改。

2.const 只能修飾boolean,number(int相關類型、浮點類型、complex)和string。

3.語法:const identifier [type] = value,其中type可以省略。

const b string = “hello world” 
const b = “hello world”
const Pi = 3.1414926
const a = 9/3

預定義常量:

比較優雅的寫法:
const (
a = 0
b = 1
c = 2
)

更加專業的寫法:
const (
a = iota  //a=0,後面的變量都在前面的基礎上都加1
b    //1
c    //2

變量

1、語法:var identifier type

    var v1 int
    var v2 string
    var v3 [10]int  //數組
     var v4 []int    //數組切片
     var v5 struct{
        f int
    }
    var v6 *int  //指針
     var v7 map[string] int
    var v8 func(a int)  //指針

第二種寫法:

var (
       v1 int  //默認為0
       v2 string //默認為""
       v3 [10]int  //數組
        v4 []int    //數組切片
        v5 struct{
            f int
        }
       v6 *int  //指針
        v7 map[string] int
       v8 func(a int)  //指針
        v9 bool  //默認為false
    )

變量的初始化操作:

var v1 int = 10
var v2 = 10
v3 := 10 //不能用於全局變量的聲明

go兩種數據類型的區別、數據類型和操作符、常量、變量聲明