直观的Go变量指导

通过直观的示例轻松理解Go变量。

直观的Go变量指导
Go定义了读取的变量。 Go是明确而简单的。

Go不用做顺时针/螺旋规则魔术的算法来读取C声明,而是对我们人类而不是对外星人使用更简单的方法( 我曾经在一段时间后习惯了C的声明语法,但这并不意味着我们可以做到)不能像Go中那样使事情变得更好 )。

→C的版本:

直观的Go变量指导
顺时针/螺旋

→Go版本:

直观的Go变量指导
人性化

变量具有类型,值和地址, 如下所示 当您需要将数据存储在某个地方以再次用于代码中的后续操作时,将使用变量。

Go是一种静态类型的语言。 这意味着,每个变量都应具有一个类型,并且所有类型都互不相同。

直观的Go变量指导

类型→变量内可以存储哪种信息。

值→变量内部的存储值。

地址→在计算机内存中可以找到变量的位置。

简而言之,变量使我们能够将数据存储在某处。 编程就是将一种数据形式转换为另一种形式。 没有变量,程序中将只有静态数据,我们无法更改。 静态变量将在我们的静态程序中烘焙。

变量使我们能够进行动态操作 ,例如获取用户反馈并将其存储到变量中,然后再次使用相同的值,例如数学PI编号。 由于变量,我们不必一次又一次键入值。

如果进入机器代码级别,这是微处理器( 和某些外星人)理解的语言,您会发现,有很多可变存储机制可以将数据从一种形式转换为另一种形式。 因此,基本上,我们的计算机对变量提供了硬件级别的支持。

在向您展示如何声明变量之前,最好先简要介绍一下零值,这在Go中非常重要。

直观的Go变量指导
如果未初始化,则左侧获取右侧的值。

如果仅声明了变量且未分配任何值,则Go将根据变量的类型为其分配零值。 您可以通过查看上图查看哪些类型获得哪些零值。

刚开始时,这可能会使您感到困惑,但是,除第一个以外的其他符号更像是辅助符号。

  • 第一个是使用var关键字long声明
  • 第二个是简短声明 ,它会自动猜测变量的类型。
  • 第三个是多变量声明 ,就像多个变量的长声明和短声明的混合。
  • 最后一个是单行多重短声明
直观的Go变量指导
使用声明类型声明一个名为ageOfUniverse的变量:var关键字声明一个新变量。

声明 →var关键字声明一个新变量

名称 →变量的名称为ageOfUniverse。
它可以是任何东西(包括π, ∑,∫ 这样的 unicode, 但不包括 ???? )。

类型 →我们可以在变量内部存储哪种数据。
在这里,我们使用int,因为我们想测量宇宙的年龄,大概以年为单位。

当您仅通过长声明来声明变量而未为其分配变量时,其值将为零值。 零值是Go中的默认值。

直观的Go变量指导
声明一个名为ageOfUniverse的变量,并将值140亿存储在该变量中,并自动猜测其类型。

名称 →变量的名称为ageOfUniverse

声明并赋值 :=是一种特殊类型的运算符,它声明并将值分配给变量。

我们要存储到变量中的数据。

声明该变量,并将其值和类型一起分配。 您可以分配Go允许的任何值。 很好,是吗? 去可以猜 变量的类型。 这称为类型推断 ,这种类型的声明称为短变量声明 或简称:short声明

当使用简短声明时,显然Go不会使用零值赋值。 因为您直接为变量分配了一个值,所以它将是其初始值。 不过,您也可以手动分配零值。 例如,您可以在仍使用简短声明时将0分配给整数( 0是整数的零值 )。

顺便说一句,14e9意味着140亿。 这就是科学记号 它的默认类型是float64。 “ e”在14之后放置9个零。
直观的Go变量指导
在同一条语句中声明具有不同类型和值的多个变量。

这是长和短变量声明符号的混合。 在括号内使用时, var关键字声明一组变量。

第一行 ,ageOfUniverse int,就像一个长声明。 只需声明一个具有所需类型的变量,然后自动为其分配零值即可。

第二行对您来说是新的,称为多变量声明 与简短声明一样,它声明并分配给变量。 变量名和值名用逗号分隔。

在左侧的项目数( 它是:ageOfEarth livablePlanets)应与对右侧的项数( 它是:1,4.5e9)。 无需在此处输入简短声明运算符“ :=”。

第三行与第二行类似,但是,它只声明coolLang变量并为其分配一个字符串: go 请注意,将其与一个变量一起使用时,无需使用逗号。

直观的Go变量指导
声明两个类型为float64和string的变量; 并为第一个变量分配140亿美元,为第二个变量分配“ go”。

这是使用短声明的多变量声明的简单版本。 您只需用逗号分隔变量和值。 变量数量和值应匹配。

将数据分配给变量时,也称为分配数据和=运算符。 该变量应该在之前声明过,并且数据类型应该与该变量的声明数据类型相同。 该变量将保存您设置的新数据。

直观的Go变量指导

但是,当您想为变量分配错误的数据类型时,Go编译器会警告您并且编译失败。 例如,您不能将字符串分配给类型为integer的变量。

直观的Go变量指导

当您不知道要在变量内部存储哪些数据时,请使用长声明。 无论您在变量内部知道存储什么,都应使用简短声明。

当您想一起定义多个变量时,请使用多个声明。 另外,当您要向其他希望将此类变量分组在一起的代码阅读者提供提示时,请使用多个声明。 有关其他详细信息, 请参见此内容。

顺便说一句,您不能在函数(包括主函数)之外使用简短声明。 或者:您将遇到以下错误:“ 语法错误:函数主体外部的非声明语句”。

当我们声明一个整数变量时,Go在内存中为该变量保留了4个字节的存储空间。 当数据不适合变量时,Go编译器会警告您存在溢出并终止。

但是, int是软盘类型。 它可以存储的数据可以根据编译而改变。 为32位体系结构进行编译时,它可以容纳4个字节,而在64位体系结构中,则可以容纳8个字节。

因此,我们不能仅将Universe的年龄存储在int变量中。 我们应该显式地使用uint64 因为int不能存储约140亿年,所以它只能在32位计算机上存储约40亿年。 否则它将溢出,但是对于64位计算机,编译将起作用。

直观的Go变量指导
您无法在4字节的存储中存储140亿个字节。
注意:宇宙曾经是“时间”的无限小而密集的点(不是吗? Ethan Siegel吗?),但这并不意味着我们可以使用Go来做同样的事情! ????

自己尝试。

尝试一下 :示例显示了ageOfUniverse变量可以存储多少字节。

不正确的代码。 运行它看看自己。

正确的代码。 运行。

创建新变量时,变量的寿命受到定义范围的限制。 我们将在以后的教程中讨论范围。 但是,现在很高兴知道,我现在要告诉您的重要作用域之一是有一个包级作用域和一个函数级作用域。

当我们在函数内部声明一个新变量时,该变量只能在该函数内部使用( 除非我们从函数返回它或将其写入其他地方) 而且,当我们在包范围中声明一个新变量时,所有其他包成员都可以看到并使用它,除非我们将其导出到其他包中。 要在包范围内定义变量,您只需要使用长声明,而不能对包范围变量使用短声明。

要将变量导出到另一个包,我们需要输入变量名称的第一个字母和一个大写字母。 但是,我不建议您将包变量尽可能多地暴露给外界。 甚至,将变量暴露给程序包也可能有害。 还有其他方法可以做到这一点。 您可以阅读我有关封装和包装的文章 ,也可以阅读另一篇文章隐藏几乎所有内容 ”部分。

直观的Go变量指导

好的,伙计们,这就是现在。 谢谢阅读!

❤️ 请支持我: 关注我的出版物, 在我的帖子中添加拍手
❤️在社交媒体上分享, 传播爱

mostly我主要在推特上发推文,
您可以在Twitter上关注我:@inancgumus

您将收到有关我的新帖子和即将上线的在线Go课程(每个星期三)的通知。

直观的Go变量指导
点击图片订阅“ Learn Go Programming”电子邮件列表! 谢谢!

最初于 2017 年10月4日 发布在 blog.learngoprogramming.com 上。

From: https://hackernoon.com/a-visual-how-to-guide-to-go-variables-ffd0fd8d3c12