我是 Go 新手。
目前,我正在 Go 中創建一個選單,我想驗證用戶輸入的資料型別是否與代碼中定義的變數的資料型別相匹配。到目前為止,我的部分代碼如下所示:
package main
import (
"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.
uj5u.com熱心網友回復:
一種常見的方法是嘗試進行轉換并查看它是否成功。
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)
如果您只對轉換為一種型別感興趣,這是一種很好的方法。否則,事情可能很快就會變得更加復雜,使用諸如詞法分析器和決議器之類的結構,但這將保證更多關于您正在嘗試完成的資訊的資訊。
uj5u.com熱心網友回復:
只需閱讀 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
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417947.html
標籤:
