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

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

在 Go 中,如何驗證用戶輸入的數據類型是否與代碼的數據類型匹配?

在 Go 中,如何驗證用戶輸入的數據類型是否與代碼的數據類型匹配?

Go
翻過高山走不出你 2022-10-24 16:56:47
我是 Go 新手。目前,我正在 Go 中創建一個菜單,我想驗證用戶輸入的數據類型是否與代碼中定義的變量的數據類型相匹配。到目前為止,我的部分代碼如下所示:package mainimport (    "fmt"    "reflect")var option int // The variable is declared outside of the main().func general_menu() {    fmt.Println(".......................General Menu..................................")        fmt.Println()        fmt.Println("Calculator..........................................................1")        fmt.Println("Linear algebra package..............................................2")        fmt.Println("Language change.....................................................9")        fmt.Println("Exit...............................................................10")        fmt.Println()        fmt.Println("Choose an option from the menu.")        fmt.Println()        fmt.Scan(&option)        fmt.Println()        if (option != 1 && option != 2 && option != 9 && option != 10)||reflect.TypeOf(option)!=int{            fmt.Println("Wrong option input. Please, try again.")            fmt.Println()            general_menu()        }}我知道這不起作用,而且我知道“int”不能用作“if”條件的一部分。對于解決此問題的正確方法的任何建議,我將不勝感激。謝謝。編輯:根據貢獻者的建議,我添加了更多代碼。編輯:根據提供的答案,我嘗試實現一個函數,但語法仍然不正確:func check_integers_are_not_string(x int) bool {    change := strconv.Itoa(x)    if change != nil {        return true    } else {        return false    }} // This function returns a true boolean value if conversion from int to string was possible, meaning that the entered value is a string.
查看完整描述

2 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

只需閱讀 Scan 的文檔 - https://pkg.go.dev/fmt#Scan


它返回成功讀取參數的數量和一個錯誤。在您的情況下,輸入被映射到一個 int 類型的變量,因此如果用戶輸入一個字符串,它將返回 0 和一個錯誤。否則它將返回 1 并且錯誤應該為零。你可以檢查一下。


n, err := fmt.Scan(&option)

if n != 1 || err != nil {

  // print error and go back 

}


查看完整回答
反對 回復 2022-10-24
?
躍然一笑

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

一種常見的方法是嘗試進行轉換并查看它是否成功。


optionInt, err := strconv.Atoi(option) // Assuming option is of type string

if err != nil {

    log.Printf("String '%s' cannot be converted to type int: %v", option, err)

    os.Exit(1)

}

log.Printf(`optionInt is %d.`, optionInt)

如果您只對轉換為一種類型感興趣,這是一種很好的方法。否則,事情可能很快就會變得更加復雜,使用諸如詞法分析器和解析器之類的結構,但這將保證更多關于您正在嘗試完成的信息的信息。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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