一. 基本概念 Go是一门编译型语言,Go语言的工具链将源代码及其依赖转换成计算机的机器指令(静态编译)。Go语言提供的工具都通过一个单独的命令go
调用,go
命令有一系列子命令。最简单的一个子命令就是run。这个命令编译一个或多个以.go结尾的源文件,链接库文件,并运行最终生成的可执行文件。
1 2 3 4 5 6 7 package mainimport "fmt" func main () { fmt.Println("Hello, 世界" ) }
go build helloworld.go
这个命令生成一个名为helloworld
的可执行的二进制文件(译注:Windows系统下生成的可执行文件是helloworld.exe,增加了.exe后缀名),之后你可以随时运行它(译注:在Windows系统下在命令行直接输入helloworld.exe命令运行),不需任何处理(译注:因为静态编译 ,所以不用担心在系统库更新的时候冲突,幸福感满满)。
Go的标准库提供了100多个包,以支持常见功能,如输入、输出、排序以及文本处理。比如fmt
包,就含有格式化输出、接收输入的函数。Println
是其中一个基础函数,可以打印以空格间隔的一个或多个值,并在最后添加一个换行符,从而输出一整行。main
包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main
里的main
函数 也很特殊,它是整个程序执行时的入口(译注:C系语言差不多都这样)。main
函数所做的事情就是程序做的。当然了,main
函数一般调用其它包里的函数完成很多工作(如:fmt.Println
)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package mainimport ( "fmt" "os" "strings" "time" ) func main () { var s, step string os.Args = []string {"echo" , "1" , "2" , "3" } for i := 0 ; i < len (os.Args); i++ { s += step + os.Args[i] step = " " } fmt.Println(s, "\n" , len (os.Args), os.Args) fmt.Println("--------------------range-----------------------------" ) startTime := time.Now() for _, v := range os.Args[0 :] { s += step + v step = " " } endTime := time.Now() fmt.Println("时间:" , endTime.Sub(startTime), s) fmt.Println("--------------------join-----------------------------" ) start := time.Now() join := strings.Join(os.Args[0 :], "," ) end := time.Now() fmt.Println(end.Sub(start).Nanoseconds(), join) }
二.变量声明方式 1 2 3 4 s := "" var s string var s = "" var s string = ""
第一种形式,是一条短变量声明,最简洁,但只能用在函数内部,而不能用于包变量。第二种形式依赖于字符串的默认初始化零值机制,被初始化为””。第三种形式用得很少,除非同时声明多个变量。第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的类型,否则使用隐式初始化。
三. 查找重复行