Go基礎之基礎....[忽略很糟的標題]

Go變量
  使用var關鍵字是Go最基本的定義變量方式數組

  //定義一個名稱"carName",類型爲"type"的變量
  var carName typeapp

 

  //定義多個變量,好比三個變量
  var carName1, carName2, carName3 type函數

 

  定義變量並初始化
  //初始化"carName"的變量爲value 類型type
  var carName type = valueui

  定義多個變量並初始化編碼

  var carName1, carName2, carName3 type = v1, v2, v3spa

 


  定義變量變種(上面繁瑣 因而提供下面方法):
  //仍是定義三個變量
  var carName1, carName2, carName3 = v1, v2, v3設計

  再次改進定義變量方式(由於上面仍是感受繁瑣):
  //編譯器會根據初始化的值自動推導出相應的類型
  carName1, carName2, carName3 := v1, v2, v33d


有人疑惑啦 := 這是什麼鬼啊?!!!
:= 符號取代了var 和type 這種形式叫作簡短聲明。不過它有一個限制只能用在函數內部。全局通常仍是第二種 var定義指針

 

  _(下劃線) 特殊的變量名。任何賦予它的值都會被丟棄

  _, a := 1, 2 //賦值時候 1被捨棄了 2 賦值給ablog

  !!!在Go 若是聲明一個變量 可是最終沒使用 會在 編譯時候報錯

Go常量
  常量,字如其名,在編譯階段就肯定的值,在程序運行時沒法改變的值
  常量:可定義爲 數值,布爾值,字符串

  /定義一個數字爲 168
  const a = 168

  

 

  從上面例子就能推出常量語法: const constantName = value ---> const xxx(常量名) = xx(常量值)

內置基礎類型
Boolean
  在Go中, 布爾值的類型爲bool 值是true或者false 默認爲false

數值類型:
  整數類型有無符號和帶符號兩種。Go同時支持int和uint 兩種類型長度

  !!! 類型的變量之間不容許互相賦值或操做 ,不然編譯時報錯

字符串:
  Go中字符串採用utf-8字符集編碼 類型string 在"" 或者''中包裹
  !!! Go字符串是不能夠改變的


錯誤類型
  Go內置一個error類型 處理錯誤信息


技巧:
1.分組聲明
  在Go語言中,同時能夠聲明多個常量、變量、或者導入包可以使用分組方式

  !!!在定義分組常量時候要注意iota
2.iota枚舉
  Go裏有一個關鍵字iota 這個關鍵字聲明enum時採用 默認值0 每次調用+1
3.GO程序設計規則
  !!!要記住規則 。一個良好的開始就是從熟悉規則
  ---大寫字母開頭的變量是能夠被其餘包讀取的 是公用變量
  ---小寫字母開頭是不能夠被其餘包讀取的是私有變量
  ---函數同理也是同樣大寫字母開頭至關於public,小寫至關於private

array slice map

  array:就是數組 -->用法 var arr [n] type //在[n]type中,n表示長度 ,type表示類型

  var arr [5] int //聲明一個int類型的數組
  arr [0] = 42 //數組下標0 賦值42 同時數組也是下標從0開始的

  另外一種簡化聲明:
  a := [3] int{1, 2, 3} //聲明一個長度爲3的int數組
  b := [5] int{1, 2} //聲明長度爲5的數組 初始賦值1,2 其餘沒賦值元素默認爲0
  c := [...] int{1,2} //省略長度... go自動根據數據計算長度
GO數組嵌套
  二維數組:doubleArray := [2][4] int{}

  slice:在不少場景中數組並不能知足需求。在初始蒂尼數組時,咱們不知道須要多大數組 -->動態數組 slice 切片
  slice不是真的動態數組是一個引用類型。
  slice老是指向一個底層array,slice聲明能夠像array同樣 只是不須要長度

  var aslice [] int -->發現[]中沒有數字吧
  咱們能夠聲明一個slice並初始化
  slice := []byte {'a', 'b', 'c', 'd'}

  !!!slice和數組在聲明時區別 :聲明數組方括號是有數組的長度或者使用[...]自動計數的,聲明slice是沒有任何字符

 

  slice 的默認開始是從0 ar[:n] --->ar[0:n]

  slice 的第二個序列默認是數組的長度 ar[n:] --->[n:len(ar)]

  若是從一個數組裏直接獲取slice 能夠 ar[:] --->[0:len(ar)]

  !!!slice是引用類型 若是引用改變其中元素值時,其餘引用也會改變

  slice像一個結構體{一個指針 長度 最大長度}


  slice: len ---->獲取slice的長度
  cap ---->獲取slice的最大容量
  append ->向slice裏追加一個或者多個元素返回一個和slice同樣的類型的slice
  copy --->copy從源slice的src中複製元素到目標dst 並返回賦值元素的個數
  !!!append 會改變slice所引用數組的內容 ,從而影響其餘引用同一數組的其餘slice。若是slice沒有剩餘空間追加的元素會動態分配
  到新的空間這樣原數組的容易保持不變;其餘引用數組的slice也不受影響


map
  map[keyType] valueType

  map讀取和設置都和slice同樣 經過key來操做可是他們最大區別是:slice的index只能是int類型 ,而map的key是不少類型均可以

  //聲明key是字符串,int值 須要使用前初始化
  var number map[string] int
  //另外一種聲明方法
  numbers := make(map[string] int)
  numbers ["one"] = 1 //賦值

  //map 左邊是key 右邊是value

  !!!-map是無序的,每次打印出來的map都會不同因此只能經過key取
  -map長度是不固定的和slice同樣是引用類型
  -len同樣適用於map 返回map個數
  -map值很容易修改經過key
  -map初始化能夠經過key:val,map內置機制判斷是否存在key
  經過delete刪除map的元素:
  delete(rating,"key")

make/new
  make: 用於內建類型(map、slice和channel)內存分配
  new: 用於各類類型的內存分配

  區別:make只能建立3種 而且會初始化 返回的有初始值的T類型 。new建立各類可是返回的是地址 即指針

 

--2017年12月22日19:58:31 [小路 寫,過去篇]

相關文章
相關標籤/搜索