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

值類型和引用類型程序員

一、值類型:變量直接存儲值,內存一般在棧中分配。  算法

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

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

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

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

值類型和引用類型實例:ide

實例一
實例二

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

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

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

實例一
實例二
實例三

  

數據類型和操做符

一、bool類型,只能存true和false操作系統

二、相關操做符, !、&&、||

三、數字類型,主要有int、int八、int1六、int3二、int6四、uint8(無符號整形)、uint1六、uint3二、uint6四、float3二、float64

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

五、邏輯操做符: == 、!=、<、<=、>和 >=

六、數學操做符:+、-、*、/等等

七、字符類型:var a byte

  var a byte = ‘c’

八、字符串類型: var str string

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

全部整數初始化爲0,全部浮點數初始化爲0.0,全部布爾類型初始化爲False

View Code

 十、位操做符

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 

 變量

一、語法: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 //不能用於全局變量的聲明
相關文章
相關標籤/搜索