亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang:如何處理索引超出范圍錯誤?

golang:如何處理索引超出范圍錯誤?

Go
慕妹3146593 2022-01-10 15:12:02
我正在用 Go 編寫一個 CLI 接口程序。我的程序需要用戶輸入文件名作為參數。以下是我為處理用戶不輸入任何參數的情況而編寫的代碼。但它會恐慌并給出錯誤“索引超出范圍”。我該如何處理?  package mainimport (    "encoding/hex"    "fmt"    "io/ioutil"    "log"    "os")func main() {    if len(os.Args) == 0 {        fmt.Println("usage: gohex  <filename>")        os.Exit(1)    } else {        filename := os.Args[1]        data, err := ioutil.ReadFile(filename)        if err != nil {            log.Fatal(err)        }        fmt.Println(hex.Dump(data))    }}
查看完整描述

2 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

您的問題取決于這一行:


if len(os.Args) == 0

您正在檢查您認為應該是文件名的第一個參數,但實際上是 go / 可執行文件名。因此,如果您想檢查是否提供了參數,則需要檢查參數長度是否大于1. 將代碼更改為:


if len(os.Args) <= 1 {

    log.Fatal("usage: gohex  <filename>")

}


查看完整回答
反對 回復 2022-01-10
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

另一個答案有幾個問題。它有這個檢查:


len(os.Args) <= 1

但len(os.Args)必須總是至少1,所以使用<=是沒有意義的。此外,在這種特定情況下,len除此之外的任何其他內容2也是無效的。所以只需檢查一下:


package main

import "os"


func main() {

   if len(os.Args) != 2 {

      println("gohex <filename>")

      return

   }

   filename := os.Args[1]

   println(filename)

}

旁注,我個人也認為 usingos.Exit(1)在這種情況下也是無效的。我認為“打印幫助文本”是一個有效的用例,而不是錯誤。


查看完整回答
反對 回復 2022-01-10
  • 2 回答
  • 0 關注
  • 340 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號