对于一门只有十年历史的新语言来说,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语言,那么强烈推荐你读这一本哦!

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

  1. 今晚19:30直播 | 这些国家为何今年扎堆去火星?航天专家庞之浩揭秘

    从儿时熟悉的"马丁叔叔",到近年热映的<火星救援>,火星一直寄托着人类无数太空梦想,甚至被视为人类"太空家园"的重要候选. 为此,60年间,人类进行 ...

  2. 机票盲盒,能带你去“快乐星球”吗?

    机票盲盒,能带你去"快乐星球"吗? 出品 l 观点财经 作者 l 亚瑟 "盲盒经济"持续火热,但藏在盲盒里的不只有潮玩,还可能是一段未知的旅程. 今年4月,多家 ...

  3. 1000艘星舰,2050年送100万人润去火星!马斯克再吹「当代诺亚方舟」

      视学算法报道   编辑:袁榭 [新智元导读]2022年6月初,马斯克再弹老调,又一次宣布要送千艘星舰上火星.完成当代的诺亚方舟壮举. 世界首富.兼人类梗王马斯克院士,又在推特上字面意义上的例行满嘴 ...

  4. 盖茨来了:比起去火星,地球有些事更紧迫

    2023年6月14日晚,比尔·盖茨在微博更新了一条消息,他写道:我刚降落在北京,这是我2019年以来的首次访问.盖茨基金会与中国伙伴合作应对全球健康和发展挑战已经超过15年.我非常高兴能与中国的伙伴们 ...

  5. 脑洞文之去火星搞IT!

    前两天刚看了<火星救援>,为剧情称赞之余,突然脑洞大开,如果人类有一天登录火星啦,到那时候,怎样做好星际互联网的通信以及网络运维工作肯定是一个必须要考虑的问题,既然如此,那我们就先臆想下如 ...

  6. 去火星的票和背后的故事!

  7. 上班需要打卡吗?(开通微信公众号--乘着风筝去火星)

    打卡怪象 打卡上班,朝九晚五似乎是工作的一种标志.但每次听到这样的说法,我怎么总是提不起劲儿呢? 我曾经服务的一家公司管理考勤的人员就有十几个,考勤管理制度需要培训半小时!我想起了小学 那篇在课桌上刻 ...

  8. 火星开发的价值_火星开发_550字

    2020年,世界人口的膨胀已经达到了极点,人类对粮食,淡水,能源等自然资源的需要也日益增加.如果不尽快解决人口膨胀问题,那么我们这个可爱的地球,迟早有一天会变得资源枯竭.那时,人类将何去何从呢? 这可 ...

  9. “火星自治”,马斯克这次是认真的吗?

    面对一份长篇累牍的网络服务条款和用户隐私协议,很少有地球人会逐字逐句的看完.即使我们发现有很多不合理之处,但是为了能用到平台提供的服务,我们还是会忍气吞声地点了同意. 但是未来,如果你遇到马斯克他们家 ...

最新文章

  1. 【iOS官方文档翻译】UICollectionView与UICollectionViewFlowLayout
  2. Swift 代码调试-善用XCode工具(UI调试,五种断点,预览UIImage...)
  3. 另类设计:12个基于桌面视图的网页设计作品
  4. javascript(arguments)
  5. Scrapy学习大全
  6. 查看硬件配置的Linux命令,LINUX 查看硬件配置命令的教程
  7. pg_restore - 从一个由 pg_dump 创建的备份文件中恢复 PostgreSQL 数据库。
  8. 非标自动化企业前十名_企业动态 | 瑞弗机电:全链条拓展“非标定制” 量身定制自动化生产线...
  9. 二分搜索:lower_bound 与 upper_bound 函数
  10. HFSS19 官方中文教程系列 L06
  11. 如何使用FreeSSL申请免费证书?
  12. Oracle数据库闪回
  13. websocket协议和服务实现
  14. java月份下拉菜单_实现一个日期下拉菜单
  15. Adobe国际认证证书对于设计师而言,真的很重要?
  16. jquery append添加的元素用jquery无法获取到
  17. 基于声学模型共享的零资源韩语识别系统
  18. 谷歌 汽车 android auto link,谷歌将推出Auto Link智能车载系统
  19. c#创建word表格 将表格所有内容居中
  20. Jenkins部署maven项目找不到jar包解决

热门文章

  1. 无意中看到一个很强的贴,简直一群机关枪阿
  2. 【动态规划】引例--多起点,多终点的最短路径问题
  3. MQL4自编指标学习1
  4. WindowsForm切换窗口的几种常见实现
  5. 非科班出身程序员,如何超越科班程序员?
  6. 密室逃脱2碧绿色房间攻略
  7. 新能源汽车档位控制器软件功能定义及其策略
  8. java 字节流乱码_java用字节流读取中文乱码怎么解决?
  9. CVE-2014-4113:飓风熊猫(HURRICANE PANDA)Win64bit提起权0day破绽
  10. Letswave 教程:脑电数据预处理与叠加平均