语言 重量计算_跟着 Go 语言上天,是一种怎样的体验?

6c12411183eff10f78ba65279d8e1c6a.png

对于一门只有十年历史的新语言来说,Go 的发展势头可谓是相当迅猛,容器界的扛把子 Docker 就是用 Go 写的, 因此不少程序员开始学起 Go 来,今天,小编就带大家走近 Go 语言。

你们知道 Go 语言为什么叫 Go 吗?这得从它的吉祥物说起。Go 的吉祥物是一个来自加拿大的小动物——“地鼠”(gopher),这个小动物最大的特点就是挖洞速度特别快

因此 Go 语言的名字取自 gopher,就是想表达这门语言的运行速度、开发速度、学习速度都像 gopher 一样快。而且 Go 语言的 logo 还是 Go 语言之父 Rob 的夫人设计的哦!

3f7886a2e3e99eb8718cb1e162e44f9d.png

虽然 Go 学起来快,但还是有很多程序员吐槽它学起来让人很头痛,其实你只要找到有趣的学习方法,Go 也会是个可爱的家伙,不信,让 Go 带你来个星际旅行如何?

Trip 1:登陆火星的 Go

火星上的一年相当于地球上的 687 天,而较弱的重力作用则使得同一物体在火星上的重量约占地球上的38%。这么掐指一想,如果能登上火星,岂不意味着我们可以变得更年轻更苗条嘛?利用这个数据,试试用 Go 来计算我们在火星上的体重和年龄吧!

Go 跟其他编程语言一样,提供了+、-、*、/和%等算术操作符,将它们分别用于执行加法、减法、乘法、除法和取模运算。

// 我的减重程序  ←--- 为人类读者提供的注释
package main
import "fmt"
// main是所有程序的起始函数  ←--- 为人类读者提供的注释
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.")
}

代码清单里面调用 Print 函数很多次,是为了将完整的句子显示在同一行里面。达到这一目的的另一种方法是调用 Println 函数,并向它传递一组由逗号分隔的参数,这些参数可以是文本、数值或者数学表达式:

fmt.Println("My weight on the surface of Mars is", 149.0*0.3783, "lbs, and I would be", 41*365.2425/687, "years old.")  ←--- 打印出“My weight on the surface of Mars is 56.3667 lbs, and I would be 21.79758733624454 years old.”

将代码录入 Go Playground,并将其中的年龄(41)和体重(149.0)替换成你的年龄和体重,运行代码,就能计算出你在火星上的体重和年龄啦!

57c2dc8e346a996c812acd83fdf8ad07.png

在了解居住在火星会使我们变得年轻之后,是不是格外想去火星呢?那接下来看看 Go 怎么规划我们去火星的时长!

对于我们的旅程来说,以光速旅行是最为理想的。因为光在太空的真空环境中会以固定速度传播,所以相应的计算将会变得较为简单。与此相反的是,根据行星在绕太阳运行的轨道上所处的位置不同,地球和火星之间的距离将会产生相当大的变化。

// 到达火星需要多长时间?
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”
 }

将代码录入 Go Playground,然后点击 Run 按钮,我们就可以计算出从地球出发到火星所需的时间了。能够以光速行进是一件非常便捷的事情,不消一会儿工夫你就能到达目的地,你甚至不会听到有人抱怨“我们怎么还没到?”

Trip 2:去恒星旅行的 Go

假如我们要去太阳系外的宇宙旅行又该怎么计算旅行天数呢?以距离地球最近的恒星——半人马座阿尔法星为例,它与地球之间的距离为 41.3 万亿公里。在数学上,1 万亿就是数字 1 后面跟着 12 个0(也就是

),因为这个数字是如此巨大,所以与其不辞劳苦地手动键入每一个 0 ,但是如果用 Go 的指数形式写出这个数值,就像这样:
var distance int64 = 41.3e12

虽然 int32 类型和 uint32 类型都无法容纳如此大的数值,但使用 int64 类型存储这样的值却是绰绰有余的。在此之后,Go 就能轻松计算从地球飞行至半人马座阿尔法星所需的天数。

const lightSpeed = 299792 // km/s
const secondsPerDay = 86400


var distance int64 = 41.3e12
fmt.Println("Alpha Centauri is", distance, "km away.")  ←--- 打印出“Alpha Centauri is 41300000000000 km away.”


days := distance / lightSpeed / secondsPerDay
fmt.Println("That is", days, "days of travel at light speed.")  ←--- 打印出“That is 1594 days of travel at light speed.

经过上面的操作,我们就能算出去半人马座阿尔法星所需的天数,当然,你还可以通过这种方式计算去火星、木星的天数!

8d6a56319ea022e2c2e01addfc3c59d8.png

Trip 3:切分太阳系的 Go

太阳系中的行星可以归类为陆地行星(terrestrial)、气态巨行星(gasGiants)和冰巨行星(iceGiants)。 Go 可以通过使用切片 planets[0:4] 分割 planets 数组的前 4 个元素。

planets := [...]string{
    "Mercury",
    "Venus",
    "Earth",
    "Mars",
    "Jupiter",
    "Saturn",
    "Uranus",
    "Neptune",
}
terrestrial := planets[0:4]
gasGiants := planets[4:6]
iceGiants := planets[6:8]
fmt.Println(terrestrial, gasGiants, iceGiants)  ←--- 打印出“[Mercury Venus Earth Mars][Jupiter Saturn] [Uranus Neptune]”

虽然 terrestrial、gasGiants 和 iceGiants 都是切片,但我们还是可以像数组那样根据索引获取切片中的指定元素:

fmt.Println(gasGiants[0])  ←--- 打印出“Jupiter”

我们除了可以创建数组的切片之外,还可以创建切片的切片:

giants := planets[4:8]
gas := giants[0:2]
ice := giants[2:4]
fmt.Println(giants, gas, ice)  ←--- 打印出“[Jupiter Saturn Uranus Neptune] [Jupiter Saturn] [Uranus Neptune]”

无论是 terrestrial、gasGiants、iceGiants、giants、gas还是ice,它们都是同一个 planets 数组的视图,对切片中的任意一个元素赋予新的值都会导致 planets 数组发生变化,而这一变化同样会见诸指向 planets 数组的其他切片:

iceGiantsMarkII := iceGiants  ←--- 复制 iceGiants切片(指向planets数组的视图)
iceGiants[1] = "Poseidon"
fmt.Println(planets)  ←--- 打印出“[Mercury Venus Earth Mars Jupiter Saturn Uranus Poseidon]”
fmt.Println(iceGiants, iceGiantsMarkII, ice)  ←--- 打印出“[Uranus Poseidon] [Uranus Poseidon][Uranus Poseidon]”

0a603af4220d66a97e9ad61e4e86018c.png

充满趣味的 Go

目前,很多 Go 语言的学习资源都假设读者拥有 C 语言的经验基础,而且内容枯燥,很难坚持学下去。因此,小编给大家带来了有趣又实用的 Go 语言学习资料——《Go语言趣学指南》

2199d8849f9d5acbe5d25bbfbe19859c.png
[加]Nathan Youngman [英]Roger Peppé 著 黄健宏 译

这是一本真正面向初学者的书。整本书的学习曲线非常平缓,不会像过山车那样忽高忽低。书中的内容首先从变量、循环、分支、类型等基础知识开始,逐渐进阶至函数、方法、收集器和结构,最后再深入到指针、错误处理和并发等高级特性。

只要翻开本书一页页读下去,你就会循序渐进地学到越来越多 Go 语言的知识,并且逐步掌握 Go 语言的众多特性。

它还是一本非常有趣的书。作者在书中列举了大量跟天文以及航天有关的例子,读者不仅可以计算从地球乘坐宇宙飞船航行至火星所需的天数,还可以在火星上放置探测器以便查找生命存在的痕迹,甚至还可以想办法改造火星,使它能够适宜人类居住。

值得提的是,书中很多地方都带有可爱的地鼠 ( gopher ) 插图,它们就像旅行途中优美的景色一样,将为我们的学习旅途增加很多乐趣。

这样一本有趣又实用的Go语言指南书,真乃入门Go语言的不二之选!

文章来源:异步图书,有删改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值