>  기사  >  백엔드 개발  >  Go 언어 데이터 유형 변환 튜토리얼

Go 언어 데이터 유형 변환 튜토리얼

尚
앞으로
2019-12-30 17:49:172371검색

Go 언어 데이터 유형 변환 튜토리얼

Go는 데이터의 암시적 유형 변환을 수행하지 않으며 수동으로 변환 작업만 수행할 수 있습니다. go 언어에서 데이터 유형 변환 방법을 살펴보겠습니다. .

간단한 변환 작업

데이터 유형을 변환하는 방법은 매우 간단합니다.

valueOfTypeB = typeB(valueOfTypeA)

예:

// 浮点数
a := 5.0

// 转换为int类型
b := int(a)

Go에서는 동일한 기본 구조를 가진 두 유형 간의 변환을 허용합니다. 예:

// IT类型的底层是int类型
type IT int

// a的类型为IT,底层是int
var a IT = 5

// 将a(IT)转换为int,b现在是int类型
b := int(5)

// 将b(int)转换为IT,c现在是IT类型
c := IT(b)

그러나 참고:

1. 모든 데이터 유형을 변환할 수 있는 것은 아닙니다. 예를 들어, 알파벳 형식의 문자열 유형 "abcd"는 int로 변환될 수 있습니다. . 확실히 실패합니다

2. 낮은 정밀도를 높은 정밀도로 변환하는 것은 안전합니다. 그러나 높은 정밀도 값을 낮은 정밀도로 변환하면 정밀도가 손실됩니다. 예를 들어 int32를 변환합니다. int16 및 float32를 int

3으로 변환합니다. 이 간단한 변환 방법은 int(float)와 문자열을 서로 변환할 수 없습니다. strconv 패키지

strconv

strconv 패키지에서 제공하는 기능은 문자열과 단순 데이터 유형 간의 유형 변환 기능을 제공합니다. 단순 유형을 문자로 변환할 수 있습니다. 문자열은 다른 단순 유형으로 변환될 수도 있습니다.

이 패키지는 대략 여러 범주로 구분되는 많은 기능을 제공합니다:

1 문자열을 정수로 변환: Atoi()

2. int를 문자열로: Itoa()

🎜🎜#3. ParseTP 클래스 함수는 문자열을 TP 유형으로 변환합니다: ParseBool(), ParseFloat(), ParseInt(), ParseUint(). 문자열을 다른 유형으로 변환하는 것은 실패할 수 있으므로 이러한 함수에는 변환 여부를 나타내는 두 번째 반환 값이 있습니다. 성공적으로 변경되었습니다

4. FormatTP 클래스 함수는 다른 유형을 문자열로 변환합니다: FormatBool(), FormatFloat(), FormatInt(), FormatUint()

5. AppendTP 클래스 함수는 TP를 문자열로 변환한 다음 이를 슬라이스에 추가하는 데 사용됩니다: AppendBool(), AppendFloat(), AppendInt(), AppendUint()

및 기본적으로 사용되지 않는 기타 기능은 공식 매뉴얼을 참조하세요. go doc strconv 또는 https://golang.org/pkg/strconv/.

일부 유형을 변환할 수 없는 경우 오류가 보고됩니다. 반환되는 오류는 strconv 패키지에 자체 정의된 오류 유형입니다. 두 종류가 있습니다 오류:

var ErrRange = errors.New("value out of 

range")
var ErrSyntax = errors.New("invalid syntax")

예를 들어 Atoi("a")를 사용하여 "a"를 int 유형으로 변환하는 것은 당연히 실패합니다. 만약에 print는 오류 정보를 출력하고 다음을 표시합니다:

strconv.Atoi: parsing "a": invalid 

syntax

string과 int 사이의 변환

가장 일반적인 것은 string과 int 사이의 변환입니다:

1.int가 문자열로 변환됨: Itoa()

// Itoa(): int -> string
println("a" + strconv.Itoa(32))  // a32

2.string이 int로 변환됨: Atoi()

func Atoi(s string) (int, error)

int로 변환되지 않으므로 이 함수에는 두 개의 반환 값이 있습니다. 첫 번째 반환 값은 int로 변환됩니다. 값, 두 번째 반환 값은 변환 성공 여부를 결정합니다.

// Atoi(): string -> int
i,_ := strconv.Atoi("3")
println(3 + i)   // 6
// Atoi()转换失败
i,err := strconv.Atoi("a")
if err != nil {
    println("converted failed")
}

Parse 클래스 함수

Parse 클래스 함수는 문자열을 특정 유형의 값으로 변환하는 데 사용됩니다: ParseBool(), ParseFloat () ,ParseInt(), ParseUint().

문자열을 다른 유형으로 변환하는 데 실패할 수 있으므로 이 함수에는 두 개의 반환 값이 있으므로 첫 번째 반환 값이 저장됩니다. 변환된 값, 두 번째 반환 값에 따라 변환 성공 여부가 결정됩니다.

b, err := strconv.ParseBool("true")
f, err := strconv.ParseFloat("3.1415", 64)
i, err := strconv.ParseInt("-42", 10, 64)
u, err := strconv.ParseUint("42", 10, 64)

ParseFloat()는 float64 유형의 부동 소수점 숫자만 받을 수 있습니다.

ParseInt() 및 ParseUint()에는 3개의 매개변수가 있습니다.

func ParseInt(s string, base int, bitSize int) 

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

bitSize 매개변수는 변환할 int/uint 비트를 나타냅니다. 유효한 값은 0, 8입니다. 16, 32,64. 비트크기=0인 경우 int 또는 uint 유형으로의 변환을 나타내는 시간입니다. 예를 들어, bitSize=8은 변환된 값의 유형이 int8 또는 uint8임을 의미합니다.

기본 매개변수는 주어진 문자열을 구문 분석하는 데 사용할 기본 방법을 나타냅니다. 유효한 값은 0과 2-36입니다. 베이스=0인 경우 , 문자열의 접두사가 구문 분석할 기준을 결정하는 데 사용됨을 나타냅니다. 0x로 시작하는 것은 16진수로 구문 분석되고 0으로 시작하는 것은 구문 분석됩니다. 8진수 형식으로 구문 분석되고, 나머지는 10진수 형식으로 구문 분석됩니다.

10진수 모드에서 "-42"를 구문 분석하고 int64 유형으로 저장합니다.

i, _ := strconv.ParseInt("-42", 10, 

64)

5진수 모드에서 "23"을 구문 분석하고 int64 유형으로 저장합니다. #🎜 🎜#
i, _ := strconv.ParseInt("23", 5, 64)
println(i)    // 13

5진수에서 23은 2를 곱하고 3을 더한다는 의미이므로 해당 십진수는 5*2+3=13입니다.

23을 16진수로 구문 분석하고 int64 형식으로 저장합니다.

i, _ := strconv.ParseInt("23", 16, 64)
println(i)    // 35

16진수에서 23은 2를 곱하고 3을 더하는 것을 의미하므로 해당 십진수는 16*입니다. 2+3=35.

23을 16진수로 구문 분석하고 int64 형식으로 저장합니다.

i, _ := strconv.ParseInt("23", 15, 64)
println(i)    // 33

16진수에서 23은 2를 곱하고 3을 더하는 것을 의미하므로 해당하는 10진수는 15*입니다. 2+3=33.

Format 클래스 함수

주어진 유형을 문자열 유형으로 포맷합니다: FormatBool(), FormatFloat(), FormatInt(), FormatUint().

s := strconv.FormatBool(true)
s := strconv.FormatFloat(3.1415, 'E', -1, 64)
s := strconv.FormatInt(-42, 16)
s := strconv.FormatUint(42, 16)

FormatInt() 및 FormatUint()에는 두 개의 매개변수가 있습니다.

func FormatInt(i int64, base int) string
func FormatUint(i uint64, base int) string

두 번째 매개변수 기준은 첫 번째 매개변수를 변환할 기준을 지정하며 유효한 값은 2<=입니다. 베이스<=36. 지정할 때 의 기본 숫자가 10보다 큰 경우 10을 초과하는 값은 문자 a-z로 표시됩니다. 예를 들어 16진수에서는 10~15의 숫자가 각각 사용됩니다. a-f는 16진수 시스템에서 값 10-16이 각각 a-g로 표시됨을 의미합니다.

예: FormatInt(-42, 16)은 -42를 16진수로 변환하는 것을 의미하며 변환 결과는 -2a입니다.

FormatFloat()에는 많은 매개변수가 있습니다:

func FormatFloat(f float64, fmt byte, prec, 

bitSize int) string

bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。

fmt表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制) 、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、 'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很 大时用'E'格式,否则'f'格式)。

prec控制精度(排除指数部分):对'f'、'e'、'E',它表示小 数点后的数字个数;对'g'、'G',它控制总的数字个数。如果prec 为-1,则 代表使用最少数量的、但又必需的数字来表示f。

Append类函数

AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、 AppendFloat()、AppendInt()、AppendUint()。

Append类的函数和Format类的函数工作方式类似,只不过是将转换后的结果追加到一个 slice中。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 声明一个slice
    b10 := []byte("int (base 10):")
    
    // 将转换为10进制的string,追加到slice中
    b10 = strconv.AppendInt(b10, -42, 10)
    fmt.Println(string(b10))

    b16 := []byte("int (base 16):")
    b16 = strconv.AppendInt(b16, -42, 16)
    fmt.Println(string(b16))
}

输出结果:

int (base 10):-42
int (base 16):-2a

更多golang知识请关注golang教 程栏目。

위 내용은 Go 언어 데이터 유형 변환 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제