1. 程式人生 > >Go基礎之基礎....[忽略很糟的標題]

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

過去 strong slice 刪除 array col 內存 開始 基礎類型

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

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

技術分享圖片

  //定義多個變量,比如三個變量
  var carName1, carName2, carName3 type

技術分享圖片

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

  定義多個變量並初始化

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

技術分享圖片


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

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


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

技術分享圖片

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

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

  !!!在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 [小路 寫,過去篇]

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