系统操作:
os.Args返回启动时传入的参数,[]string类型。Args[0]程序的名称(包含路径),os.Args[1:] 是用户在命令行中输入的其他参数, 按顺序排列
// 打印所有命令行参数
fmt.Println("Command-line arguments:")
for i, arg := range os.Args {
fmt.Printf("%d: %s\n", i, arg)
} //终端执行go run test.go a b c d
//输出:0: C:\Users\Administrator\AppData\Local\Temp\go-build3800719154\b001\exe\test.exe
1: a
2: b
3: c
4: d
//os.Setenv可以以k-v形式设置环境变量
os.Setenv("AA", "BB")
fmt.Println(os.Getenv("AA")) //BB
import "os/exec"
//func Command(name string, arg ...string) *Cmd 创建一个命令对象。函数参数:调用命令,命令参数
cmd := exec.Command("ls", "-l")
// 运行命令并获取输出
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("Error:", err)
return
} //命令对象方法:Run: 运行命令并等待其完成,返回一个错误(如果有)。
Output: 运行命令并返回其标准输出。
CombinedOutput: 运行命令并返回其标准输出和标准错误的合并结果
随机数:
// 可以直接使用当前时间作为种子
source := rand.NewSource(time.Now().UnixNano())
r := rand.New(source)// 生成一些随机数
fmt.Println(r.Intn(100)) // 生成一个在 [0, 100) 范围内的随机整数
fmt.Println(r.Float64()) // 生成一个 [0.0, 1.0) 范围内的随机浮点数
读取输入:
//读取用户键盘输入内容
package main
import (
"fmt"
)
func main() {
//使用 fmt.Scan
var input string
fmt.Print("请输入内容: ")
_, err := fmt.Scan(&input)
if err != nil {
fmt.Println("输入错误:", err)
return
}
fmt.Println("你输入的内容是:", input)
//使用 bufio 包
reader := bufio.NewReader(os.Stdin)
fmt.Print("请输入内容: ")
input, err := reader.ReadString('\n') //直到遇到换行符
if err != nil {
fmt.Println("输入错误:", err)
return
}
fmt.Println("你输入的内容是:", input)
}
error:
//直接创建一个错误实例
errors.New("this is an error")
//如果有格式化需求就调用fmt.Errof方法,需要传递err参数
if err!=nil{
fmt.Errorf("this is an another error: %w",err) //用%w将err关联至错误链中
}
//判断错误是否为特定错误
//该判定方法与== 不同,可判定错误链上是否有特定错误
if errors.Is(err,fs.ErrorNotExist){ }//判断错误链上是否有文件不存在错误
//在错误链上获取第一个特定错误,不存在则返回false
errors.As(err error, target any) bool
panic:
一般不建议用panic。当程序启动阶段发生不可逆转的错误时可以使用,一般可在init函数或main函数中使用
常用recover捕获panic。
recover只能在defer函数中使用
当panic发生时,Go语言运行时会查找调用栈中的defer函数,并检查是否存在recover函数。如果存在,程序将停止继续向上传播panic,并开始执行recover函数。
defer func() {
if r := recover(); r != nil {
//这里执行panic处理逻辑
}
}()