Go에서 문자열을 정수 유형으로 변환하는 방법

Suraj Joshi 2023년1월30일
  1. strconv 패키지의Atoi()함수
  2. strconv 패키지의ParseInt()함수
  3. fmt.Sscanf 방법
  4. 방법 비교
Go에서 문자열을 정수 유형으로 변환하는 방법

변수를int로 정의하면 변수는int 만 될 수 있습니다. 변수의 문자열 데이터 타입을 변환하지 않으면 문자열을 할당 할 수 없습니다. Go에는strconv라는 내장 패키지가 있으며 Go 문자열을 int로 변환하기 위해Atoi(),Sscanf()ParseInt()의 세 가지 함수를 제공합니다.

strconv 패키지의Atoi()함수

strconv패키지는 기본 데이터 유형의 문자열 표현과의 변환을 구현합니다. 문자열을 정수로 변환하기 위해strconv 패키지의Atoi()함수를 사용합니다. AtoiASCII to integer의 약자입니다.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    age := "13"
    fmt.Printf("Datatype of age before conversion : %T\n", age)
    fmt.Println("After Conversion:")
    if sv, err := strconv.Atoi(age); err == nil {
        fmt.Printf("%T, %v\n", sv, sv)
    }
}   

출력:

Datatype of age before conversion : string
After Conversion:
int, 13

입력 문자열이 정수 형식이 아닌 경우 함수는 0을 반환합니다.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    age := "abc"
    fmt.Printf("Datatype of age before conversion : %T\n", age)
    fmt.Println("After Conversion:")
    sv, _ := strconv.Atoi(age)

    fmt.Printf("%T, %v\n", sv, sv)

}  

출력:

Datatype of age before conversion : string
After Conversion:
int, 0

strconv 패키지의ParseInt()함수

strconv.ParseInt(s, base, bitSize)메소드는 주어진base(0, 2-36)와 비트 크기 (0-64)에서 입력 문자열s를 해석하고 해당 정수를 리턴합니다. Atoi(s)ParseInt(s, 10, 0)와 같습니다.

package main

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

func main() {
    x := "123"
    fmt.Println("Value of x before conversion: ", x)
    fmt.Println("Datatype of x before conversion:", reflect.TypeOf(x))
    intStr, _ := strconv.ParseInt(x, 10, 64)
    fmt.Println("Value after conversion: ", intStr)
    fmt.Println("Datatype after conversion:", reflect.TypeOf(intStr))
}

출력:

Value of x before conversion:  123
Datatype of x before conversion: string
Value after conversion:  123
Datatype after conversion: int64

fmt.Sscanf 방법

fmt.Sscanf()는 숫자를 보유한 사용자 정의 문자열을 구문 분석하는 데 좋습니다. Sscanf()함수는 인수 문자열을 스캔하여 형식으로 정의 된대로 연속 공백으로 구분 된 값을 연속 인수에 저장하고 구문 분석 된 항목 수를 반환합니다.

package main

import (
    "fmt"
)

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

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

출력:

234

방법 비교

strconv.ParseInt()는 모든 메소드 중에서 가장 빠르며,strconv.Atoi()strconv.ParseInt()보다 약간 느리고fmt.Sscanf()는 가장 유연하지만 가장 유연한 메소드입니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

관련 문장 - Go String