• Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇


    学习前的铺垫

    如果一门语言是动态语言,那数据类型不是很重要,但当待学习的语言是静态语言时,数据类型的重要性就凸显出来了,而且必须作为必备只是进行学习。

    在 Go 语言中,数据类型主要用于声明变量和函数返回值的类型,在声明时是为了把数据所需的内存规定出来,这样可以充分利用内存。

    因为有其它语言的基础,所以直接学习 Go 中的各类型即可。

    Go 数字类型

    数字类型分为三种,即整型,浮点型和其它数字类型,其中整型又分为:

    • uint8:无符号 8 位;
    • uint16:无符号 16 位;
    • uint32:无符号 32 位;
    • uint64:无符号 64 位;
    • int8:有符号;
    • int16:有符号;
    • int32:有符号;
    • int64:有符号。

    浮点类型,包含两种,分别是 float32float64,还有 complex64complex128

    其它数字类型说明如下:

    • byte:与无符号 int,即 int8 类似;
    • rune:无符号 int32 类似;
    • uint:32 位或者 64 位;
    • int:与 unit 类似;
    • uintptr:无符号整数。

    以上都是数字类型,除此之外还有更多内容,都将在后文重点学习。

    Go 变量

    Go 中变量的声明,在上一篇博客中我们已经涉及,这次我们展开说说。

    首先,可以一次申请多个变量:

    var bianliang,bianlaing type
    
    • 1

    参考下述测试代码:

    package main
    
    import "fmt"
    
    func main() {
    	var a string = "梦想橡皮擦"
    	fmt.Println(a)
    
    	var b, c int = 1, 2
    	fmt.Println(b, c)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在声明变量的时候如果没有给初始值,系统自动赋零值,例如 int 类型为 0,float 类型为 0.0 ……(上篇博客已经学习,可以回顾一下)

    目前你仅学习了数字类型,所有数字类型的零值,都是 0。

    Go 中的变量声明也可以省略变量类型,即下述代码也可正常运行。

    package main
    
    import "fmt"
    
    func main() {
    
    	var a, b = 1, 2
    	fmt.Println(a, b)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    系统自动推断变量类型。

    变量声明简化写法

    使用 var 声明变量时,还可以简写,例如:

    name := "梦想橡皮擦"
    
    • 1

    该写法叫做推导声明写法,编译器会根据右值类型推断左值类型,而且需要注意,使用 := 需要左值变量必须在之前没有没定义过,否则就会报错,测试代码如下:
    在这里插入图片描述
    在 Go 如果声明了一个变量,但是未使用,同样会报错,例如下述代码。

    package main
    
    import "fmt"
    
    func main() {
    
    	b := 3
    	fmt.Println("不使用 b")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    错误信息是 7:2: b declared but not used,这点非常有趣,在其它语言是没有类似的验证的,但这保证了无用变量的声明和空间的浪费。

    并行/同时赋值

    在 Go 中,可以同时对多个变量赋值,测试代码如下所示。

    package main
    
    import "fmt"
    
    func main() {
    
    	a, b, c := 3, 2, 1
    	fmt.Println(a, b, c)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    相应的如果希望交换两个变量值,也可以像 Python 一样,直接进行交换。

    a,b = b,a
    
    • 1

    这里先认识一个特殊的符号,_ 空白标识符,该变量可以用于抛弃值,例如下述代码。

    _,b = 1,2
    
    • 1

    其中 1 会被抛弃,其中 _ 实际是一个只写变量,不可读,该变量也被叫做匿名变量,它不占内存空间,也不会分配内存,匿名变量可以多次声明,即下述代码:

    _, b := 1, 2
    _, a := 1, 2
    
    • 1
    • 2

    Go 常量

    常量就是不可被修改的变量,Go 常量支持的数据类型有布尔型,数字型,字符串型,定义语法格式是:

    const bianliang [type] = value
    
    • 1

    其中 type 被声明叫做显式定义,无 type 表示隐式声明。

    多个相同类型的声明可以简写成一行。

    const name,my_str = "橡皮擦","一个普通的字符串"
    
    • 1

    Go 中有一个特殊常量 iota,是一个可以被编译器修改的常量。

    iota 在 const 关键字出现时被充值为 0,const 中每新增一行常量声明,iota 增加一次计数,所以将 iota 当成 const 语句块的行索引也可以。

    Go 运算符

    运算符知识点在任何语言都中非常类似,一元的有:+-*/%++--,在 Python 中不见的自增和自减操作符又重新出现了。

    上述操作符一般叫做算数运算符,除此之外还有关系运算符,即大于小于等内容。

    逻辑操作符也是三个,分别是 逻辑与 &&,逻辑或 ||,逻辑非 !

    位运算符可以先略过,后续用到在考虑复习一下。

    在接下来就是赋值运算符,即与 = 号相关的运算符,也是通用知识点,直接掌握了。

    重点要说明的是下述两个特殊运算符,这里与 C 语言同源,即 & 取地符,* 指针变量标记。

    func main() {
    
    	_, b := 1, 2
    	// _, a := 1, 2
    	fmt.Println("变量 b 的地址是", &b)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    声明一个 int 类型的指针变量,使用代码如下所示。

    _, b := 1, 2
    var ptr *int
    // 赋值
    ptr = &b
    
    • 1
    • 2
    • 3
    • 4

    今天的最后一个知识点是运算符的优先级,如果你有其它语言基础,这部分自动忽略即可。

  • 相关阅读:
    Socks5代理IP在网络安全与跨境电商中的应用
    深度学习之卷积模型应用
    邦芒攻略:新手求职面试需要准备的材料
    Math 对象+JS数组求和的常用方法+ indexOf+js计算数组中每个元素出现的次数+while循环语句死循环
    【深入浅出Java并发编程指南】「难点 - 核心 - 遗漏」让我们一起探索一下CyclicBarrier的技术原理和源码分析
    AI推介-大语言模型LLMs论文速览(arXiv方向):2024.01.10-2024.01.20
    数据分析案例一使用Python进行红酒与白酒数据数据分析
    【学习笔记】《Python深度学习》第二章:神经网络的数学基础
    详细javaweb基础
    yolov5剪枝实战5:模型剪枝和fine-tune
  • 原文地址:https://blog.csdn.net/hihell/article/details/125973335