1. 程式人生 > >Go 基礎(非常基礎)

Go 基礎(非常基礎)

 1 // package main 和 main 函式
 2 package main
 3 func main() {}
 4 
 5 //每一個.go檔案都需要有 package 關鍵詞,並且宣告在檔案頂部
 6 package pkgName
 7 
 8 // import 用來匯入依賴包
 9 import "name"
10 
11 // 常量定義 - const NAME type = value
12 const NAME string = "xiaoming"
13 
14 // 全域性變數的定義 - var ...
15 var name string = "xiaohei"
16 
17 // 一般型別宣告(定義變數的型別) - type ...
18 type learn string 19 20 // 宣告結構 21 type Learn struct { 22 // ... 23 } 24 25 // 宣告介面 26 type Learn interface 27 28 // 函式的定義 29 func fn () {}

package

  package是最基本的分發單位和工程管理中依賴關係的體現;

  原始檔開頭需要宣告package;

  要生成可執行程式,要有package main 和 main函式;

  同一個路徑要只能有一個package

import

 1 //
方式一 2 import "package1" 3 import "package2" 4 import "package3" 5 6 // 方式二 7 import ( 8 "package1" 9 "package2" 10 )

  原理
  import 匯入,是按順序匯入;
  匯入包中含有其他依賴包,會先匯入依賴包,初始化其中的常量和變數,如果有init函式,還會執 行init();

  所有包匯入完成後,才會對main中和常量和變數進行初始化,如果main中有init函式,先執行init(),在執行main函式;

  一個包被匯入多次,但實際只會匯入一次;

  import _ "pkg" 會匯入該包,但不會執行整個包,而是執行包中的init函式(簡單點說,就是這樣做會到時自動執行包的init(),註冊包引擎,關於這個包就無需其他操作了);

  import . "pkg" 可以不加包名,直接方法

  別名用法
  import alias "pkg"

資料型別

  1.  數值型別(整型、浮點型、複數、其他)、字串型別、布林型別

  2. 派生型別

      指標型別(Pointer)

      陣列型別

      結構化型別(struct)

      Channel型別 (chan) 

      函式型別(func) 

      切片型別(slice)

      藉口型別(interface)

      Map型別(map)

  3. 型別零值和類型別名
      型別零值:變數被宣告之後的預設值

  不同型別的變數是不能進行運算的

unsafe包

  unsafe 庫讓 golang 可以像C語言一樣操作計算機記憶體(不推薦使用此包)

  type ArbitraryType int

  type Pointer *ArbitraryType

  func Sizeof(x ArbitraryType) uintptr

  func Offsetof(x ArbitraryType) uintptr

  func Alignof(x ArbitraryType) uintptr

 

常量宣告

// 顯式
const name type = value

// 隱式(無型別常量)
const name = value

// * 常量只支援數值、布林、字串型別

變數宣告

// 單個宣告
var name [type] = value

// 多個宣告
var a, b, c [type] = v1, v2, v3
//簡寫
a, b := v1, v2

// 分組宣告
var (
  a [type]
  b [type]
  c [type]
)

全域性變數必須使用var宣告 | 特殊變數使用下劃線

型別轉換

// 型別轉換必須是顯示的
// 型別轉換隻能發生在兩種相容型別之間
var a = 1
var b float32
b = float32(a)

變數可見性規則

  大寫字母開頭的變數是公有變數,可以被其他包讀取

  小寫字母開頭的變數是私有變數

 

流程語句

// if - else 
if a > 0 {}

if a > 0 {
   
} else {
 
}
switch name {
  case v1:
    ..
  case v2:
    ..
  default:
    ..
}
for init; condition; post {}

 

// 待續