当前位置: 首页 > news >正文

GO 语言学习 之 变量和常量

变量 

       变量顾名思义,存储的内容是不确定,只有在执行赋值后那一刻是确定的,因为你也不知道赋值后会不会被修改。

变量定义方式:

  1. var <变量名> <变量类型> 
  2. <变量名> := <变量值>
  3. var (a int, b, c....)

示例:

package mainimport "fmt"func main() {var a int  // 定义一个整型变量,默认是零值 (整形的零值是 0)b := 1     // 定义一个整型变量,并赋值为 1fmt.Printf("a = %d b = %d\n", a, b)// 定义相同类型的变量var (c,d,e = 10)fmt.Printf("c = %d d = %d e = %d\n", c, d, e)// 定义相同类型的变量var f, g, h string = "hi", "boy", "go"fmt.Printf("f = %s g = %s h = %s\n", f, g, h)// 定义多个不同类型的变量,我想通常没人这么写吧,也保不齐会有var i int, j float64, k []intfmt.Printf("i = %d j = %f k = %v\n", i, j, k)// 定义不相同类型的变量var (l string,m []int,n = 10)fmt.Printf("l = %s m = %v n = %d\n", l, m, n)// 多点几次看看有没有意外收获var ch chan intfmt.Printf("ch %v\n", ch)fmt.Printf("ch %v\n", ch)
}

扩展知识:

1. 各种数据类型的零值

        整数类型: 0

        浮点数类型: 0.000000

        复数类型:   0+0i

        布尔类型: false

        字符串类型: ""

        指针类型: nil

        切片类型 : []

        映射类型: <nil>

        chan类型:<nil>

        建议自己打印验证一下吧。

2. go 代码里面的变量,如果你定义了,你就得用,否则就会报错

3. 一种特殊的变量:下划线开头的变量, 声明变量可以不被使用,编译不报错

作用域

全局变量

        定义在函数外部的变量,其作用域是整个包。在同一个包内的所有函数都可以访问全局变量(包可以理解为同一个目录里面的所有go文件,都可以使用全局变量,不包含子目录)

局部变量

  1. 定义在函数内部的变量,其作用域仅限于函数内部或代码块内部。
  2. 定义在语句块内部的变量,作用域仅限于语句块内部使用

扩展知识:

  • 包级作用域:在 Go 语言中,全局变量具有包级作用域,即在定义它们的包内的任何地方都可以访问。只要在包内的函数、方法等代码块中,都能直接使用包内的全局变量(如果变量未导出,在包外无法访问)。
  • 不同包之间隔离:不同包之间的全局变量是相互隔离的,一个包无法直接访问另一个包的未导出全局变量,这有助于实现封装和模块化编程,使得每个包可以独立维护和演进,而不会对其他包造成意外影响。

常量

        常量可以理解为,一种特殊的变量,但其值是不会发生变化的,且不允许修改。这里只是让你这么理解不要真的这么使用。

常量定义方式:

  1.         const <常量名> = <常量值>
  2.         const (<常量名1>, <常量名2>. ...)

示例:

package mainimport "fmt"const PIE = 3.14const (MAN   = 1,WOMAN = 2,
)const (ERR_TYPE          = "error type"ERR_INPUT_PARAMS  = "error input PARAMS"ERR_OUTPUT_PARAMS = "error input PARAMS"ERR_VALUE_RANGE   = "outof range"
)const (A = iotaB,C,D
)func main() {fmt.Printf("A %d B %d ERR_TYPE %s", A, B, ERR_TYPE)
}

扩展知识:

  1. 常量定义,未使用,可以编译成功,且运行正常
  2. 常量只能使用基本数据类型的值,不能使用复杂类型(切片,接口,结构体,数值等)

作用域

包级常量

        在包内但在函数外部定义的常量,称为包级常量。包级常量的作用域是整个包。在同一个包内的任何函数、方法或其他代码块中都可以直接访问该常量。如果包被其他包导入,且常量名是导出的(首字母大写),那么其他包也可以访问这个常量。

局部常量

        在函数内部或代码块内部定义的常量,称为局部常量。局部常量的作用域仅限于其定义所在的函数或代码块。一旦程序执行离开该函数或代码块,该常量就超出了作用域,无法再被访问。

http://www.lqws.cn/news/544303.html

相关文章:

  • 神经形态计算与人工智能的融合:从生物启发到智能跃迁的IT新纪元
  • 本地部署Dify+Ragflow及使用(一)
  • PHP语法基础篇(六):数组
  • 通达信 稳定盈利多维度趋势分析系统
  • 鸿蒙OS开发IoT控制应用:从入门到实践
  • 概述-2-MySQL安装及启动-1-Dcoker安装MySQL
  • vue将页面导出pdf,vue导出pdf ,使用html2canvas和jspdf组件
  • Jmeter并发测试和持续性压测
  • 手机屏亮点缺陷修复及相关液晶线路激光修复原理
  • 利用云雾自动化在智能无人水面航行器中实现自主碰撞检测和分类
  • UI前端大数据处理实战技巧:如何有效应对数据延迟与丢失?
  • PILCO: 基于模型的高效策略搜索方法原理解析
  • HarmonyOS 5智能单词应用开发:记忆卡(附:源码
  • JVM 的 Dump分析以及 GC 日志
  • Vulkan模型查看器设计:相机类与三维变换
  • 【Python数据库】Python连接3种数据库方法(SQLite\MySQL\PostgreSQL)
  • 人工智能-基础篇-4-人工智能AI、机器学习ML和深度学习DL之间的关系
  • 人工智能-基础篇-3-什么是深度学习?(DL,卷积神经网络CNN,循环神经网络RNN,Transformer等)
  • fish安装node.js环境
  • 【CMake基础入门教程】第八课:构建并导出可复用的 CMake 库(支持 find_package() 查找)
  • 视觉疲劳检测如何优化智能驾驶的险情管理
  • Java练习题精选16-20
  • C++01背包问题
  • 汇总表支持表头分组,查询组件查询框可以调整高度,DataEase开源BI工具v2.10.11 LTS版本发布
  • ESP32 008 MicroPython Web框架库 Microdot 实现的网络文件服务器
  • A Machine Learning Approach for Non-blind Image Deconvolution论文阅读
  • 金蝶云星空客户端自定义控件插件-WPF实现自定义控件
  • 电磁波是如何传递信息的?
  • 鸿蒙 List 组件解析:从基础列表到高性能界面开发指南
  • 前端 E2E 测试实践:打造稳定 Web 应用的利器!