34

Go 的变量与常量

 4 years ago
source link: http://blog.huangz.me/2019/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.

Note

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

aiia2a7.jpg!web

代码清单 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.")
}
EBj22yF.jpg!web

代码清单 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 ”这样的问题。

{速查 2-3}

  1. 尽管 SpaceX 公司的星际运输系统因为缺少曲速引擎而无法以光速行进, 但它仍然能够以每小时 100,800 公里这一可观的速度驶向火星。 如果这个雄心勃勃的公司在 2025 年的一月份, 也即是地球和火星之间相距 96,300,000 公里远的时候发射宇宙飞船, 那么它需要用多少天才能够到达火星? 请修改代码清单 2-3 来计算并回答这一问题。

  2. 在地球上, 一天总共有 24 个小时。 如果要在程序中为数字 24 指定一个描述性的名字, 你会用什么关键字?

{速查 2-3 答案}

  1. 虽然宇宙飞船在实际中不可能只沿着直线行进, 但作为一个粗略的估计, 它从地球飞行至火星大约需要用 39 天。 以下是进行计算所需修改的代码:

    const hoursPerDay = 24
    var speed = 100800      // 公里/小时
    var distance = 96300000 // 公里
    fmt.Println(distance/speed/hoursPerDay, "days")
  2. 因为地球一天拥有的小时数不太可能在程序运行的过程中发生变化, 所以我们可以使用 const 关键字来定义它。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK