不是只有宇宙飞船能带你去火星,Go也可以!

60 篇文章 3 订阅

 

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

 

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

 

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

 

 

 

虽然Go学起来快,但还是有无数程序员吐槽学起来让人很头痛,其实你只要找对了学习方法,Go也会是个可爱的家伙,不信就往下看看吧!

 

让你变年轻的Go

 

人们总是希望自己能够变得更年轻和更苗条,那么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.”

 

通过上面的操作方式,然后将里面的年龄(41)以及体重(149.0)替换成你的年龄和重量,就能计算出我们在火星上的体重和年龄啦!

 

 

 

在了解居住在火星会使我们变得年轻之后,是不是格外想去火星呢?那接下来来看看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按钮,我们就可以计算出从地球出发到火星所需的时间了。能够以光速行进是一件非常便捷的事情,不消一会儿工夫你就能到达目的地,你甚至不会听到有人抱怨“我们怎么还没到?”

 

去恒星旅游的Go

 

假如我们要去宇宙旅行又该怎么计算旅行天数呢?以距离地球最近的恒星——半人马座阿尔法星为例,它与地球之间的距离就为41.3万亿公里。在数学上,1万亿就是数字1后面跟着12个0(也就是1012),因为这个数字是如此巨大,所以与其不辞劳苦地手动键入每一个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.”

 

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

 

 

 

切分太阳系的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]”

 

 

 

充满趣味儿的Go

 

市场上很多Go语言的学习资源都假设读者有Go语言经验,而且内容枯燥,阅读起来不仅吃力,很难坚持学下去。因此异步君给大家带来了基础又有趣的Go语言学习资料——《Go语言趣学指南》

 

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

 

 

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

 

它还是一本非常有趣的书。作者在书中列举了大量跟天文以及航天有关的例子,读者不仅要计算从地球乘坐宇宙飞船航行至火星所需的天数,还要在火星上放置探测器以便查找生命存在的痕迹,甚至还要想办法改造火星,使它能够适宜人类居住。值得提的是,书中很多地方都带有可爱的地鼠(gopher)插图,它们就像旅行途中优美的景色-样,将为我们的学习旅途增添大量的乐趣。

 

总而言之,这是一本既有趣又实用的Go语言入门书。如果你想入门Go语言,那么强烈推荐你读这一本哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值