![6c12411183eff10f78ba65279d8e1c6a.png](https://i-blog.csdnimg.cn/blog_migrate/dfe9411163c27f1268f6a4522fb1c64b.jpeg)
对于一门只有十年历史的新语言来说,Go 的发展势头可谓是相当迅猛,容器界的扛把子 Docker 就是用 Go 写的, 因此不少程序员开始学起 Go 来,今天,小编就带大家走近 Go 语言。
你们知道 Go 语言为什么叫 Go 吗?这得从它的吉祥物说起。Go 的吉祥物是一个来自加拿大的小动物——“地鼠”(gopher),这个小动物最大的特点就是挖洞速度特别快。
因此 Go 语言的名字取自 gopher,就是想表达这门语言的运行速度、开发速度、学习速度都像 gopher 一样快。而且 Go 语言的 logo 还是 Go 语言之父 Rob 的夫人设计的哦!
![3f7886a2e3e99eb8718cb1e162e44f9d.png](https://i-blog.csdnimg.cn/blog_migrate/dcc52acb397ed9125b45cf5903e0f4a0.jpeg)
虽然 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](https://i-blog.csdnimg.cn/blog_migrate/c38de539ec19e42b2762a9b68ccd6019.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(也就是
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](https://i-blog.csdnimg.cn/blog_migrate/ea5af64d5f4b09cc75382d05806c0a54.jpeg)
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](https://i-blog.csdnimg.cn/blog_migrate/3d861c574d91bf750663fa26236e36bf.jpeg)
充满趣味的 Go
目前,很多 Go 语言的学习资源都假设读者拥有 C 语言的经验基础,而且内容枯燥,很难坚持学下去。因此,小编给大家带来了有趣又实用的 Go 语言学习资料——《Go语言趣学指南》。
![2199d8849f9d5acbe5d25bbfbe19859c.png](https://i-blog.csdnimg.cn/blog_migrate/06661d06dd059c8c25977799a4e1686d.jpeg)
这是一本真正面向初学者的书。整本书的学习曲线非常平缓,不会像过山车那样忽高忽低。书中的内容首先从变量、循环、分支、类型等基础知识开始,逐渐进阶至函数、方法、收集器和结构,最后再深入到指针、错误处理和并发等高级特性。
只要翻开本书一页页读下去,你就会循序渐进地学到越来越多 Go 语言的知识,并且逐步掌握 Go 语言的众多特性。
它还是一本非常有趣的书。作者在书中列举了大量跟天文以及航天有关的例子,读者不仅可以计算从地球乘坐宇宙飞船航行至火星所需的天数,还可以在火星上放置探测器以便查找生命存在的痕迹,甚至还可以想办法改造火星,使它能够适宜人类居住。
值得提的是,书中很多地方都带有可爱的地鼠 ( gopher ) 插图,它们就像旅行途中优美的景色一样,将为我们的学习旅途增加很多乐趣。
这样一本有趣又实用的Go语言指南书,真乃入门Go语言的不二之选!
文章来源:异步图书,有删改