Go语言编程入门超级指南

2020-01-28 12:01:04王冬梅


$ go run helloworld.go

你好,世界!

$ go build helloworld.go
$ ls

helloworld  helloworld.go

$ ./helloworld

你好,世界!

2.2 Package管理

上面例子中我们使用的就是fmt包下的Println()函数。Golang约定:我们可以用./或../相对路径来引自己的package;如果不是相对路径,那么go会去$GOPATH/src下查找。

2.3 格式化输出

类似C、Java等语言,Golang的fmt包提供了格式化输出功能,而且像%d、%s等占位符和t、r、n转义也几乎完全一致。但Golang的Println不支持格式化,只有Printf支持,所以我们经常会在后面加入n换行。此外,Golang加入了%T打印值的类型,%v打印数组等集合的所有元素。

package main

import "fmt"
import "math"

/**
 * This is Printer!
 * 布尔值:false
 * 二进制:11111111
 * 八进制:377
 * 十六进制:FF
 * 十进制:255
 * 浮点数:3.141593
 * 字符串:printer
 *
 * 对象类型:int,string,bool,float64
 * 集合:[1 2 3 4 5]
 */
func main() {
    fmt.Println("This is Printer!")

    fmt.Printf("布尔值:%tn", 1 == 2)
    fmt.Printf("二进制:%bn", 255)
    fmt.Printf("八进制:%on", 255)
    fmt.Printf("十六进制:%Xn", 255)
    fmt.Printf("十进制:%dn", 255)
    fmt.Printf("浮点数:%fn", math.Pi)
    fmt.Printf("字符串:%sn", "printer")

    fmt.Printf("对象类型:%T,%T,%T,%Tn", 1, "hello", true, math.E)
    fmt.Printf("集合:%vn", [5]int{1, 2, 3, 4, 5})
}

3.语法基础

3.1 变量和常量

虽然Golang是静态类型语言,却用类似JavaScript中的var关键字声明变量。而且像同样是静态语言的Scala一样,支持类型自动推断。有一点很重要的不同是:如果明确指明变量类型的话,类型要放在变量名后面。这有点别扭吧?!后面会看到函数的入参和返回值的类型也要这样声明。

package main

import "fmt"

/**
 * 单变量声明:num[100], word[hello]
 * 多变量声明:i[1], i[2], k[3]
 * 推导类型:b1[true], b2[false]
 * 常量:age[20], pi[3.141593]
 */
func main() {
    var num int = 100
    var word string = "hello"
    fmt.Printf("单变量声明:num[%d], word[%s]n", num, word)

    var i, j, k int = 1, 2, 3
    fmt.Printf("多变量声明:i[%d], i[%d], k[%d]n", i, j, k)