처음부터 시작 - 유형 간 변환
12992 단어 gotutorialbeginnersprogramming
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
에서 사용할 수 있는 일부 함수와 문자열과 숫자 사이를 변환하는 방법을 배웠습니다.
Reference
이 문제에 관하여(처음부터 시작 - 유형 간 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/go-from-the-beginning-converting-between-types-56e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)