值類型和引用類型程序員
一、值類型:變量直接存儲值,內存一般在棧中分配。 算法
基本數據類型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
十、位操做符
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 //不能用於全局變量的聲明