Hello, World
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}# 直接运行
go run main.go
# 生成二进制可执行文件
go build main.go
./maingo 项目 初始化
如果你要运行一个 Go 项目,请确保你有正确的 Go 文件(例如,main.go)并执行以下步骤:
- 确保你在项目的根目录下执行命令。
- 确保存在一个
go.mod文件。如果不存在,可以通过运行go mod init <module_name>来创建,其中<module_name>是你的模块名称。 - 使用正确的命令运行 Go 项目,例如:
go run main.go。
命令行参数
os 包以跨平台的方式,提供了一些与操作系统交互的函数和变量。程序的命令行参数可从 os 包的 Args 变量获取;os 包外部使用 os.Args 访问该变量。
os.Args 变量是一个字符串(string)的 切片(slice)(译注:slice 和 Python 语言中的切片类似,是一个简版的动态数组),切片是 Go 语言的基础概念,稍后详细介绍。现在先把切片 s 当作数组元素序列,序列的长度动态变化,用 s[i] 访问单个元素,用 s[m:n] 获取子序列。
os.Args 的第一个元素:os.Args[0],是命令本身的名字;其它的元素则是程序启动时传给它的参数。s[m:n] 形式的切片表达式,产生从第 m 个元素到第 n-1 个元素的切片,下个例子用到的元素包含在 os.Args[1:len(os.Args)] 切片中。如果省略切片表达式的 m 或 n,会默认传入 0 或 len(s),因此前面的切片可以简写成 os.Args[1:]。
// Echo1 prints its command-line arguments.
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for i := 1; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(s)
}
// go run main.go tt 111
// tt 111var 声明定义了两个 string 类型的变量 s 和 sep。变量会在声明时直接初始化。如果变量没有显式初始化,则被隐式地赋予其类型的 零值(zero value),数值类型是 0,字符串类型是空字符串 ""。这个例子里,声明把 s 和 sep 隐式地初始化成空字符串。
循环
for initialization; condition; post {
// zero or more statements
}
for condition {
// ...
}
for {
// ...
}
s, sep := "", ""
for _, arg := range os.Args[1:] {
s += sep + arg
sep = " "
}变量声明
s := "" // 短变量声明,最简洁,但只能用在函数内部,而不能用于包变量
var s string // 依赖于字符串的默认初始化零值机制,被初始化为 `""`
var s = "" // 用得很少,除非同时声明多个变量
var s string = "" // 显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了strings.Join(os.Args[1:], " ")