13

Go 语言中的变量与常量 — blog.huangz.me

 4 years ago
source link: https://blog.huangz.me/2020/var-and-const-in-go.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Go 语言中的变量与常量

本文摘录自《Go语言趣学指南》第 2 章, 请访问 gpwgcn.com 以获取更多相关信息。

../_images/gpwgcn1.jpg

代码清单 2-1 你好,火星: mars.go

// My weight loss program.                              // 为人类读者提供的注释
package main

import "fmt"

// main is the function where it all begins.            // 为人类读者提供的注释
func main() {
    fmt.Print("My weight on the surface of Mars is ")
    fmt.Print(149.0 * 0.3783)                           // 打印出 56.3667
    fmt.Print(" lbs, and I would be ")
    fmt.Print(41 * 365 / 687)                           // 打印出 21
    fmt.Print(" years old.")
}

代码清单 2-1 中的计数器在计算时使用了类似 0.3783 这样的字面数字,但并没有具体说明这些数字所代表的的含义,程序员有时候会把这种没有说明具体含义的字面数字称之为魔数。 通过使用常量和变量并为字面数字赋予描述性的名称,我们可以有效地减少魔数的存在。

在了解过居住在火星对于年龄和体重有何种好处之后,我们接下来要考虑的就是旅行所需消耗的时长。 对于我们的旅程来说,光速旅行是最为理想的。 因为光在太空的真空环境中会以固定速度传播,所以相应的计算将会变得较为简单。 与此相反的是,根据行星在太阳轨道上所处的位置不同,地球和火星之间的距离将会产生相当大的变化

代码清单 2-3 引入了两个新的关键字 constvar ,它们分别用于声明常量和变量。


代码清单 2-3 实现光速旅行: lightspeed.go

// How long does it take to get to Mars?
package main

import "fmt"

func main() {
    const lightSpeed = 299792 // km/s
    var distance = 56000000   // km

    fmt.Println(distance/lightSpeed, "seconds") // 打印出“186 seconds”

    distance = 401000000
    fmt.Println(distance/lightSpeed, "seconds") // 打印出“1337 seconds”
 }

只要将代码清单 2-3 中的代码输入至 Go 游乐场然后点击运行按钮,我们就可以计算出从地球出发到火星所需的时间了。 能够以光速前进是一件非常便捷的事情,不消一会儿工夫你就到达了目的地,你甚至都不会听到有人抱怨说“我们怎么还没到?”。

这段代码的第一次计算通过声明 distance 变量并为其赋予初始值 56,000,000 公里来模拟火星与地球相邻时的情形,而在进行第二次计算的时候,则通过为 distance 变量赋予新值 401,000,000 公里来模拟火星和地球分列太阳两侧时的情形(其中 401,000,000 公里代表的是火星和地球之间的直线距离)。

lightSpeed 常量是不能被修改的, 尝试为其赋予新值将导致 Go 编译器报告错误:“无法对 lightSpeed 进行赋值”。

变量必须先声明后使用。 如果变量尚未使用 var 关键字进行声明, 那么尝试向它赋值将导致 Go 报告错误, 比如在前面的代码中执行 speed = 16 就会这样。 这一限制有助于发现类似“想要向 distance 赋值结果却键入了 distence”这样的问题。


Recommend

  • 39
    • blog.huangz.me 5 years ago
    • Cache

    Go 语言中的变量与常量

    Note 本文摘录自《Go语言趣学指南》第 2 章, 请访问 gpwgcn.com 以获取更多相关信息。

  • 9

    在 Go 语言中定义新类型¶ Go 声明了许多类型, 我们在第 2 单元已经看到过其中的相当一部分, 但是这些类型有时候并不能充分地描述我们想要持有的值。 声明新类型不仅能够让...

  • 12

    在 Go 语言中定义函数¶ 到目前为止, 本书中的代码都放在了 main 函数里面, 但是在处理诸如环境监测程序等更为大型的程序时, 把问题拆分成更小的部分将会非...

  • 16

    Go 语言中的字符、代码点、符文和字节¶ 统一码联盟(Unicode Consortium)把名为代码点的一系列数值赋值给了上百万个独一无二的字符。 例如, 大写字母 A 的代码点为

  • 16

    Go 语言中的字符串¶ 我们从最初的 "Hello, playground" 开始就已经在程序里使用文本了。 在 Go 程序中, 独立的字母、数字和符号被统称为字符, 而通过拼接多个字符并使...

  • 8

    Go 语言中的整数回绕现象¶ 整数类型虽然不会像浮点类型那样因为舍入错误而导致不精确, 但整数类型也有它们自己的问题, 那就是有限的取值范围。 在 Go 语言中, 当超...

  • 13

    Go 语言中的十六进制数字¶ 层叠样式表(CSS)通过十六进制数字而不是十进制数字来指定颜色。 与十进制只使用 10 个数字相比, 十六进制需要多用 6 个数字: 其中前 10 个数字跟十...

  • 9
    • blog.huangz.me 4 years ago
    • Cache

    Go 语言中的整数 — blog.huangz.me

    Go 语言中的整数¶ 本文摘录自《Go语言趣学指南》第 7 章, 请访问 gpwgcn.com 以获取更多相关信息。

  • 6

    Go 语言中的变量作用域范围¶ 本文摘录自《Go语言趣学指南》第 4 章, 请访问 gpwgcn.com 以获取更多相关信息。

  • 8
    • blog.huangz.me 4 years ago
    • Cache

    Go 的变量与常量 — blog.huangz.me

    Go 的变量与常量¶ 本文摘录自即将出版的《Go语言趣学指南》, 请访问 gpwgcn.com 以获取更多相关信息。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK