本文讲述了在Go语言中把字符串转换成整数的三种方法。
Golang字符串int数据类型
String
和Int
是不同的数据类型,持有不同的值。
当我们想对包含数字的字符串进行数学计算时,我们必须将string
转换为int
。
如果用户在网络应用程序表格的文本框中输入数字,这将作为一个字符串的输入被接收。
例如,字符串包含数字134
,需要将这个值转换为int。
string
是一种原始类型,它包含一组用大括号和小括号({和})括起来的字符。
int
是一个包含数字值的原始类型。
在Go语言中,有不同的整数类型--Int8
,Int16
,Int32
。Int
是一个通用类型,可以根据平台操作系统来容纳数值。
如何在Go语言中把字符串转换为Int?
在Go语言中,有3种方法可以将字符串转换为Integer类型。
以下是这些方法
- strconv Atoi()函数
- strconv ParseInt()函数
- sprintf格式示例
strconv ParseInt函数示例
strconv.parseInt()
该函数接收一个字符串参数并返回一个整数值
以下是parseInt函数的语法
func ParseInt(s string, base int, bitSize int) (i int64, err error)
这个函数的参数
string - 要转换为int值的实际字符串
base - 从2到36的基数。
bitSize - 这个参数减少了解析出的int的大小
此函数的返回值
转换成功 - 返回默认的int64
类型值和err=nil
转换发生错误 -int64
值为零,返回NumError类型的错误。
该函数接受一个字符串参数,根据一个base
参数将其转换为相应的int
类型。
默认情况下,它返回Int64
值
下面是一个将String转换为int的例子。
该字符串包含数值hexadecimal
,octal
, 和任何其他数字
func main() {
// bitSize argument example usage
fmt.Println(" ======================= bitSize argument example ======================= ")
v1, err := strconv.ParseInt("5612", 0, 2)
fmt.Println(v1, err, reflect.TypeOf(v1))
v2, err := strconv.ParseInt("5612", 0, 8)
fmt.Println(v2, err, reflect.TypeOf(v2))
v3, err := strconv.ParseInt("5612", 0, 16)
fmt.Println(v3, err, reflect.TypeOf(v3))
// base argument example usage
fmt.Println(" ======================= base argument example ======================= ")
v4, err := strconv.ParseInt("5612", 0, 16)
fmt.Println(v4, err, reflect.TypeOf(v4))
v5, err := strconv.ParseInt("5612", 8, 32)
fmt.Println(v5, err, reflect.TypeOf(v5))
v6, err := strconv.ParseInt("5612", 16, 64)
fmt.Println(v6, err, reflect.TypeOf(v6))
// String Argument argument example usage
fmt.Println(" ======================= String argument example ======================= ")
v7, err := strconv.ParseInt("0x123", 0, 64) // hexdecimal Numeric Conversion
fmt.Println(v7, err, reflect.TypeOf(v7))
v8, err := strconv.ParseInt("0123", 0, 64) // Octal Number Conversion
fmt.Println(v8, err, reflect.TypeOf(v8))
v9, err := strconv.ParseInt("123", 0, 64) // any other number
fmt.Println(v9, err, reflect.TypeOf(v9))
// Invalid String argument conversion example usage
fmt.Println(" ======================= Invalid String argument conversion example usage ======================= ")
v10, err := strconv.ParseInt("abc", 0, 64) // any other number
fmt.Println(v9, err, reflect.TypeOf(v10))
}
上述程序的输出是
======================= bitSize argument example =======================
1 strconv.ParseInt: parsing "5612": value out of range int64
127 strconv.ParseInt: parsing "5612": value out of range int64
5612 int64
======================= base argument example =======================
5612 int64
2954 int64
22034 int64
======================= String argument example =======================
291 int64
83 int64
123 int64
======================= Invalid String argument conversion example usage =======================
123 strconv.ParseInt: parsing "abc": invalid syntax int64
strconv.Atoi函数示例
strconv.Atoi()
函数接收一个字符串并返回整数类型的值
下面是strconv.Atoi()函数的函数签名
func Atoi(s string) (int, error)
参数:它接受一个字符串作为参数。
返回:如果string
,成功转换为int
,它返回int
,error
为nil值。
如果发生错误,int
值为零,error
为零返回。
例如,如果123
值被传递给atoi()
函数,它返回int
值 -123 和error
是零。
如果通过asdfadsf
,返回的int
值为零,并且在运行时返回以下错误。
strconv.Atoi
:解析 "asdfadsf":无效的语法 这个函数等同于ParseInt(s, 10, 0),它转换为int类型。
package main
import (
"fmt"
"strconv"
)
func convertStringToInt(str string) {
strValue, err := strconv.Atoi(str)
if err == nil {
fmt.Printf("DataType: %T \n", strValue) // Display DataType
fmt.Println("value - ", strValue) // variable value
}
fmt.Println("error - ", err)
}
func main() {
convertStringToInt("243")
convertStringToInt("asdfadsf")
}
当上述程序被编译和执行时,返回输出如下
DataType: int
value - 243
error -
error - strconv.Atoi: parsing "asdfadsf": invalid syntax
fmtcan函数示例
fmt
包提供了sscan()
,该函数扫描字符串参数并存储到变量中。
这个函数读取带有空格的字符串并将其分配到连续的整数变量中。
下面的程序有三种变化
convertStringToInt()
函数读取正常的字符串,其中包含转换为整数的数字值customConversion()
其中包含由连字符分隔的字符串。customConversionWithSpaces()
其中包含在字符串中由空格分隔的数字
package main
import (
"fmt"
)
func convertStringToInt(str string) {
intValue := 0
_, err := fmt.Sscan(str, &intValue)
fmt.Println(err)
if err == nil {
fmt.Printf("value=%d, type: %T\n", intValue, intValue)
}
}
func main() {
convertStringToInt("123") // 123 is returned of int type
convertStringToInt("1aa23a") // 1 is returned of int type
convertStringToInt("abcc") // It gives error - expected integer
customConversion("number=00178") // 00178
customConversionWithSpaces("1 3 5") // 1 3 5 is output
}
//custom format
func customConversion(str string) {
var intValue int
if _, err := fmt.Sscanf(str, "number=%5d", &intValue); err == nil {
fmt.Printf("value=%d, type: %T\n", intValue, intValue)
}
}
//custom string contains spaces
func customConversionWithSpaces(str string) {
var m, n, o int
fmt.Sscan(str, &m, &n, &o)
fmt.Println(m, n, o)
}
上述程序的输出是
value=123, type: int
value=1, type: int
expected integer
value=178, type: int
1 3 5
哪一个在性能时间上更好?\ parseInt()
是性能最好的,接下来是atoi()
函数,性能最低的是sscan()
函数。