ps:来源于Go官方文档及个人总结
简介
Go 编程语言是一个开源项目,它使程序员更具生产力。
Go 语言具有很强的表达能力,它简洁、清晰而高效。得益于其并发机制, 用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。 它是一个快速的、静态类型的编译型语言,感觉却像动态类型的解释型语言。
特色
- 简洁、快速、安全
- 并行、有趣、开源
- 内存管理、数组安全、编译迅速
用途
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
入门
常规操作试手:
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
包
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
每个 Go 程序都是由包组成的。
程序运行的入口是包 `main`。
这个程序使用并导入了包 "fmt"
和 `"math/rand"`。
按照惯例,包名与导入路径的最后一个目录一致。例如,`"math/rand"` 包由 package rand
语句开始。
如上代码中,Intn从默认Source返回[0,n)中的非负伪随机数作为int。如果n <= 0,则panics(相当于java 中的Exception)。
注意: 这个程序的运行环境是固定的,因此 rand.Intn
总是会返回相同的数字。 (为了得到不同的数字,需要生成不同的种子数。参阅 rand.Seed)
ps:关于Go的随机数问题参考https://www.cnblogs.com/logo-fox/p/7396710.html
导入
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("Now you have %g problems.", math.Nextafter(2, 3))
}
这个代码用圆括号组合了导入,这是“打包”导入语句。
同样可以编写多个导入语句,例如:
import "fmt"
import "math"
不过使用打包的导入语句是更好的形式。
如上代码中,对于%g,它是唯一标识该值所需的最少位数,如102.00则为102。%.3g精度设置最大的有效位为3,如1.235则1.24(有趣的是当数字为1.335时结果为1.33,这似乎需要再去了解其底层实现机制 此处留疑问)。详细查看https://golang.org/pkg/fmt/
对于math.Nextafter(x,y), 参数x到参数y的方向上,下一个可表示的数值;如果x==y将返回x。
math.Nextafter(2,3)返回的是 2.0000000000000004 ,为什么不是2.0000000000000001这与64为能表示的浮点数有关。详细可参考https://ask.csdn.net/questions/1016639
导出名
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.pi)
}
在导入了一个包之后,就可以用其导出的名称来调用它。
在 Go 中,首字母大写的名称是被导出的。
Foo
和 FOO
都是被导出的名称。名称 foo
是不会被导出的。
执行如上代码是会报错的,需将 math.pi
改名为 math.Pi
。