当前位置 博文首页 > go语言学习之包和变量详解

    go语言学习之包和变量详解

    作者:W-D 时间:2021-06-27 15:56

    前言

    本文主要介绍了关于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.变量名

    命名原则:

    • 首字符可以是任意的Unicode字符或者下划线
    • 剩余字符可以是Unicode字符、下划线、数字
    • 不能作为用以下关键字作为变量名

    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)
    }

    总结

    js