처음부터 시작 - 유형 간 변환

TLDR; this article covers how to convert between strings and numbers



다양한 데이터 유형이 있으며 이들 간에 변환해야 합니다. 예를 들어 프레젠테이션 및 기타 이유로 텍스트와 숫자 사이를 변환해야 하는 경우가 많습니다. 또한 프로세스에서 정보 손실 없이 숫자와 소수 사이를 변환해야 합니다.

Go에서 변환을 처리하기 위한 기본 패키지는 strconv 입니다.



사용 사례 - 명령줄 인수



문자열로 시작하여 숫자, 명령줄 인수로 만들어야 하는 일반적인 경우를 보여드리겠습니다. 프로그램에서 명령줄 인수를 사용하려면 os 패키지가 필요합니다.
os.Args는 명령줄 인수를 나타내는 배열을 가리킵니다. 특정 인수에 액세스하려면 다음과 같이 색인 연산자[]를 사용합니다.

arg := os.Args[1]


이 프로그램을 다음과 같이 시작하면 어떻게 될까요?

go run main.go 1


유형 찾기



위 코드에서 arg는 어떤 유형입니까? 알아낼 수 있는 몇 가지 방법이 있습니다.

  • IDE, 예를 들어 Visual Studio 코드와 Go 플러그인을 사용하는 경우 코드 위로 마우스를 가져가면 os.Args 가 문자열 배열이고 string[] 임을 알려줍니다.

  • 강제로 입력하면 해당 코드를 수정하여 정수로 강제할 수 있습니다. 이제 어떻게 할까요?

    var no int = os.Args[1]
    

    오류가 발생합니다.

    cannot use os.Args[1] (type string) as type int in assignment
    


  • 반사를 사용하십시오. 위의 oout을 찾는 또 다른 방법은 다음과 같이 reflect 패키지를 사용하는 것입니다.

    package main
    
    import (
      "reflect"
      "fmt"
      "os"
    )
    
    func main () {
      arg := os.Args[1]
      fmt.Println(reflect.TypeOf(arg))
    }
    

    이제 프로그램은 유형으로 "문자열"을 인쇄합니다.

  • strconv로 문제 해결



    좋습니다. 어떤 유형이 무엇인지 알았습니다. 문자열인 이 명령줄 인수를 사용하여 계산기 프로그램에 입력해야 한다면 어떻게 할까요?

    현재 컴파일되지 않는 아래 코드를 고려하십시오.

    package main
    
    import (
      "fmt"
      "os"
    )
    
    func add(first int second) int {
      return first + second
    }
    
    func main() {
      add(os.Args[1], os.Args[2]) // this would NOT compile
    }
    


    그 이유는 os.Args[1]os.Args[2]의 값이 string가 아닌 int이기 때문입니다. 이 문제를 해결하려면 변환 패키지strconv를 사용해야 합니다.

    strconv를 사용하여 문자열을 int로 변환



    문자열을 정수로 변환하려면 다음과 같이 strconv를 사용하고 Atoi()(ASCII를 정수로 변환) 함수를 호출해야 합니다.

    package main
    
    import (
     "fmt"
     "os"
     "strconv"
    )
    
    func add(first int, second int) int {
     return first + second
    }
    
    func main() {
     no1, _ := strconv.Atoi(os.Args[1])
     no2, _ := strconv.Atoi(os.Args[2])
     var sum = add(no1, no2) 
     fmt.Println(sum)
    }
    


    참고_ , 이것은 상관 없음 기호입니다. Atoi()를 호출하면 실패할 경우 숫자와 오류라는 두 가지 항목이 반환됩니다.

    변환 오류 처리



    오류를 처리하려면 변수err에 저장하고 검사해야 합니다. 그렇지 않으면 nil 오류가 있는 것입니다.

    아래에서 해당 동작을 인코딩하는 방법은 다음과 같습니다.

    package main
    
    import (
     "fmt"
     "os"
     "strconv"
    )
    
    func main() {
     no, err := strconv.Atoi(os.Args[1])
     fmt.Println(no)
     if err != nil {
      fmt.Println(err)
      fmt.Println("Couldn't convert: " + os.Args[1])
    
     } else {
      fmt.Println(no)
     }
    }
    


    위의 프로그램을 컴파일하고 다음과 같이 실행해 보십시오.

    main 1 # 1
    main hi # trconv.Atoi: parsing "hi": invalid syntax, Couldn't convert: hi
    


    문자열을 int로 구문 분석



    문자열을 int로 변환하는 또 다른 방법이 있습니다. 그것은 ParseInt() 방법을 사용하는 것입니다. 하지만 변환 이상의 기능을 수행하며 실제로 다음 두 가지 작업을 수행합니다.

  • 기준, 숫자를 해석할 기준에 따라 선택할 수 있습니다.

  • 크기, 비트 크기, 0에서 64까지.

  • 메서드의 구문은 다음과 같습니다.

    ParseInt(<s string>, <base int>, <bit int>) (int64, error)
    


    다음은 몇 가지 예입니다.

    package main
    
    import (
     "fmt"
     "reflect"
     "strconv"
    )
    
    func main() {
     var no int = 100
     fmt.Println(reflect.TypeOf(no))
    
     var intStr string = "100"
     fourBaseEightBitInt, _ := strconv.ParseInt(intStr, 4, 8)    // becomes no 16 and int64
     tenBaseSixteenBitInt, _ := strconv.ParseInt(intStr, 10, 16) // no 100,  and int64
     fmt.Println(reflect.TypeOf(fourBaseEightBitInt))
     fmt.Println(reflect.TypeOf(tenBaseSixteenBitInt))
    }
    


    정수를 문자열로



    그 반대일 수도 있습니다. 당신은 정수를 가지고 있고 그것이 문자열이기를 원합니다. 이 경우 정수에서 ascii로 Itoa() 함수를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    var noOfPlayers = 8
    str, _ := strconv.Itoa(noOfPlayers)
    
    


    추가 파싱


    strconv 라이브러리는 문자열로 시작하고 다른 형식으로 변환하려는 경우 원하는 것입니다. strconv library here에 대해 자세히 알아보기

    요약



    이 문서에서는 표준 라이브러리strconv에서 사용할 수 있는 일부 함수와 문자열과 숫자 사이를 변환하는 방법을 배웠습니다.

    좋은 웹페이지 즐겨찾기