如何将 Golang 字符串转换为 Int

Go 是静态类型的。 每个变量都有一个静态类型,恰好是编译时已知和固定的一种类型:int、float32、*MyType、 []字节等。

在 Go 中,数据类型用于区分一种特定类型的数据,定义可以分配给类型的值以及可以执行的操作。

在编程中,有时您需要在类型之间转换值以以不同方式修改值。 因此,Golang 中的类型转换是最重要的主题之一。

Golang 字符串到 Int

在 Golang 中将字符串转换为 int,

  1. strconv.Atoi()

  2. strconv.ParseInt()

  3. fmt.Sscanf()

Golang 有一个名为 strconv 的内置包,它提供了将字符串转换为 int 的函数。

Atoi() Sscanf() 和 ParseInt() 是将 Golang 字符串转换为 int 的三个函数。 Go 是静态类型语言; 数据类型绑定到变量而不是值。

这意味着如果你定义变量为int,它只能是int; 如果不转换变量的字符串数据类型,就无法将字符串分配给它。

使用 strconv.Atoi(str) 将 Golang 字符串转换为 int

Golang strconv.Atoi() 函数返回其 int 类型的值。 如果 str 是有效输入,则该函数返回传递的字符串编号的等效整数。 Atoi 代表 ASCII 到整数。

如果没有发生有效的转换,则函数返回零。

// hello.go

package main

import (
	"fmt"
	"strconv"
)

func main() {
	data := "11"
	if sv, err := strconv.Atoi(data); err == nil {
		fmt.Printf("%T, %v", sv, sv)
	}
}

输出

go run hello.go
int, 11

我们定义了一个名为“1”的字符串,并使用 Atoi() 函数将字符串转换为整数。

然后我们使用 fmt 动词来打印转换后的数据类型和值。

从上面的例子中,我们可以看到它将字符串“”1“”转换为整数11。

在上面的代码示例中,我们取了一个整数 11,通过 puttin”””” 把它变成一个字符串,所以转换成整数后,它就像 11,是一个普通的整数,但是我们尝试转换”” Golan””字符串并查看输出。

// hello.go

package main

import (
	"fmt"
	"strconv"
)

func main() {
	data := "Golang"
	sv, err := strconv.Atoi(data)
	if err == nil {
		fmt.Printf("%T, %v", sv, sv)
	} else {
		fmt.Println(err)
	}
}

在上面的代码中,我们的数据是“”Golang””,它是一个字符串。

现在,strconv.Atoi() 函数将返回错误,因为“”Golan””字符串将被视为无效语法并引发如下错误。

strconv.Atoi: 解析””Golan””: 无效的语法输出

go run hello.go
strconv.Atoi: parsing "Golang": invalid syntax

您可以使用 strconv.Atoi(s) 将字符串 s 转换为 32 位整数。 Atoi() 函数等价于 ParseInt(s, 10, 0) 函数,转换为 int 类型。

在 Golang 中将自定义字符串解析为 int

还有 Golang fmt.Sscanf(),它提供了更大的灵活性,就像使用格式字符串一样,您可以指定数字格式(如宽度、基数等)以及输入字符串中的一些额外字符。 让我们深入研究 Golang fmt.Sscanf() 函数。

Golang 函数 Sscanf()

Golang Sscanf() 函数扫描参数字符串,将连续的空格分隔值存储到格式定义的后续参数中。

Sscanf() 返回成功解析的项目数。 输入中的换行符必须与格式中的换行符匹配。

// hello.go

package main

import (
	"fmt"
)

func main() {
	s := "id:00211"

	var i int
	if _, err := fmt.Sscanf(s, "id:%5d", &i); err == nil {
		fmt.Println(i)
	}
}

输出

go run hello.go
211

这里我们的输入以“”id:0021“”的形式提供,其中您有前缀“”id””,数字是固定的五位数字,如果较短则用零填充; 这可以很快解析。 这就是我们在输出中得到 211 的原因。

使用这个 Sscanf() 方法,我们必须指定格式字符串来指导值的解析。 我们可以在格式字符串中使用标准格式代码。 Sscanf 的工作方式与 Sscan 相同,只是我们必须传递一个格式字符串作为第二个参数。

使用 strconv.ParseInt() 将字符串转换为 int

Golang ParseInt() 方法解释给定基数(0, 2 到 36)和位大小(0 到 64)的字符串 s,并返回对应的值 i。 请参阅以下语法。

func ParseInt(s string, base int, bitSize int) (i int64, err error)

如果 base == 0,则 base 由字符串前缀隐含:base 2 表示“0b”,base 8 表示“0”或“0o”,base 16 表示“0x”,否则为 base 10。

此外,仅对于 base == 0,Go 整数文字语法允许使用下划线字符。 如果基数小于 0、为 1 或大于 36,则返回错误。

bitSize 参数定义了结果必须适合的整数类型。

位大小 0、8、16、32 和 64 对应于 int、int8、int16、int32 和 int64。 如果 bitSize 低于 0 或高于 64,则会抛出错误。

ParseInt 返回的错误具有特定类型 *NumError 并且包括 err.Num = s。

如果s为空或包含无效数字,则err.Err = ErrSyntax,返回值为0; 如果s对应的值不能用给定大小的有符号整数表示,则err.Err = ErrRange,返回值是相应bitSize和符号的最大幅度整数。

请参阅以下代码示例。

// hello.go

package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {

	fmt.Println("\nConvert String into Integer Data type")
	str3 := "AppDividend"
	fmt.Println("Before String Value: ", str3)
	fmt.Println("Before converting Datatype:", reflect.TypeOf(str3))
	intStr, _ := strconv.ParseInt(str3, 10, 64)
	fmt.Println("After Integer Value: ", intStr)
	fmt.Println("After converting Datatype:", reflect.TypeOf(intStr))
}

输出

go run hello.go

Convert String into Integer Data type
Before String Value:  AppDividend
Before converting Datatype: string
After Integer Value:  0
After converting Datatype: int64

在这里,我们得到输出 0,因为字符串是基于字符而不是有符号整数构建的,但是它的数据类型从字符串更改为 int64。 我们使用 Golang ParseInt() 函数将字符串转换为整数。 我们使用反射来获取变量的数据类型,使用 reflect.TypeOf() 函数。

计算中的反射是程序主要通过类型研究其结构的能力; 它是一种元编程形式——类型系统上的反射形式。

func TypeOf(i interface{}) 类型

TypeOf() 返回表示 i 的动态类型的反射类型。 如果i是nil接口值,TypeOf返回nil。我们再举个例子。 请参阅下面的代码。

// hello.go

package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {

	fmt.Println("\nConvert String into Integer Data type")
	str3 := "11192146"
	fmt.Println("Before String Value: ", str3)
	fmt.Println("Before converting Datatype:", reflect.TypeOf(str3))
	intStr, _ := strconv.ParseInt(str3, 10, 64)
	fmt.Println("After Integer Value: ", intStr)
	fmt.Println("After converting Datatype:", reflect.TypeOf(intStr))
}

输出

go run hello.go

Convert String into Integer Data type
Before String Value:  11192146
Before converting Datatype: string
After Integer Value:  11192146
After converting Datatype: int64

结论

Golang 字符串是一个或多个字符(字母、数字或符号)的序列。 字符串是计算机程序中最常用的数据形式。 因此,您可能需要经常将字符串转换为数字或将数字转换为字符串,尤其是在您接收用户生成的数据时。

可以使用 Go 标准库中的 Golang 内置 strconv 包将字符串转换为数字。 strconv 包具有转换整数和浮点数类型的功能。 当接受来自用户的输入时,这是一个普遍的操作。

如果您的字符串没有小数位,您可能希望使用 strconv.Atoi 函数将其转换为整数。 但是对于复杂的场景,您总是可以使用 Sscanf() 函数。

而已。

如何将 Golang 字符串转换为 Int 的帖子首先出现在 AppDividend 上。

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢