美文网首页Go语言实践Go
1、Go语言的变量与类型.md

1、Go语言的变量与类型.md

作者: 苏敏 | 来源:发表于2019-06-28 22:29 被阅读0次

    变量是任何一门编程语言的基础,每一门语言的变量定义风格也不尽相同,我们来看看 Go 语言定义变量的方式。

    全局变量

    Go 语言中使用 var 关键字定义全局变量,格式为:

    var variableName type = value

    // 注意同 C 和 Java 不一样的是,Go 语言把变量类型放在了变量名的后面 
    var a int  = 1 
    
    // 并行定义多个全局变量
    var a, b, c int = 1, 2, 3 
    
    // 具有初始值的变量定义可以省略类型
    var a, b, c = 1, 2, 3
    
    // 全局变量可以使用简写
    var (
        a = "hello"
        b = true
        c = 3
        // a, b, c = 1, 2, 3
    )
    

    局部变量

    在方法体内,我们可以把 var 关键字省略,变成 := 形式,它表示变量的「自动类型推导 + 赋值」

    package main
    
    import "fmt"
    
    func main() {
        a := 1
        fmt.Println(a)
    }
    // 1
    
    // 我们注意一个特殊的变量 _(下划线),上一节中也有说到,其实 _ 用在方法体内作为方法返回值的接收是最常见的用途
    func main() {
        a, _ := 1, 3
        fmt.Println(a)
    }
    // 3被抛弃
    

    全局变量和局部变量的使用看业务,一个变量多处使用可以使用全局变量,如果只是方法体内或者循环判断里用得到那就直接用局部变量即可。

    如果全局变量的首字母大写,那么它就是公开的全局变量,也叫公有变量;如果全局变量的首字母小写,那么它就是内部的全局变量,也叫私有变量。内部的全局变量只有当前包内的代码可以访问,外面包的代码是不能看见的。

    常量

    Go语言提供了常量关键字 const,特征是不可修改,定义时必须初始化。

    const a int = 1 
    
    // 支持同时设置多个常量
    const (
        a = "hello"
        b = true
        c = 3
    )
    

    以上,Go 语言的三种变量就简单介绍完了,接下来我们看看 Go 语言有哪些类型

    Go常见类型

    布尔型:bool
    长度为1字节,取值范围:true,false,注意不可以用数字代替
    
    整型:int / uint
    会根据系统决定是32位还是64位,从而决定占4字节还是8字节;int 表示有符号整数,可以表示正负;
    uint 表示无符号整数,只能表示非负整数
    
    8位整型:int8 / uint8
    长度为 1 字节,取值范围:-128~127 / 0~255;
    取值范围计算: 比如 int8 ,取值范围就是 2^8 = 256,然后正负各一半,中间有个0,
    所以范围是 -128 ~ 127;uint8 也是这么算,只不过没有负数,从0开始,所以范围是 0 ~ 255。
    
    16位整型:int16 / uint16
    长度为 2 字节,取值范围:-2^15 ~ 2^15-1 / 0 ~ 2^16-1
    
    32位整型:int32 / uint32
    长度为 4 字节,取值范围:-2^31 ~ 2^31-1 / 0 ~ 2^32-1
    
    64位整型:int64 / uint64
    长度为 8 字节,取值范围:-2^63 ~ 2^63-1 / 0 ~ 2^64-1
    
    字符串类型:string
    
    字节型:byte(uint8 的别名)
    长度为 1 字节,取值范围:0~255
    
    字符型:rune(int32 的别名)
    长度为 4 字节,取值范围:0~255,用于存放 Unicode 码点
    
    浮点型:float32 / float64
    长度为 4/8 字节,小数点位置:7/15 位小数,默认是float64
    
    负数:complex64 / complex128
    长度为 8/16 字节,这个基本用不上吧。。。
    
    指针类型:uintptr
    可以保存指针的无符号整数型,根据操作系统决定32位还是64位
    
    引用类型:slice / map / chan
    这三者是需要通过 make 来创建才能使用
    
    其他:array、struct、func、interface、error
    

    上述罗列了 Go 语言中的类型,需要注意的一点是,这些类型的变量之间不允许互相赋值或操作,不然会在编译时引起编译器报错。比如:

    func main() {
        var a int
        var b int8
        c := a + b
    }
    // invalid operation: a + b (mismatched types int and int8)
    

    另外,Go 的字符串可以理解为字节串,由于 Go 采用 UTF-8 编码,一个英文占一个字节,一个中文占3个字节,所以无法直观的定位某个字符,从而引申出字节型 byte 和字符型 rune,这个后续再展开讨论。

    类型零值

    接下来看看类型的零值。这里零值不等于空值,而是变量声明后的默认值;通常情况下分为以下几种

    值类型: 0
    布尔型: false
    字符串: ""
    

    Go 关键字

    这里实名表扬一下,Go 的关键字比 Java 等其他语言少太多了~ 不用记住,混个眼熟就行

    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
    

    iota枚举

    Go 语言内置了一个特殊的关键字 iota,这个关键字用来声明enum的时候采用,它默认开始值是0,后续每增加一行加1,下面看下代码实现

    // 只要第一个声明了 iota,后续的变量会自动累加
    // iota 在同一行值相同
    const (
        a       = iota             //a=0
        b       = "bbb"
        c       = iota             //c=2
        d, e, f = iota, iota, iota //d=3,e=3,f=3
        g       = iota             //g = 4
    )
    
    

    本章小结

    这一节主要是讲了 Go 语言中三种变量以及变量的不同定义方式;接下来了解了 Go 语言的类型系统,除了常见的基本类型还简单介绍了一些扩展类型以及类型的零值等,这里先混个眼熟,后面我们用得上的时候再去研究;后面捎带了一下 Go 的关键字 和 iota 枚举。下一节我们开始学习 Go 语言的循环控制流,这一节很简单,比你学的其他语言都简单~

    导航

    相关文章

      网友评论

        本文标题:1、Go语言的变量与类型.md

        本文链接:https://www.haomeiwen.com/subject/uauycctx.html