golang基础语法常用包-2和错误处理

131 阅读2分钟

系统操作:

    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处理逻辑
        }
    }()