【Go语言】| 第2课:变量声明与、初始化、匿名变量和作用域

在这里插入图片描述

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。
🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以直接站内私信我或文章底部名片。
🖥 随时欢迎您跟我沟通建联,一起交流,一起成长、进步!

本文目录

  • 一、变量声明
  • 二、不指明变量类型
  • 三、批量声明方式
  • 四、简短格式
  • 五、初始化变量与匿名变量
  • 六、变量交换赋值
  • 七、变量作用域
    • 7.1 局部变量
    • 7.2 全局变量

一、变量声明

Go语言是静态类型语言,变量是有明确类型要求的,编译器也会检查变量类型的正确性。

Go的标准格式如下,以var开头,行尾不需要分号:
var 变量名 变量类型

var csdn int //例如声明了一个csdn的int变量

在C语言中,声明变量如下,这样只有csdn是指针,但是zhou不是指针。如果采用go的一种形式,

int *csdn,zhou

在Go中,当一个变量被声明之后,系统会自动赋予该类型的零值,Go中所有的内存都是经过初始化的。

比如说下方的代码示例:

在这里插入图片描述

二、不指明变量类型

如果没有声明变量类型,Go会编译的时候自动推到类型。

比如说下面的例子,其中printf是表示带有格式化的输出。

在这里插入图片描述

三、批量声明方式

Go给开发者提供了批量声明的方式,比如下面的例子。

在这里插入图片描述
我们也可以查看他们的初始值:
在这里插入图片描述

四、简短格式

我们可以采用如下的格式进行声明

i:=1 //直接省略掉了var

这种形式存在一定的限制:
1、只能定义在函数内部。
2、不能提供数据类型。
3、定义变量,同时显式初始化。

五、初始化变量与匿名变量

不可以重复声明一个变量,会提示报错。

在这里插入图片描述

但是在网络连接时候存在特例,net网络包的返回值有两个。

但是在进行返回值的时候,只要左边的变量不一样,另一个变量声明可以是一样的。这里的err就是重复定义了。

也就是多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,但是编译器也是不会报错的。

在这里插入图片描述

如果不想接受err的值,可以有_来表示(即下划线),这就是匿名变量。

如下代码所示:

conn,_:=net.Dial("tcp","127.0.0.1:8080")

匿名变量不占用命名空间,也不会分配内存,可以重复声明使用的。

任何变量都可以赋值给匿名变量,匿名变量也称为空白标识符,但是任何赋值给这个匿名变量的值都会被抛弃,这些值后面不可以继续使用,也不可以使用这个标识符作为变量对其他变量进行赋值或者运算。

六、变量交换赋值

Go语言中,提供了一种非常方便的赋值交换方式,如下代码所示。

在这里插入图片描述

七、变量作用域

  • Go语言有一个很重要的性质,就是编译的时候会进行变量检测,如果出现了没有使用过的变量,就会报编译错误。

7.1 局部变量

顾名思义,函数体内声明的变量称之为局部变量,作用域只在函数体内部,函数的参数还有返回值都是局部变量。

局部变量不是一直存在的,只在定义它的函数被调用后存在,调用结束后这个局部变量就会被销毁。

7.2 全局变量

全局变量只需要在函数体外进行声明即可,只需要在一个源文件中进行定义,就可以在所有的源文件中进行使用,其他的源文件只需要import这个包含全局变量的文件即可。

全局变量必须以var开头的,想要在外部的包中进行使用,必须首字母大写。

值得一提的是,局部变量与全局变量可以相同,但是函数体内部的局部变量会被优先考虑。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

K8S简单部署,以及UI界面配置

准备两台服务器K8Smaster和K8Sminion 分别在两台服务器上执行以下代码 #添加hosts解析&#xff1b; cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain 192.168.45.133 master1 192.168.45.135 node2 EOF #临时关闭selinux和防火墙&#xff1b; sed …

创业初期,找了个没有成本的地方当办公场地

大家好&#xff0c;我是小悟。 如果我问你&#xff0c;创业的第一步是什么&#xff1f;或许你会说资金、团队、市场定位&#xff0c;这些确实都是创业不可或缺的因素。找办公场地也是很重要的一个环节&#xff0c;但如果我现在告诉你&#xff0c;把图书馆作为办公场地&#xf…

一个记事本(可复制源码)

htmlcssjs做了一个记事本&#xff0c;可复制源码 html <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0">…

川大华西团队发表关于早期癌症研究的综述,探索AI在预测癌症进展的应用|顶刊精析·24-11-05

小罗碎碎念 这篇文章于2024-10-21发表在《Nature Reviews Cancer》&#xff0c;是一篇关于早期癌症研究的综述文章&#xff0c;标题为《Emerging strategies to investigate the biology of early cancer》。 作者角色姓名单位名称&#xff08;中文&#xff09;第一作者Ran Zho…

AI 翻唱

本文记录用 So-vits-svc 4.1 训练模型全过程。 需要用到的工具 UVR&#xff1a;用于人声歌声分离&#xff0c;降噪。 (项目传送门) Slicer-gui(Audio-Slicer)&#xff1a;用于音频裁剪。(项目传送门) So-vits-svc 4.1&#xff1a;训练模型&#xff0c;GitHub项目中详细介绍…

讲讲⾼可用的原则?

大家好&#xff0c;我是锋哥。今天分享关于【讲讲⾼可用的原则&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲讲⾼可用的原则&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在当今信息化时代&#xff0c;随着互联网技术的快速发展&#xff0…

Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Leetcode 二叉树中的最大路径和

算法思想 这道题要求在一棵二叉树中找到路径和最大的路径。路径可以从树中任意一个节点开始&#xff0c;到任意一个节点结束&#xff0c;但路径上的节点必须是连续的。 算法使用递归的方式来遍历树中的每个节点&#xff0c;并在遍历过程中计算包含当前节点的最大路径和。具体…

《2024中国城市音乐产业发展指数报告》重磅发布

11月4日,《2024中国城市音乐产业发展指数研究报告》(以下简称“报告”)在成都首次公开发布。该报告由中国音像与数字出版协会音乐产业促进工作委员会指导编制,道略产业研究院、四川音乐学院孙洪斌教授团队深度参与。 该指数评价对象涵盖直辖市、副省级城市和省会城市等共36个城…

解锁金融未来,Python带你玩转大数据!

厌倦了复杂的金融报表&#xff0c;想用数据驱动投资决策&#xff0c;却不知从何下手&#xff1f; 别担心&#xff01; 《Python金融大数据分析快速入门与案例详解》带你轻松入门&#xff0c;掌握数据分析利器&#xff0c;成为金融领域的弄潮儿&#xff01; 为什么选择这本书&…

STM32 + CubeMX + 硬件SPI + W5500 +TcpClient

这篇文章记录一下STM32W5500TCP_Client的调试过程&#xff0c;实现TCP客户端数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程&#xff08;添加方法不赘述&#xff0c;驱动代码可以在官网找&#xff09;2、在工程中增…

template advanced

一.仿函数再探 stl_stack/queue-CSDN博客 在priority_queue中&#xff0c;我们介绍了仿函数作为第三个参数来改变堆的类型&#xff0c;而仿函数还有其他的用处。 那么我们是否可以借助优先级队列来对日期类进行排序呢&#xff1f; 答案是可以的&#xff0c;但前提是该日期…

spring源码[spring启动流程]

spring启动流程 AnnotationConfigApplicationContext的构造方法 1.父类构造方法&#xff0c;构造一个DefaultListableBeanFactory 在调用AnnotationConfigApplicationContext的构造方法之前&#xff0c;会调用父类GenericApplicationContext的无参构造方法&#xff0c;会构造…

使用Python做一个微信机器人

使用Python制作微信机器人是一个有趣且实用的项目&#xff0c;它可以让您自动化处理微信消息、监控微信群、甚至实现智能聊天等功能。 请求参数 Header 参数 export interface ApifoxModel {"X-GEWE-TOKEN": string;[property: string]: any; } Body 参数applicat…

Python-创建并调用自定义文件中的模块/函数

背景&#xff1a;在Python编程中&#xff0c;我们常常需要创建自己的专属文件&#xff0c;以便帮助我们更高效&#xff0c;快捷地完成任务。那么在Python中我们怎么创建并调用自己文件中的模块/函数呢? 在Python中调用自定义文件&#xff0c;通常是指调用自己编写的Python模块…

【C++】C++17结构化绑定、std::optional、std::variant、std::any

二十二、C17中的结构化绑定、std::optional、std::variant、std::any 本部分是一个小系列&#xff0c;介绍C17中新引入的、用来解决各种不同返回情况的、标准库新组件。 1、C的结构化绑定 结构化绑定structured bindings是C17中引入的一项特性&#xff0c;它允许开发者方便地…

ntkrnlmp.exe导致蓝屏死机的解决方法

在使用Windows操作系统的过程中&#xff0c;用户可能会遇到由ntkrnlmp.exe文件错误引发的蓝屏死机&#xff08;Blue Screen of Death, BSOD&#xff09;问题&#xff0c;这不仅影响了日常的工作效率&#xff0c;也可能造成数据丢失的风险。本文将为您提供一系列即时排查与修复n…

U3D游戏开发之骨骼动画相关

目录 1 作为U3D程序如何制作骨骼动画 2 骨骼动画程序代码相关 这个内容我在很久之前就想写了&#xff0c;很多项目也与骨骼动画挂钩&#xff0c;今天我们揭秘的是2D骨骼动画。来聊一聊大家可能非常关注的两个问题&#xff1a;作为程序如何制作骨骼动画&#xff1f;接到美术的骨…

java:题目:用Java实现简单的自取取款操作

import java.util.Scanner; public class ATM {public static void main(String[] args){//自主取款主类Scanner scnew Scanner(System.in);System.out.println("请输入账户号码&#xff1a;");String BankAccoutsrsc.nextLine();/BankAccout3 newBankAccoutnew Bank…

VLAN 高级技术 ——QinQ的配置

QinQ的概述&#xff1a; QinQ技术是一种扩展虚拟局域网&#xff08;VLAN&#xff09;数量空间的技术&#xff0c;通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来实现。以下是对QinQ技术的详细概述&#xff1a; QinQ技术的定义与背景 定义&#xff1a;QinQ&#xff08…