对于一门只有十年历史的新语言来说,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. IIS6的工作进程回收
  2. 【PP操作手册】试制计划
  3. 原生js路由跳转方法_今日艰难笔记原生js整合reactrouter路由管理
  4. 迅雷2014校园招聘笔试题
  5. Web打印连续的表格,自动根据行高分页
  6. cocos2d-x编程之CCScale9Sprite典型用法
  7. 读取pdf文件信息(pdfinfo)
  8. android 中文语音
  9. Java基础学习总结(165)——API 安全最佳实践
  10. 心电图图平板运动测试软件,心电图和平板运动可以检查出心
  11. goland 2019.1.1破解
  12. 关于pycharm安装出现的interpreter field is empty,无法创建项目存储位置
  13. excel自动排班表_企业人员较多该怎么做考勤管理?该用什么排班软件?
  14. Seaweedfs上传大文件_large file
  15. 网络芯片比较:DP83848、DM9000、enc28j60、RLD8019、w5100
  16. 麦马计算机科学和麦马数学专业,积极配合 成功申请麦克马斯特大学数学专业...
  17. java不能覆盖父类的_java中子类覆盖父类方法所必须满足的条件
  18. linux如何查看证书过期时间,shell脚本:通过域名获取证书的过期时间
  19. 嵌入式I.MX6ULL裸机开发学习(一)汇编LED驱动程序
  20. 深度学习模型评价标准

热门文章

  1. I9 9900K线程_彗星降落人间——Intel第十代台式机酷睿处理器评测之I9篇
  2. CSRF---跨站请求伪造
  3. ResNet结构详解
  4. extjs6 异步树
  5. OOV问题-论文笔记《Neural Machine Translation of Rare Words with Subwords Units》- ACL2016
  6. 基于MATLAB/Simulink的电力系统稳定器(PSS)和静态无功补偿器(SVC)的两机传动系统暂态稳定性仿真模型,观察PSS和SVC对系统稳定性的影响
  7. Linux下smba服务端的搭建和客户端的使用
  8. SaaS产品项目实施流程
  9. 联想Y700笔记本:硬盘突然不见了
  10. 三国杀神话再临java版,神话再临 雷包10将 各版技能+台词 《三国杀》武将资料收录...