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

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

Dec 30, 2019 pm 05:49 PM
언어로 가다

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

GO에서 플로팅 포인트 번호 작업에 어떤 라이브러리가 사용됩니까? GO에서 플로팅 포인트 번호 작업에 어떤 라이브러리가 사용됩니까? Apr 02, 2025 pm 02:06 PM

Go Language의 부동 소수점 번호 작동에 사용되는 라이브러리는 정확도를 보장하는 방법을 소개합니다.

GO의 어떤 라이브러리가 대기업에서 개발하거나 잘 알려진 오픈 소스 프로젝트에서 제공합니까? GO의 어떤 라이브러리가 대기업에서 개발하거나 잘 알려진 오픈 소스 프로젝트에서 제공합니까? Apr 02, 2025 pm 04:12 PM

GO의 어떤 라이브러리가 대기업이나 잘 알려진 오픈 소스 프로젝트에서 개발 했습니까? GO에 프로그래밍 할 때 개발자는 종종 몇 가지 일반적인 요구를 만납니다.

Go 's Crawler Colly의 큐 스레드의 문제는 무엇입니까? Go 's Crawler Colly의 큐 스레드의 문제는 무엇입니까? Apr 02, 2025 pm 02:09 PM

Go Crawler Colly의 대기열 스레딩 문제는 Colly Crawler 라이브러리를 GO 언어로 사용하는 문제를 탐구합니다. � ...

이동 중에 왜 println 및 string () 함수로 문자열이 다른 효과를 갖는 이유는 무엇입니까? 이동 중에 왜 println 및 string () 함수로 문자열이 다른 효과를 갖는 이유는 무엇입니까? Apr 02, 2025 pm 02:03 PM

Go Language의 문자열 인쇄의 차이 : println 및 String () 함수 사용 효과의 차이가 진행 중입니다 ...

Go 및 Viper 라이브러리를 사용할 때 포인터를 전달 해야하는 이유는 무엇입니까? Go 및 Viper 라이브러리를 사용할 때 포인터를 전달 해야하는 이유는 무엇입니까? Apr 02, 2025 pm 04:00 PM

Go Pointer Syntax 및 Viper Library 사용의 문제 해결 GO 언어로 프로그래밍 할 때 특히 포인터의 구문 및 사용법을 이해하는 것이 중요합니다.

Go Language to Traverse 슬라이스 및 매장 맵에 범위를 사용할 때 모든 값이 마지막 요소가되는 이유는 무엇입니까? Go Language to Traverse 슬라이스 및 매장 맵에 범위를 사용할 때 모든 값이 마지막 요소가되는 이유는 무엇입니까? Apr 02, 2025 pm 04:09 PM

GO의지도 반복이 왜 모든 값이 마지막 요소가되게합니까? Go Language에서 인터뷰 질문에 직면했을 때, 당신은 종종지도를 만납니다 ...

GO 언어에서 'var'와 'type` 키워드 정의 구조의 차이점은 무엇입니까? GO 언어에서 'var'와 'type` 키워드 정의 구조의 차이점은 무엇입니까? Apr 02, 2025 pm 12:57 PM

GO 언어에서 구조를 정의하는 두 가지 방법 : VAR과 유형 키워드의 차이. 구조를 정의 할 때 Go Language는 종종 두 가지 다른 글쓰기 방법을 본다 : 첫째 ...

Go Language Slice : 단일 요소 슬라이스 인덱스 1 인터셉트시 오류를보고하지 않는 이유는 무엇입니까? Go Language Slice : 단일 요소 슬라이스 인덱스 1 인터셉트시 오류를보고하지 않는 이유는 무엇입니까? Apr 02, 2025 pm 02:24 PM

Go Language Slice Index : 오류없이 단일 요소 슬라이스가 인덱스 1에서 차단하는 이유는 무엇입니까? Go Language에서 슬라이스는 바닥을 참조 할 수있는 유연한 데이터 구조입니다 ...

See all articles