Go 快速入门指南 - 包的导入和调试打印
导入包
关键字 import
语法规则
- • 导入单个包
import "包名"
- • 导入多个包
import (
    "包名1"
    "包名2"
    "包名3"
    ...
)
- • 导入包使用别名
import 别名 "包名"
例子
- • 导入 打印包
package main
import "fmt"
func main() {
    fmt.Println("hello world")
}
- • 导入 打印包和字符串包
package main
import (
    "fmt"
    "strings"
)
func main() {
    fmt.Println("hello world")
    fmt.Println(strings.Repeat("hello ", 3)) // 字符串重复
}
// $ go run main.go
// 输出如下
/**
  hello world
  hello hello hello
*/
- • 导入包使用别名
package main
import (
    "fmt"
    myStr "strings"
)
func main() {
    fmt.Println(myStr.Repeat("hello ", 3))
}
// $ go run main.go
// 输出如下
/**
  hello hello hello
*/
普通打印
- 
• 优点:内置函数,不需要引入额外的包,简单方便。 
- 
• 不足:无法进行格式化打印,无法完整打印复合数据结构 (如数组, Map 等)。 
println 函数
打印多个传入的参数,并自动加一个换行。
例子
package main
func main() {
    println(1024, "hello world", true)
}
// $ go run main.go
// 输出如下 
/**
    1024 hello world true
*/
print 函数
和 println 功能一样,但是不会自动加换行。
格式化打印
这里先介绍 2 个方法,分别是 fmt 包里面的 Println() 和 Printf(), 大多数场景下都适用。
fmt.Println()
功能上和 println 函数 类似,但是可以打印复合数据结构 (如数组, Map 等)。
例子
package main
import "fmt"
func main() {
    fmt.Println(1024, "hello world", true)
}
// $ go run main.go
// 输出如下 
/**
  1024 hello world true
*/
fmt.Printf()
最重要的格式化打印函数之一,可以针对不同数据类型和数据结构进行打印,非常强大。
格式化规则
和 C 系列 编程语言的 printf() 格式化规则差不多。
通用
- 
• %v默认格式
- 
• %+v针对结构体,在%v的基础上输出结构体的键名
- 
• %#vGo 语言语法格式的值
- 
• %TGo 语言语法格式的类型和值
- 
• %%输出%, 相当于转义
整型
- 
• %b二进制格式
- 
• %c对应的 Unicode 码
- 
• %d十进制
- 
• %o八进制
- 
• %O八进制,加上0o前缀
- 
• %qGo 语言语法转义后的单引号字符 (很少使用) 例如 97 会输出'a'
- 
• %x十六进制 (小写), 例如0xaf
- 
• %X十六进制 (大写), 例如0xAF
- 
• %UUnicode 例如"U+%04X"
Bool
- • %ttrue 或 false
浮点型
- 
• %b指数为 2 的幂的无小数科学计数法,例如 -123456p-78
- 
• %e科学计数法, 例如 -1.234456e+78
- 
• %E科学计数法, 例如 -1.234456E+78
- 
• %f常规小数点表示法 (一般使用这个), 例如 123.456
- 
• %F和%f功能一样
字符串
- 
• %s字符串
- 
• %q将双引号"转义后的字符串
- 
• %x将字符串作为小写的十六进制
- 
• %X将字符串作为大写的十六进制
指针
- • %p地址的十六进制,前缀为0x
例子
package main
import "fmt"
func main() {
    n := 1024
    fmt.Printf("n = %d\n", n) // 输出整型
    pi := 3.1415
    fmt.Printf("pi = %f\n", pi) // 输出浮点数
    str := "hello world"
    fmt.Printf("str = %s\n", str) // 输出字符串
    yes := true
    fmt.Printf("yes = %t\n", yes) // 输出布尔型
    x := 17
    fmt.Printf("yes = %b\n", x) // 输出二进制
}
// $ go run main.go
// 输出如下
/**
    n = 1024
    pi = 3.141500
    str = hello world
    yes = true
    x = 10001
*/
fmt.Printf() 技巧
在打印中,如果一个变量打印多次,可以通过 [1] 来表示后续变量全部以第一个为准。
例子
package main
import (
    "fmt"
)
func main() {
    n := 1024
    fmt.Printf("%T %d %v\n", n, n, n)
    fmt.Printf("%T %[1]d %[1]v\n", n) // 可以使用 [1] 来表示引用第一个变量,这样只需要一个变量就可以了
}
// $ go run main.go
// 输出如下
/**
    int 1024 1024
    int 1024 1024
*/
备注
笔者建议大家先记住 fmt 包里有这两个打印方法,具体的参数顺序和格式化规则可以暂时忽略, 等后面学完了数组、结构体、Map 等复合数据结构以后,再根据具体场景回过头来查找对应的规则。
联系我

 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号