GoLang实例 - 将字符串转换为Int类型的实例

1,092 阅读4分钟

本文讲述了在Go语言中把字符串转换成整数的三种方法。

Golang字符串int数据类型

StringInt 是不同的数据类型,持有不同的值。

当我们想对包含数字的字符串进行数学计算时,我们必须将string 转换为int

如果用户在网络应用程序表格的文本框中输入数字,这将作为一个字符串的输入被接收。

例如,字符串包含数字134 ,需要将这个值转换为int。

string 是一种原始类型,它包含一组用大括号和小括号({和})括起来的字符。

int 是一个包含数字值的原始类型。

在Go语言中,有不同的整数类型--Int8,Int16,Int32Int 是一个通用类型,可以根据平台操作系统来容纳数值。

如何在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 ,它返回interror 为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() 函数。