Hello, World

package main
import "fmt"
func main() {
    fmt.Println("Hello, 世界")
}
# 直接运行
go run main.go
 
# 生成二进制可执行文件
go build main.go
./main

go 项目 初始化

如果你要运行一个 Go 项目,请确保你有正确的 Go 文件(例如,main.go)并执行以下步骤:

  1. 确保你在项目的根目录下执行命令。
  2. 确保存在一个 go.mod 文件。如果不存在,可以通过运行 go mod init <module_name> 来创建,其中 <module_name> 是你的模块名称。
  3. 使用正确的命令运行 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 111

var  声明定义了两个  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:], " ")