• Go语言基础01 变量


    前言

    学无止境,无止境学。大家好,我是张大鹏,之前在抖音有5万多粉丝,不过现在不拍视频,专心写公众号了。笔者目前是高级Python工程师,之前是全栈工程师,主要擅长Golang和Python开发,对于Java,Vue,React也有一些研究。工作之余,喜欢学习和分享,希望能够通过此公众号"张大鹏520",将自己学到的东西分享给大家,和大家一起交流,一起成长,一起进步。

    今天要给大家分享的是《Go语言基础01 变量》,这是一个系列的教程,从零基础到项目实战。在本教程中,我会给大家介绍Go语言中变量相关的知识。比如如果定义变量,如何定义常量,如何实现枚举,如何实现变量类型转换等。

    如果大家需要本教程的PDF电子书或者完整的源码,可以在文末找到获取方式哈。

    变量的零值

    概述

    Go语言中的变量,即使你不赋值,也是有一个初始值的。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    // 变量的零值
    func main() {
    	var a int    // 整数的零值是0
    	var s string // 字符串的零值是1
    	fmt.Printf("%d %q\n", a, s)
    }
    

    常见类型的零值

    平时我们最常用的变量类型有整数类型,字符串类型,布尔类型和浮点类型,他们的初始值分别是:

    • 整数类型:0
    • 字符串类型:“”
    • 布尔类型:false
    • 浮点数类型:0

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 变量有自己的初始值
    	var (
    		a int
    		b string
    		c bool
    		d float64
    	)
    
    	// 查看变量的初始值
    	fmt.Println("整数类型的初始值是:", a)
    	fmt.Printf("字符串类型的初始值是:%q\n", b) // %q会给字符串加上双引号
    	fmt.Println("布尔类型的初始值是:", c)
    	fmt.Println("浮点数类型的初始值是:", d)
    }
    

    输出结果:

    整数类型的初始值是: 0
    字符串类型的初始值是:""  
    布尔类型的初始值是: false
    浮点数类型的初始值是: 0  
    

    特殊类型的零值

    除了常用的基本数据类型,还有slice切片类型,map字典类型,struct结构体类型,interface接口类型,它们的零值分别是:

    • slice切片类型:[]空切片
    • struct结构体类型:{}空结构体
    • interface接口类型:nil空指针
    • map字典类型:map[]空字典

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 变量有自己的初始值
    	var (
    		a []int             // slice切片类型
    		b map[string]string // 字典类型
    		c struct{}          // 结构体类型
    		d interface{}       // 接口类型
    	)
    
    	// 查看变量的初始值
    	fmt.Println("slice切片类型的初始值是:", a)
    	fmt.Println("字典类型的初始值是:", b) // %q会给字符串加上双引号
    	fmt.Println("结构体类型的初始值是:", c)
    	fmt.Println("接口类型的初始值是:", d)
    }
    

    输出结果:

    slice切片类型的初始值是: []
    字典类型的初始值是: map[]
    结构体类型的初始值是: {}
    接口类型的初始值是: <nil>
    

    变量赋初值

    变量在定义的时候赋值

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 变量在定义的时候就可以给定一个值
    	var num int = 33
    	fmt.Println(num)
    }
    

    在一行定义并赋初值

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 可以在一行定义并赋初值
    	var a, b, c int = 1, 2, 3
    	fmt.Println(a, b, c)
    }
    

    变量的类型推导

    单个变量的类型推导

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 变量的类型可以省略不写,Go会根据值自动推导类型
    	var a = 123
    	fmt.Println(a)
    }
    

    多个变量的类型推导

    即使一行有多个变量,哪怕变量的类型不相同,Go也能够自动推导。

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 自动推导:一行的变量类型相同
    	var a, b, c = 1, 2, 3
    	fmt.Println(a, b, c)
    
    	// 自动推导:一行的变量类型不同
    	var aa, bb, cc = true, 1.33, "ok"
    	fmt.Println(aa, bb, cc)
    }
    

    变量的简写

    单个变量的简写

    变量的声明方式,除了显示声明,类型推导,如果是在函数内部的变量声明,还可以使用简写方式。

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	// 简写变量
    	a := 11
    	fmt.Println(a)
    }
    

    多个变量的简写

    同样地,除了支持单变量的简写,多个变量也同样支持。

    示例代码:

    package main
    
    import "fmt"
    
    func main() {
    	a, b, c := 11, true, "ok"
    	fmt.Println(a, b, c)
    }
    

    全局变量

    声明全局变量

    在函数外面赋值的变量,在整个包内都可以使用。如果这个变量名的首字母是大写的,那么在包外也可以通过导入来使用。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    var (
    	// 在函数的外面赋值的变量,是全局变量
    	// 不是严格的全局变量,只在本包内使用
    	aa = 3
    	ss = "kkk"
    	bb = true
    )
    
    func main() {
    	fmt.Println(aa)
    	fmt.Println(ss)
    	fmt.Println(bb)
    }
    

    一行多个全局变量

    除了分开多行写,全局变量照样支持在一行合并声明。不过需要注意的是,全局变量并不能够支持简写方式。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    var (
    	a, b, c = 11, true, "ok"
    )
    
    func main() {
    	fmt.Println(a, b, c)
    }
    

    常量

    常量的定义

    使用const可以定义一个常量。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	const PI = 3.14159
    	fmt.Println(PI)
    }
    

    多个常量共用一个const

    如果同时声明多个常量,可以使用一个const关键字合并,而不需要每个都单独使用一个const关键字。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	const (
    		A = 11
    		B = 22
    		C = 33
    	)
    
    	fmt.Println(A, B, C)
    }
    

    枚举

    定义枚举

    在Go中,使用const和iota配合,能够实现枚举类型。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	const (
    		A = iota // 0
    		B        // 自动+1
    		C        // 自动+1
    	)
    
    	fmt.Println(A, B, C)
    }
    

    输出结果:

    0 1 2
    

    弃用枚举值

    枚举值是可以弃用的,通过给某个枚举值赋值为_进行弃用。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	const (
    		A = iota // 0
    		_        // 弃用1
    		_        // 弃用2
    		_        // 弃用3
    		B        // 4
    		C        // 5
    	)
    
    	fmt.Println(A, B, C)
    }
    

    输出结果:

    0 4 5
    

    枚举值的计算

    枚举值是可以参与计算的,比如让第一个枚举值加10000,后面的枚举值都会自动自增且加上原本的10000。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	const (
    		SUCCESS = iota + 10000 // 10000
    		NOT_FOUND
    		ARG_ERROR
    	)
    
    	fmt.Println(SUCCESS)
    	fmt.Println(NOT_FOUND)
    	fmt.Println(ARG_ERROR)
    }
    

    输出结果:

    10000
    10001
    10002
    

    枚举计算机单位常量

    我们可以来实现一个比较有用的真实案例,使用枚举定义kb,mb,gb等计算机单位。

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	const (
    		B = 1 << (10 * iota)
    		KB
    		MB
    		GB
    		TB
    		PB
    	)
    
    	fmt.Println(B)
    	fmt.Println(KB)
    	fmt.Println(MB)
    	fmt.Println(GB)
    	fmt.Println(TB)
    	fmt.Println(PB)
    }
    

    输出结果:

    1
    1024
    1048576
    1073741824
    1099511627776
    1125899906842624
    

    类型转换

    整数转浮点数

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 11
    	b := float64(a)
    	fmt.Println(a, b)
    }
    

    浮点数转整数

    示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := 11.11
    	b := int(a)
    	fmt.Println(a, b)
    }
    

    求直角三角形边长

    需求,利用勾股定理,已知两个直角边a=33,b=44,求第三边c的长度。

    示例代码:

    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func main() {
    	a, b := 33, 44
    	c := int(math.Sqrt(float64(a*a) + float64(b*b)))
    	fmt.Println(c)
    }
    

    输出结果:

    55
    

    结语

    关注我不迷路,欢迎关注我的微信公众号"张大鹏520",如果您对此文章感兴趣,欢迎点赞收藏,留言评论。

    文中所有代码,只需要打赏20元,然后留言评论“已打赏”,即可获取哦。

    本文的PDF电子书版,只需要打赏3元,然后留言评论“已打赏”,即可获取哦。

    写文章不容易,不喜勿喷哈,如果有想要学编程,学项目,或者在工作中有项目难以单独完成需要提供帮助的同学,欢迎私信我哈。生活不易,想要利用学到的编程知识,业余赚点零花钱。

    接项目:网站开发,APP开发,各种管理系统开发。

    带徒弟:Python编程教学,Golang编程教学,前端编程教学。

    谢谢您!!!

  • 相关阅读:
    js 正则表达式
    【iOS】面试整理
    强化学习基础
    JavaScript基础大总结
    武汉链(基于ETH)BSN官方DDC链上数据解析
    django REST框架- Django-ninja
    ngx_http_set_response_header阅读
    来测测你的智力——智力题
    电子电子架构——AUTOSAR信息安全机制有哪些(下)
    cors基础,响应头设置
  • 原文地址:https://blog.csdn.net/qq_37703224/article/details/127116765