变量声明

在Go中,变量是包含值的一块存储。可以使用变量声明为变量命名。只需使用var关键字,后跟所需的名称以及变量将保存的值的类型。

一旦你声明了一个变量,就可以用=为它分配该类型的任何值:

quantity = 2

customerName = "xiaoming"

还可以在同一语句中为多个变量赋值。只需将多个变量名放在=的左侧,将相同数量的值放在右侧,并使用逗号分隔。

quantity, customerName = 3, "xiaoli"

一旦给变量赋了值,你就可以在任何要使用原始值的上下文中使用它们。

声明变量省略类型

如果你事先知道变量的值是什么,你可以声明变量并在同一行赋值:

你可以为现有变量分配新值,但它们必须是相同类型的值。Go的静态类型确保你不会意外地将错误类型的值赋给变量。

如果在声明变量的同时为其赋值,通常可以在声明中省略变量类型。这个分配给变量的值的类型将用作该变量的类型

短变量声明

如果你声明变量时就知道它的初始值是什么,那么更具有代表性的是使用短变量声明。你不必很明确地声明变量的类型并在之后使用=为其赋值,而是同时使用:=

不需要明确地声明变量的类型,赋给变量的值的类型成为该变量的类型。

当同一个变量名在同一作用域中被声明两次时,我们会得到一个编译错误:

但是,只要短变量声明中至少有一个变量名是新的,这是允许的。新变量名被视为声明,而现有的名字被视为赋值。

这种特殊处理是有原因的:许多Go函数返回多个值。如果仅仅因为要重用其中一个变量而必须分别声明所有变量,那将是一件痛苦的事情。

相反,Go允许你对所有事物使用短变量声明,即使对其中一个变量来说,它实际上是赋值。

由于短变量声明非常方便和简洁,因此它们比常规声明更常用。不过,你仍然会偶尔看到这两种形式,因此熟悉这两种形式很重要。

实践见真知

Golang 入门 : 变量声明的更多相关文章

  1. Golang入门教程(四)变量声明

    Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...

  2. golang变量声明

    func main() { var a1 int a1 = 1 var a = 1 b := 1 var c, d int c = 1 d = 1 var e, f = 1, 2 g, h := 1, ...

  3. Golang入门(1):安装与配置环境变量的意义

    摘要 在几年前学习Java的时候,环境的配置就会劝退一部分的初学者.而对于Golang来说,也需要从环境的配置开始学起.这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量 ...

  4. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  5. go语言入门教程:基本语法之变量声明及注意事项

    一.变量的使用 1.1 什么是变量 变量是为存储特定类型的值而提供给内存位置的名称.在go中声明变量有多种语法. 所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变 1.2 声明 ...

  6. [Golang学习笔记] 04 程序实体1 变量声明

    变量声明: Go语言的程序实体包含:变量.常量.函数.结构体和接口,是一门静态类型的编程语言. (在声明变量或常量的时候,需要指定类型,或者给予足够信息是的Go语言能够推导出类型) Go语言变量的类型 ...

  7. Java程序员的Golang入门指南(下)

    Java程序员的Golang入门指南(下) 4.高级特性 上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号.函数多返回值.switch-case默认break.函数闭包.集合 ...

  8. Java程序员的Golang入门指南(上)

    Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如 ...

  9. Golang 入门 : 结构体(struct)

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...

  10. Golang 入门 : channel(通道)

    笔者在<Golang 入门 : 竞争条件>一文中介绍了 Golang 并发编程中需要面对的竞争条件.本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件. C ...

随机推荐

  1. Qt/C++中英输入法/嵌入式输入法/小数字面板/简繁切换/特殊字符/支持Qt456

    一.前言 在嵌入式板子上由于没有系统层面的输入法支持,所以都绕不开一个问题,那就是在需要输入的UI软件中,必须提供一个输入法来进行输入,大概从Qt5.7开始官方提供了输入法的源码,作为插件的形式加入到 ...

  2. Qt自定义控件大全文章导航

    文章 链接 Qt编写自定义控件1-汽车仪表盘 https://qtchina.blog.csdn.net/article/details/89407746 Qt编写自定义控件2-进度条标尺 https ...

  3. vue3项目实战+element-plus

    记录自己搭建前端项目的学习过程和开发过程,希望一起学习进步 采用Vue3+element-plus+axios+vue-router+sass--(目前刚开始是用到了这些,随着开发慢慢更新) npm是 ...

  4. [转]C# 组合查询条件

    在我们开发过程中经常会遇见一些通过条件获取数据的功能,比如说获取我们的用户信息,查询输入框有用户姓名,部门,入职年份等等,但查询时可能只输入一个条件或多个条件,像这种不确定的查询时,我们应该如何处理. ...

  5. WorldWind源码剖析系列:WorldWind瓦片调度策略说明

    1 基于源码的分析 首先我们来看WorldWind中摄像头变化相关的几个方法的内部逻辑. 1.1 NltTerrainAccessor. GetElevationAt 方法声明:public over ...

  6. openEuler RISC-V上磁盘I/O性能测试的IOZone实例

      IOZone 是一个广泛使用的文件系统性能基准测试工具,旨在评估磁盘 I/O 性能.它能够测试各种类型的文件操作,包括顺序读写.随机读写.重载(re-write).读取已写入的数据等.通过这些测试 ...

  7. [LC1260]二维网格迁移

    二维网格迁移 题目描述 给你一个 m 行 n 列的二维网格 grid 和一个整数 k.你需要将 grid 迁移 k 次. 每次「迁移」操作将会引发下述活动: 位于 grid[i][j] 的元素将会移动 ...

  8. [.NET] API网关选择:YARP还是Ocelot?

    API网关选择:YARP还是Ocelot? 摘要 随着微服务架构的流行,API网关在系统架构中扮演着越来越重要的角色.在.NET生态中,YARP(Yet Another Reverse Proxy)和 ...

  9. 深入剖析数据删除操作:DELETE 语句的使用与管理实践

    title: 深入剖析数据删除操作:DELETE 语句的使用与管理实践 date: 2025/1/8 updated: 2025/1/8 author: cmdragon excerpt: 数据删除( ...

  10. Solution -「NOI 2017」「洛谷 P3823」蚯蚓排队

    \(\mathscr{Description}\)   Link.   (自己看题, 我总不能让题意比题解还长吧?) \(\mathscr{Solution}\)   下一组我一定写成 solutio ...