Go语言学习Day2:注释与变量

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪)
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

      • 1、注释
        • ①为什么要写注释?
        • ②单行注释
        • ③多行注释
      • 2、变量
        • ①变量的定义
        • ②交换
        • ③变量的本质
        • ④匿名变量
        • ⑤变量的作用域
        • ⑥常量
        • ⑦iota
      • 3、总结

1、注释

①为什么要写注释?

官方点儿来说,在编程中,注释是用来解释代码的目的和功能,以及某些实现的逻辑和原因。注释能够帮助其他开发者更好地理解和维护代码,同时也是自己未来回顾代码时的重要提示。良好的注释习惯可以提高代码的可读性和可维护性。

在咱们日常生活与工作中,写注释的作用无非两点:

  • 自己看得懂

自己看得懂,是因为咱们开发一个项目,工程量大,代码量很多,如果不加注释,过了一段时间,就会感叹自己写了什么,看的两眼懵懵。如果加了注释,一看这个代码是做这个的,功能比如是增删改查等等,立马就清晰明了了。

  • 别人看得懂

别人看得懂,在于在公司企业里,虽然会要求有独立开发的能力,但是实际上大厂往往分工很细,团队一起完成,这样也就涉及到了团队之间的项目对接,这个时候,你把未注释的代码发过去,对面微微一笑,显然,可读性比较差。因此,注释也要让别人能看懂咱们写的代码。

②单行注释

Go语言中的单行注释使用 // 符号。例如:

// 这是单行注释
// 输出Hello,World!
fmt.Println("Hello, World!")
③多行注释

多行注释或块注释可以使用 /**/ 包裹一段文字。例如:

/*
这是一个多行注释。
可以跨越多行。
同样实现的是 输出Hello,World!
*/
fmt.Println("Hello, World!")

一个小案例,使用go语言输出Hello World!:

//Code_流苏(CSDN)
package mainimport "fmt"//单行注释
/*多行注释 与C、C++相同*/
func main() {fmt.Println("Hello World!")
}

image-20240326001025785

2、变量

①变量的定义

在Go语言中,变量可以通过 var 关键字来定义,格式为 var 变量名 变量类型。Go语言也支持类型推断,所以可以不显式声明变量类型。例如:

var a int = 10  // 显式类型声明
var b = 20      // 类型推断\

案例1 :var定义单个变量

package mainimport "fmt"func main() {// var用来声明变量name string是变量的类型var name string = "yueliusu"//给name重新赋值name = "123"//输出打印name,并换行fmt.Println(name)
}

image-20240326002946524

案例2 :var定义多个变量

package mainimport "fmt"func main() {//var关键字定义多个变量var (name stringage  intaddr string)name = "yueliusu"age = 21addr = "henan"fmt.Println(name, age, addr)
}

image-20240326112340314

案例3 :短变量声明:=方式来定义变量

在Go语言中,还可以使用短变量声明的方式来定义变量,例如在函数内部使用:=来进行变量的定义和初始化。但在全局作用域中,或者需要显式指定变量类型的场景下,就需要像上述示例那样使用var关键字进行定义。

package mainimport "fmt"func main() {//:= 短变量声明  自动推导 自动声明变量的类型name := "yueliusu" //通过所赋的值,自动识别出为string类型,说明name要声明为string类型age := 21          //通过所赋的值,自动识别出为int类型,说明age要声明为int类型fmt.Println(name, age)fmt.Printf("%T,%T", name, age)
}

image-20240326112721246

②交换

在C、C++、JAVA等语言中,我们在进行变量交换的时候,一般会考虑使用临时变量,来作为交换的中间者,例如下图,我们要实现A与B交换,那么可以先将A的值给C,然后B的值给A,最后再将C的值给B,这样变量交换就完成了。

image-20240326112830139

但是在Go语言中,可以利用平行赋值的特性来交换两个变量的值,无需使用临时变量。例如:

a, b := 1, 2
a, b = b, a  // 交换a和b的值

案例:交换a,b的值,

package mainfunc main() {//var定义变量a b,将其声明为int类型,并分别赋值100 200var a int = 100var b int = 200//交换前println("交换前 a =", a, "a =", b) //a = 100 a = 200//平行赋值b, a = a, b//交换后println("交换后 a =", a, "b =", b) //a = 200 b = 100
}

image-20240326114350271

③变量的本质

在Go语言中,变量的本质是一块用于存储数据的内存空间

变量赋值实际上是改变这块内存空间存储的值

案例:打印变量

package mainimport "fmt"func main() {var num intnum = 100//打印变量的内存地址 %pfmt.Printf("num:%d,内存地址:%p \n", num, &num) //&为取地址num = 200fmt.Printf("num:%d,内存地址:%p", num, &num)// 打印内存地址的方式之一。 Print  f格式化输出// 第一个参数 输出字符串// % 占位符。// 占位符的数量,要和后面待输出的数量保持一致// %d 数字 int d// %p 内存地址,num需要取出变量的地址。// %s 字符串。// \n 换行
}

image-20240326114720960

可以看到咱们定义的变量,其实是在内存中开辟了一个空间,而这个空间里可以存放数据。如图0x开头的那就是所开辟空间的地址,而100、200则是这个空间中存放的数据。

④匿名变量

在Go语言中,匿名变量用一个下划线 _ 表示,它可以忽略函数返回值时的占位符,不占用命名空间,也不会分配内存。

_, b := 5, 7  // 忽略第一个返回值

案例:匿名变量的实现与打印输出

package mainimport "fmt"func test() (int, int) {return 100, 200
}//Go 语言中,匿名变量(或称为空白标识符)是一个特殊的变量:_。
//它用于在不需要使用到某个变量值的场合。
//使用匿名变量的好处是可以避免编译器错误,比如当函数返回多个值而你只需要其中一部分时。func main() {//_为匿名变量的显示方式//a, b := test()//fmt.Println(a, b)a, _ := test()fmt.Println(a)_, b := test()fmt.Println(b)fmt.Println(a, b)
}/*匿名变量不占用命名空间,不会分配内存,因此不存在重复定义的问题。
它通常仅用于忽略函数的返回值或忽略循环中的部分变量。*/
//在函数的调用中,每一次出现的匿名变量都是独立的,它们之间不共享值。

image-20240326115338151

⑤变量的作用域

变量的作用域是指程序中变量可以被访问的范围。在Go语言中,变量可以有三种作用域或身份:

  • 局部变量

局部变量在函数内部定义,只在该函数内部有效;

  • 全局变量

全局变量在函数外部定义,整个包都可以访问;

  • 形式参数

形式参数在函数定义中,作为函数的输入。

案例:作用域

package mainimport "fmt"// 全局变量
var name string = "zhangsan"func main() {// =表示赋值,将等号右边的值赋值给左边的值// 局部变量var age int = 18var name string = "lisi"//输出打印出来是局部变量name的值fmt.Println(name, age)//输出打印出来是全局变量name的值aaa()
}func aaa() {fmt.Println(name)
}

image-20240326115654899

此外,咱们还需要知道一个原则,变量声明中时需要注意的,就近原则

案例:就近原则

package mainimport "fmt"// Go语言程序中全局变量与局部变量名称可以相同,但是函数体内的局部变量会被优先考虑。
// string  int   float64  浮点数(小数)
var a float64 = 3.14func main() {var a float64 = 2.18fmt.Println(a) //2.18
}

image-20240326115824863

从输出结果上我们可以看出来,首先全局声明了a(全局变量),并进行了赋值,后面又在main函数中再次声明了a(局部变量),之后输出的值为后者的值2.18,也就是在一个变量同时进行全局和局部声明的话,在输出时,会就近输出。

⑥常量

在Go语言中,常量是使用 const 关键字定义的,一旦定义不能被修改。常量可以是字符、字符串、布尔或数值类型。

简单来说,常量就是不能变化的量。例如下面咱们定义一个圆周率π = 3.14,那么通过const定义后,它便不能修改了。

const Pi = 3.14

案例:常量的定义与打印输出

package mainimport ("fmt"
)func main() {//常量使用const来声明const URL string = "https://yueliusu.blog.csdn.net/" //显示定义const URL2 = "https://yueliusu.blog.csdn.net/"       //隐式定义const a, b, c = 3.14, "yueliusu", false //同时定义多个常量fmt.Println(URL)fmt.Println(URL2)fmt.Println(a, b, c)
}

image-20240326120240589

⑦iota

在Go语言中,iota 是一个特殊的常量,它用于在 const 关键字下创建一系列相关的常量。当在一个 const 块中使用 iota 时,它会自动从0开始计数,每定义一个常量,iota 的值就会自增1

package mainimport "fmt"// iota 常数计数器
// 在Go语言中,iota 是一个特殊的常量,它用于在 const 关键字下创建一系列相关的常量。
// 当在一个 const 块中使用 iota 时,它会自动从0开始计数,每定义一个常量,iota 的值就会自增1。
func main() {const (a = iota  //0b		 //1c		 //2d = "haha"//haha  (3)e		 //haha  (4)f = 100	 //100	 (5)	g		 //100	 (6)h = iota  //7i		 //8)const (j = iota //0k        //1l		//2)fmt.Println(a, b, c, d, e, f, g, h, i, j, k, l)
}

image-20240326143013279

3、总结

1.注释,给自己看也给别人看,良好习惯

2.变量的定义 var 变量名 变量类型

3.变量的赋值 变量 = 变量值

4.变量定义,短变量声明 := ,只能用在变量中,可以自动推导基本数据类型、只能用在局部变量中

5.变量的本质- 内存空间,变量的赋值-往空间里放东西

6.匿名变量 _

7.变量的作用域 :全局变量、局部变量 (同名-就近原则)

8.常量的定义和场景 (const)无法修改的值才会设置为常量,方便使用,通常使用大写

很感谢你能看到这里,如有相关疑问,还请下方评论留言。
Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
希望本篇内容能对大家有所帮助,如果大家喜欢的话,请动动手点个赞和关注吧,非常感谢你们的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

燃气官网安全运行监测系统-阀井燃气监测仪-旭华智能

近年来,燃气爆炸事故频发,造成了重大人员伤亡和财产损失。这也再次为我们敲响警钟,燃气是我们日常生活中不可或缺的能源,但其潜在的危险性也是不容小觑。因此在重要节点加装燃气阀井气体监测仪,并将数据上传到系统平台…

使用npm仓库的优先级以及.npmrc配置文件的使用

使用npm仓库的优先级以及.npmrc配置文件的使用 概念如何设置 registry(包管理仓库)1. 设置项目配置文件2. 设置用户配置文件3. 设置全局配置文件4. .npmrc文件可以配置的常见选项 概念 npm(Node Package Manager)是一个Node.js的…

C语言文件操作(详细)

⽬录 一. 为什么使⽤⽂件? 二. 什么是⽂件? 三. ⼆进制⽂件和⽂本⽂件? 四. ⽂件的打开和关闭 五. ⽂件的顺序读写 六. ⽂件的随机读写 七. ⽂件读取结束的判定 八. ⽂件缓冲区 一. 为什么使⽤⽂件? 如果没有⽂件&#…

kubernetes-k9s一个基于Linux 终端的集群管理工具

效果预览 下载 github 版本 此文档使用的版本是 v0.32.4,下载地址: https://github.com/derailed/k9s/releases/download/v0.32.4/k9s_linux_amd64.rpm 安装 rpm -ivh k9s_linux_amd64.rpm使用 启动 终端直接执行命令 k9s k9s基本操作 1 选择目…

“选项按钮”的妙用

背景:是否厌倦了下拉菜单?现在可以使用更好玩的选项按钮了。 操作:点击“开发工具”,插入“选项按钮”的窗体控件。 插入一个选项按钮以后,右键“设置控件格式”,设定单元格链接,比如说本次设定…

车载以太网AVB交换机 TSN交换机 时间敏感网络 6端口 百兆 SW100TSN

SW100 TSN时间敏感网络AVB交换机 为6端口百兆车载以太网交换机,其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100/1000BASE-T标准以太网(RJ45接口),可以实现纳米级时间同步,车载以太网多通道交换,Bypass数据采集和监控等功能&…

代码格式上对齐的方法

昨天看到课程老师在sourceinsight中的操作,他不到两秒就把每行缩进字符数不同的代码行给统一对齐了。 我觉得这个很有用,虽然只是一个操作问题,而非技术问题。后来查了网络,记录一下这个方法。 比如有下面每行缩进不一样的代码&…

亲身体验!人工智能对话无障碍 —— BRClient 使用指南

01 概述 BRClient 这个名字来源于“Bedrock Client”的简称,寓意是为用户提供一个坚实的基础。BRClient 作为一个开源的桌面应用,为用户提供了友好的图形界面,让每个人都能够轻松访问和使用 Claude 3 的强大功能。用户可以自定义 Claude 3 的…

Web APIs知识点讲解(阶段三)

DOM- 节点操作 一.节点操作 1.DOM节点 目标:能说出DOM节点的类型 DOM节点 DOM树里每一个内容都称之为节点 节点类型 元素节点 所有的标签 比如 body、 div html 是根节点 属性节点 所有的属性 比如 href 文本节点 所有的文本 document树: 总结&…

Wireshark 抓包

启动时选择一个有信号的网卡双击打开,或者在 捕获选择里打开选择网卡。 然后输出下面的规则就可以抓到报文了。 最上面的三条是建立连接时的三次握手, 下面是发送数据hello 对应两条数据 最下面的4条是断时的4次挥手

Si24R2F+2.4GHz ISM 频段低功耗无线集成嵌入式发射基带无线

Si24R2F在原有Si24R2F的基础上:优化了射频性能、增加NTC测温、增加自动唤醒间隔、优化了蓝牙性能。在固定资产管理、冷链物流和牛羊畜牧业标签市场更具竞争力。 在原有SI24R2E做白卡/校徽的群体,在新的卡片机应用,更加推荐用SI24R2F&#xff…

[串联] MySQL 存储原理 B+树

InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 存储引擎。 InnoDB 对每张表在磁盘中的存储以 xxx.ibd 后缀结尾,innoDB 引擎的每张表都会对应这样一个表空间文件,用来存储该表的表结…

AXI-Stream——草稿版

参考自哔站:FPGA IP之AXI4-Lite AXI4-Stream_哔哩哔哩_bilibili 信号 传输层级从小到大 包(----------transfer--transfer--------)------delay--------包(----------transfer--transfer--------) TKEEP和TSTRB共同决定了是哪种数据流

Cocos游戏开发中的动态切割图片

点击上方亿元程序员+关注和★星标 引言 Cocos游戏开发中的动态切割图片 近日,由于笔者发现了另外一个非常有趣的画线切割小游戏,沉迷于夺回秋雅无法自拔,导致断更了一周多。(尊嘟假嘟) 言归正传,游戏体验过之后,非常感兴趣这个游戏中的切割效果是如何实现的呢? 今天…

【剑指offer】顺时针打印矩阵

题目链接 acwing leetcode 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 数据范围矩阵中元素数量 [0,400]。 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出:[1,2,3,4,8,12,11,10,9,5,6,7] 解题 …

【AutoML】一个用于图像、文本、时间序列和表格数据的AutoML

一个用于图像、文本、时间序列和表格数据的AutoML AutoGluon介绍安装AutoGluon快速上手 参考资料 AutoGluon自动化机器学习任务,使您能够在应用程序中轻松实现强大的预测性能。只需几行代码就可以训练和部署有关图像,文本,时间序列和表格数据…

记录在项目中引用本地的npm包

1、先把需要的包下载下来,以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…

mysql安装及操作

一、Mysql 1.1 MySQL数据库介绍 1.1.1 什么是数据库DB? DB的全称是database,即数据库的意思。数据库实际上就是一个文件集合,是一个存储数据的仓库,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行…

【pytest、playwright】allure报告生成视频和图片

目录 1、修改插件pytest_playwright 2、conftest.py配置 3、修改pytest.ini文件 4、运行case 5、注意事项 1、修改插件pytest_playwright pytest_playwright.py内容如下: # Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Ver…

Maven package classifier测试

package package阶段会生成一个jar文件,包含了main文件夹下编译后的资源。可作为其他项目的依赖引用。 classifier install后,在仓库中存放的artifact的最终文件,即将package最终文件存入仓库,若在打包时需要加以定制&#xff…