【Go 基础】变量

news/2024/4/24 6:25:45/

1. 变量

Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类型

变量在使用前,需要先声明。声明类型,就约定了你这个变量只能赋该类型的值。

1.1 变量声明

格式:var 变量名 类型 = 值

声明方式大概有四种,若声明时没有初始化,那么其默认值为该数据类型的 0 值,比如: string 类型就初始化为空字符串,int 类型就初始化为0,float 就初始化为 0.0,bool 类型就初始化为 false,指针类型就初始化为 nil

1、一行声明一个变量,并初始化值

var name string = "变量"

2、一次声明多个变量

var (age intgender string)

3、声明和初始化一个变量

使用 :=(让编译器自动根据右侧的值推测出左侧的变量数据类型),这种方法只能用于函数内部

name := "Go 变量"// 等同
var name string = "Go 变量"

4、声明和初始化多个变量

name, age := "rose", 18// 可以用来做变量交换
var a int = 100
var b int = 200
b, a = a, b

1.2 全局变量和局部变量

根据变量位置可将变量划分为全局变量和全局变量,Go 变量有作用域之分,每个大括号就是一个作用域,每个作用域都可以有相应的局部变量。

全局变量

全局可使用

package mainimport "fmt"// 声明全局变量
var country = "中国"func main() {fmt.Println(country)country = "China"fmt.Println(country)
}

输出:

中国
China

注意:全局变量首字母小写,只能用于当前包中,大写可用于其他包文件,即外部可使用

局部变量

仅对应作用域可使用

package mainimport "fmt"func main() {// 声明局部变量,在当前函数中使用var country = "China"fmt.Println(country)if true {// 声明局部变量,仅在 if 中使用var age = 18fmt.Println(age)fmt.Println(country)}// age 不能在 if 作用域外使用// fmt.Println(age)}

输出:

China
18
China

country 可在当前函数作用域中使用,但 age 不能在 if 作用域外使用。

1.3 指针变量

变量分为两种:

  • 普通变量:存储的为数据本身
  • 指针变量:存储的为数据/内存地址

指针变量声明可以使用 new 函数,也可以使用 &普通变量

package mainimport "fmt"func main() {// 指针变量,方法一var name string = "rose"var ptr = &name		// & 后面接变量名,表示取出该变量的内存地址fmt.Println(name)	// rosefmt.Println(ptr)	// 0xc00005e270// 指针变量,方法二 new 函数ptr2 := new(int)fmt.Println(ptr2)	// 0xc0000a6090fmt.Println(*ptr2)	// * 指针变量名,表示从内存中取出值、0
}

使用表达式 new(Type) 将创建一个Type类型的匿名变量,初始化为Type类型的零值,然后返回变量地址,返回的指针类型为*Type

1.4 匿名变量

常量和变量都只能声明一次,声明多次就会编译报错,匿名变量除外,它有如下优点:

  • 不分配内存,不占用内存空间
  • 不需要你为命名无用的变量名而纠结
  • 多次声明不会有任何问题

一般可以用来接收必须接收,但又用不到的值:

func GetData() (int, int) {return 100, 200
}
func main(){a, _ := GetData()_, b := GetData()fmt.Println(a, b)
}

http://www.ppmy.cn/news/46731.html

相关文章

进销存管理系统能为企业带来哪些实际效益?

随着互联网的不断发展,如今的商业世界已经越来越向数字化转型。拥有一套完整的数字化的进销存管理能够极大地提升公司货物进出库存情况的效率和准确性,避免过程中出现不必要的错误和漏洞,从而帮助企业更加稳健地自我发展。那么,一…

SpringCloud:ElasticSearch之索引库操作

ElasticSearch索引库就类似数据库表,mapping映射就类似表的结构。 我们要向ElasticSearch中存储数据,必须先创建“库”和“表”。 1.mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:…

软考-项目资源管理(十三)

项目团队是执行项目工作,以实现项目目标的一组人员,由为了完成项目而承相不同角色与职责的人员组成 项目管理团队(Project Management Team)是直接参与项目管理活动的项目团队成员,负责项目管理和领导活动,如各项目阶段的启动、规…

Win11搜索栏无法使用怎么办?

Windows系统的搜索栏可以帮助我们找到很多系统工具,但是有些时候,在Win11系统上,搜索栏却无法使用,那么这该怎么办呢? 当Windows搜索不起作用时,您可以首先尝试重新启动计算机,因为这可以解决计…

GPT引领学习之旅:弥补信息差,助力程序员高效掌握Elasticsearch

一、引言 Elasticsearch作为一款流行的开源搜索和分析引擎,持续迅速发展,随着版本的更新,功能和特性也在不断变化。GPT虽然具备大量的计算机科学、编程语言和工具相关的知识,但其知识截止于2021年。为了弥补GPT与实际情况之间的信…

初学者Go并发(3)

3、worker pool(goroutine池) 在工作中我们通常使用指定启动得goroutine数量-Worker pool模式,来控制goroutine得数量,防止goroutine泄露和暴涨 实例代码如下: package mainimport ("fmt""time" )func worker(id int,…

【设计模式】实际场景解释策略模式与工厂模式的应用

文章目录 前言策略模式概念场景示例 工厂模式概念场景示例 策略模式与工厂模式的比较相同点不同点 总结 前言 策略模式和工厂模式是常见的设计模式,它们可以帮助我们更好地组织和管理代码,提高代码的可维护性和可扩展性。 在本篇博客中,我将…

Python和Java二选一该学啥?

首先我们需要了解Python和 Java分别是什么 根据IEEE Spectrum 2022年编程语言排名前十的分别是:Python,C,C,C#,Java,SQL,JavaScript,R,HTML,TypeScript。从该…

人工智能专题-知识表示

文章目录 人工智能专题-知识表示大纲2.1 知识表示的概念2.1.1 知识表示观点2.1.2 知识表示的要求 2.2 一阶谓词逻辑表示法2.2.1 一阶谓词概念2.2.2 谓词逻辑表示方法 2.3 产生式表示法2.4 语义网络表示法2.5 框架表示法 人工智能专题-知识表示 大纲 大纲:掌握知识表…

C++11: lambda、包装器、模板参数包和线程库

lambda C98中的一个例子 在C98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法。 int main() {int array[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较,排出来结果是升序std::sort(array, array sizeof(array) / s…

淘宝/天猫店铺订单数据导出、销售报表、数据分析

最近有厂商提出想把天猫店铺的数据拿到后台ERP管理系统中,并能实现线下打印电子面单功能。接手这个需求按照度娘给的指引,申请天猫开发者帐号,但是。。。大厂把订单传送接口关了,只对厂商自研软件开放,还需要租用聚石塔…

spring初始项目创建

首先进入http://spring.p2hp.com/projects/spring-framework.html,点击git按钮 点击Access to Binaries中的链接 找到里程碑版本,要引入仓库地址 这里的spring-context依赖只是基础的spring框架的依赖 在resources目录下创建spring的xml文件&#xff0c…

Spring boot基础学习之(十八):通过shiro框架使用Mybatis实现用户的认证完整的认证流程

在上几篇文章的基础上,实现本次案例 注意:本篇文章的实现代码在几篇文章都已经详细的讲过了,所以在此篇文章,将不再有理论知识的陈述,更过的流程,如何通过代码实现连接数据库进行认证 添加本次案例所需要的…

Docker容器部署及基本使用

文章目录 一、环境初始化配置二、安装Docker三、优化配置四、基础命令 一、环境初始化配置 1、关闭防火墙 systemctl stop firewalld systemctl disable firewalldsetenforce 0sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config sed -i s/SELINUXenforcing/S…

浅拷贝与深拷贝例题与思考

title: “浅拷贝与深拷贝” author: “hou wei” date: “2023-04-17” output: html_document knitr::opts_chunk$set(echo TRUE)问答题 0.请问你是如何理解 ”在 Python 中,变量不是盒子” 这句话的? 变量不是将元素放进变量里面,变量只…

人社LEAF平台架构及其主要技术架构特点

人社LEAF平台架构及其主要技术架构特点https://wheart.cn/so/home?mindex&id31525d77-de79-11ed-96fa-52540016e6ac 在前面的系列文章中介绍了社会保险管理信息系统核心平台三版(以下简称核三)的技术亮点,这些技术亮点主要是由核三的技…

sql的左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)的详解

sql的左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)的详解: 这里以两个表的连表为例: 创建表1:为人员表,这里将它当做左表; CREA…

DETR【论文阅读】

End-to-End Object Detection with Transformers 1. Introduction 发表:ECCV 2020影响:在目标检测上使用了一种全新的架构,是里程碑式的工作。简单优雅统一的结构,不再依赖于人的先验知识(anchor生成,nms…

javaweb笔记2

JSP 1、在webapp的根目录下新建一个index.jsp文件,访问以下地址: http://localhost:8080/webappName/index.jsp 实际上访问这个index.jsp文件,底层执行的是:index_jsp.class这个程序。 这个index.jsp会被tomcat翻译成index_jsp.j…

vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案

错误问题 Vue:xhr.upload.addEventListener is not a function 这个问题是因为mockjs改动了axios里面XMLHttpRequest对象致使的 根据axios源码 l是一个XMLHttpRequest对象 mockJs把l变量从XMLHttpRequest对象改为了MockXMLHttpRequest对象 因此l.upload是一个空对象 空对象…