go語言之行--包與變量


一、包的概念

包是go語言中不可缺少部分,在每個go源碼的第一行進行定義,定義方式是:package "包名",並且該名稱是作為調用該包時候所使用的名稱。

包的概念總結:

  • 每個 Go 文件都屬於且僅屬於一個包。一個包可以由許多以 .go 為擴展名的源文件組成,因此文件名和包名可能不同,為了規范,功能相似或者屬於相同性質的源碼歸集到相同的包名中。
  • 每個應用程序都必須有且只有一個包名稱為main,他是該程序的入口,執行時候會尋找包名為main的代碼
  • 包與包之間可以被相互調用,主要為了減少代碼重復性
  • 包一旦被引入就需要被使用,除非引入的時候忽略它(前面加_表示忽略它,只是用它來初始化),如果引入了包,而在代碼中沒用使用,運行時候會報錯

 

二、包的引入

1.包引入的方法

方法一:

import "fmt"
import "os"

方法二:

import "fmt"; import "os"

方法三(推薦!)

import (
   "fmt"
   "os"
)

 

2.引入其他包

go語言中,引入包的路徑是根據GOPATH/src 這個環境變量作為相對路徑進行引入的,如果GOPATH存在多個,那么go將逐一尋找路徑,直到找到,若GOPATH/src未找到則編譯出錯。

示例:

我的GOPATH為:C:\Users\17647\Desktop\go_work\src

首先建立包文件1:C:\Users\17647\Desktop\go_work\src\day02\eg1\pkg.go(相對於GOPATH/src的路徑為day02\eg1\pkg.go)

內容如下:

package add   

import "fmt"

func Sum(a int,b int)  {
    var c int
    c = a + b
    fmt.Println("res",c) 

}

在main進行引入如下:

package main

import (
    "fmt"
    "day02/eg1"  /* 引入包 */
)

func main() {
    add.Sum(2,3) /* 調用包 */
    fmt.Println("Hello, World!")
}

圖示:

 

二、變量

1.單個變量的聲明

go語言中,所有變量都必須先聲明在使用,下面是聲明變量和賦值方法:

  • 先聲明后賦值: var <變量名稱> <變量類型>         賦值:變量的賦值格式: <變量名稱> = <表達式>
  • 聲明的同時賦值:var <變量名稱> <變量類型> = <表達式>   (簡寫為 變量名稱 :=  表達式)

示例:

package main

import "fmt"
func main() {

    var a string  /* 聲明一個變量名為a,類型為字符串的變量 */
    a = "wd"      /* 對a變量賦值*/
    var age int = 22  /* 聲明並賦值變量 */
    fmt.Println(a,age)
}

2.多個變量聲明

  • 先聲明后賦值:var <變量1>,<變量2>,<變量3>  <變量類型>     賦值 : <變量1>,<變量2> =  值1,值2
  • 聲明同時賦值 :var  <變量1>,<變量2> = 值1,值2   可簡寫為: <變量1>,<變量2> = 值1,值2
  • 多個變量還可以使用var()聲明

示例:

package main

import "fmt"
func main() {

    var a,b int
    a,b = 1,2
    var c,d = 3,"wd" /* 類型自動推斷 */
    e, f := 4, "hello"  /* 簡寫 */
    fmt.Println(a,b,c,d,e,f)
}

使用var()聲明

package main

import "fmt"

func main()  {
    var (
        a int   //默認值為0
        b string // 默認值為空字符串("")
        c = 3 
    )
    fmt.Println(a,b,c)
}

 

3.變量名

命名原則:

  1. 首字符可以是任意的Unicode字符或者下划線
  2. 剩余字符可以是Unicode字符、下划線、數字
  3. 不能作為用以下關鍵字作為變量名
break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var

4.可見性

可見性即對包外可見,當其他包調用當前包的變量時候是否允許可見(可訪問)。

  • 變量開頭字符大寫,表示可見
  • 變量開頭字母非大寫,則表示私有,不可見

 5.變量的作用域

  • 函數內定義的變量稱為局部變量,其作用域在函數內
  • 函數外定義的變量稱為全局變量,作用於整個包,並且該變量首字母大寫,則對其他包可見。

 

三、常量

常量是一個簡單值的標識符,在程序運行時,不會被修改的量。

常量中的數據類型只可以是布爾型、數字型(整數型、浮點型和復數)和字符串型。

定義常量語法:

const 名稱 類型 = value

多個常量定義語法:

const (
    a = 0  //類型自動推倒
    b = 1
   c = 2
)

iota解釋:

iota,特殊常量,可以認為是一個可以被編譯器修改的常量。

在每一個const關鍵字出現時,被重置為0,然后再下一個const出現之前,每出現一次iota,其所代表的數字會自動增加1。

iota 可以被用作枚舉值:

const (
    a = iota
    b = iota
    c = iota
)

第一個 iota 等於 0,每當 iota 在新的一行被使用時,它的值都會自動加 1;所以 a=0, b=1, c=2 可以簡寫為如下形式:

const (
    a = iota
    b
    c
)

用法:

package main

import "fmt"

func main() {
    const (
            a = iota   //0
            b          //1
            c          //2
            d = "ha"   //獨立值,iota += 1
            e          //"ha"   iota += 1
            f = 100    //iota +=1
            g          //100  iota +=1
            h = iota   //7,恢復計數
            i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM