Go語言培訓第二天

第二天課程

[toc]

基本數據類型和操作符

  • 文件名
    • 所有的go源碼文件以.go結尾
  • 標識符以字母或下劃線結尾
    • _是特殊標識符,用來忽略結果
  • 保留關鍵字如下:
    Alt text
  • go程序基本結構

    package main
    import(         //導入本地包或者第三方包
    "fmt"
    )
    func main(){    //聲明函數必須以func開頭,用花括號包含
    fmt.Println("hello world!!")
    }

    詳細分析如下:

    1. 任何代碼文件隸屬於一個包
    2. import 關鍵字,用來引用其他包
    3. golang可執行程序,package main只有一個main入口函數
    4. 包中的調用:
    5. 在同一個包中的函數直接調用
    6. 不同包中的函數,通過包名+點+函數名進行調用
    7. 包的訪問控制規則:
    8. 大寫意味着這個變量/函數是可以導出的
    9. 小寫意味着這個變量/函數是私有的,在包外不能訪問
  • 小練習一:
    給定一個數字n,求出所有兩兩相加等於n的組合
    Alt text
    package main
    import "fmt"
    func Sums(n int) {
    for i :=0;i <= n;i++{
        fmt.Printf("%d+%d=%d\n",i,n-i,n)
    }
    }
    func main(){
    Sums(5)
    }
  • 小練習二:
    一個程序包含兩個包add和main,其中add包裏面有兩個變量Name和Age,怎麼讓main去訪問
    目錄結構如下:
    ─ask_variables
    │  ├─add
    │  └─main
    1. add/add.go
      package add
      var Name string = "Wanghui"
      var Age int = 23
    2. main/main.go
      package main
      import (
      "one/day2/ask_variables/add"
      "fmt"
      )
      func main() {
      var a string = add.Name
      var b int = add.Age
      fmt.Printf("Name %s,Age %d",a,b)
      }
  • 包的別名應用
    只需將上述的例子中的main.go修改成如下即可:
    package main
    import (
    add_func "one/day2/ask_variables/add"
    "fmt"
    )
    func main() {
    var a string = add_func.Name
    var b int = add_func.Age
    fmt.Printf("Name %s,Age %d",a,b)
    }
  • 每個源文件都包含一個init函數,這個init函數自動被go運行框架調用,演示如下的功能,目錄結構如下:
    ├─add
    ├─main
    └─test

    代碼如下:

    1. add/add.go
      package add
      import(
      "fmt"
      _ "one/day2/init_test/test"
      )
      var Name string
      var Age int
      func init() {
      Name = "init test"
      Age = 19
      fmt.Println("This is in the init_test dir")
      }
    2. main/main.go
      package main
      import (
      "fmt"
      a "one/day2/init_test/add"
      )
      func main() {
      fmt.Println("this is in the main func!!")
      fmt.Println("Name=",a.Name)
      fmt.Println("Age=",a.Age)
      }
    3. test/test.go
      package test
      import "fmt"
      var Name string = "TEST PACKAGE"
      var Age int = 1000
      func init(){
      fmt.Println("this is in the test!!")
      fmt.Println("test.package.Name=",Name)
      fmt.Println("test.package.Age=",Age)
      }

      包的初始化操作,直接在引用的時候加上_就好。

      函數的聲明和註釋

      func 函數名(參數列表)(返回值列表){
      函數體
      }
  • 註釋:
    // 單行註釋
    /*多行註釋*/

    常量

  • 只讀的,用const修飾的
  • 只能修飾bool,數字和string類型
  • 語法
    const a string = "hello"
    const (
    b = 1
    c = 2
    d = 3 
    )
    或者
    const(
    b1 = iota
    b2
    b3
    )
  • 小例子:

    定義兩個常量,Man=1,Female=2,獲取當前系統的時間秒數,如果能被Femal整除,則在終端上打印female,否則打印man

  1. 代碼
    package main
    import (
    "time"
    "fmt"
    )
    const(
    Man = 1
    Female = 2
    )
    func main(){
    for {
        second := time.Now().Unix()
        if (second % Female) == 0 {
            fmt.Println("F" +
                "Female")
        }else {
            fmt.Println("Man")
        }
        time.Sleep(1)
    }   
    }

    變量

    • 語法: var 變量名 數據類型
      var(
      a int      //默認爲0
      b string   //默認爲空
      d = 8      //定義爲8
      )
    • 小例子:獲取當前操作系統的主機名和PATH環境變量:
      package main
      import (
      "os"
      "fmt"
      )
      func main(){
      hostname,err :=os.Hostname()
      os_path := os.Getenv("PATH")
      fmt.Printf("hostname = %v\nos_path = %v",hostname,os_path,err)
      }

      值類型和引用類型

    • 值類型: var a int = 19;
    • 包含:基本數據類型:int,float,string,數組,struct
    • 引用類型: 函數的引用等
    • 包含:指針,slice,chan

      小例子:
      寫一個程序來打印值類型和引用類型變量到終端,並觀察輸出結果

package main
import "fmt"
func main() {
    var a string = "hello word!"
    var b chan int = make(chan int,1)
    b <- 13
    fmt.Printf("a=%s\nb=%v",a,b)
}

小例子:交換兩個數字的值

package main
import "fmt"
func Test(a int,b int) (int,int){
    return b,a
}
func main() {
    var a int = 8
    var b int = 9
    a,b = Test(a,b)
    fmt.Println("\n",a)
    fmt.Println(b)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章