[GO] #3-3. 패키지 탐방 (strconv)

Study·2021년 5월 21일
0

고랭

목록 보기
10/18
post-thumbnail

strconv

strconv 패키지는 기본 데이터 타입을 문자열로 변환해준다.

숫자 변환은 가장 일반적으로 Atoi(string to int)itoa(int to string) 이다.

i, err := strconv.Atoi("-42")
s := strconv.Itoa(-42)

각 기본 데이터 타입은 다음과 같이 변환할 수 있다.

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)

타입 변환은 가장 넓은 유형(float64, int64) 을 반환하지만 size 인수가 더 좁은 폭을 지정하면 데이터 손실 없이 변환될 수 있다.

s := ""2147483647"	// int32의 가장 큰 값
i64, err := strconv.ParseInt(s, 10, 32)
...
int := int32(i64)

상수

const IntSize = intSize

IntSize 는 int 또는 uint 값의 바트 크기이다.

변수

var ErrRange = errors.New("value out of range")

ErrRange 는 값이 대상 유형의 범위를 벗어 났음을 나타낸다.

var ErrSyntax = error.New("invalid syntax")

ErrSyntax 는 값에 대상 유형에 올바른 구문이 없음을 나타낸다.

함수

func AppendBool(dst []byte, b bool) []byte

b 값에 따라 true 또는 falsedst 에 추가하고 확장 버퍼를 반환한다.

func AppendFloat(dst []byte, f float, fmt byte, 
	prec, bitSize int) []byte

FormatFloat 에 의해 생성된 부동 소수점 숫자 f 의 문자열 형식을 dst 에 추가하고 확장 버퍼를 리턴한다.

func AppendInt(dst []byte, i int64, base int) []byte

FormatInt 에 의해 생성된 정수 i 의 문자열 형식을 dst 에 추가하고 확정 버퍼를 리턴한다.

func AppendQuote(dst []byte, s string) []byte

Quote 로 생성된 s 를 나타내는 큰 따옴표로 묶인 GO 문자열 리터럴을 dst 에 추가하고 확장 버퍼를 반환한다.

func AppendQuoteRune(dst []byte, r run) []byte

QuoteRune 에 의해 생성된 룬을 나타내는 작은 따옴표로 묶인 GO 문자열을 dst 에 추가하고 확장 버퍼를 리턴한다.

func AppendQuoteRuneToASCII(dst []byte, r rune) []byte

QuoteRuneToASCII 에 의해 생성된 룬을 나타내는 작은 따옴표로 묶인 GO 문자 리터럴을 dst 에 추가하고 확장 버퍼를 리턴한다.

func AppendQuoteRuneToGraphic(dst []byte, r rune) []byte

QuoteRuneToGraphic 에 의해 생성된 룬을 나타내는 작은 따옴표로 묶인 GO 문자 리터럴을 dst 에 추가하고 확장 버퍼를 리턴한다.

func AppendQuoteToASCII(dst []byte, s string) []byte

QuoteToASCII 에 의해 생성된 s 를 나타내는 큰 따옴표로 묶인 GO 문자열 리터럴을 dst 에 추가하고 확장 버퍼를 리턴한다.

func AppendQuoteToGraphic(dst []byte, s string) []byte

QuoteToGraphic 에 의해 생성된 s 를 나타내는 큰 따옴표로 묶인 GO 문자열 리터럴을 dst 에 추가하고 확장 버퍼를 리턴한다.

func AppendUint(dst []byte, i uint64, base int) []byte

FormatUnit 에 의해 생성된 부호없는 정수 i 의 문자열 형식을 dst 에 추가하고 확장 버퍼를 반환한다.

func Atoi(s string) (int, error)

AtoiParseInt(s, 10, 0)와 동일하며 int 유형으로 변환된다.

func CanBackquote(s string) bool

CanBackquote 는 문자열 s 가 탭 이외의 제어 문자없이 단일 행 백틱 문자열로 변경되지 않고 표현될 수 있는지 여부를 반환한다.

func FormatBool(b bool) string

b 값에 따라 "true" 또는 "false" 를 반환한다.

func FormatComplex(c complex128, fmt byte, prec, bitSize int) string

복소수 c 를 형식 (a + bi) 의 문자열로 변환한다.
여기서 ab 는 fmt 및 정밀도 prec 형식에 따라 지정된 실수 및 허수 부분이다.

func FormatFloat(f float64, fmt byte, prec, bitSize int) string

fmt 및 정밀도 prec 형식에 따라 부동 소수점 숫자 f 를 문자열로 변환한다.

원본이 bitSize 비트의 부동 소수점 값에서 얻는 것으로 가정하여 반올림한다.

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

2 <= base <= 36 에 대해 주어진 기수로 i 의 문자열 표현을 반환한다.

결과는 기수에 따라 10 이상의 값은 문자 a ~ z 를 사용한다.

func IsGraphic(r rune) bool

룬이 Unicode 로 그래픽으로 정의되어 있는지 여부를 보고한다.
이런 문자에는 L, M 및 Z 범주의 문자, 마크, 숫자, 문장 부호, 공백, 기호 등이 포함된다.

func IsPrint(r rune) bool

룬이 unicode.IsPrint(문자, 숫자, 기호 및 아스키 공백) 과 동일한 정의로 GO 에서 출력 가능한 것으로 정의된 것인지 여부를 반환한다.

func Itoa(i int) string

FormatInt(int64 (i), 10) 와 동일하다.

func ParseBool(str string) (bool, error)

문자열이 나타내는 부울 값을 반환한다.

1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False 모두 허용한다.
다른 값은 오류를 반환한다.

func ParseComplex(s string, bitSize int) (complex128, error)

문자열 sbitSize(cimplex64 -> 64, complex128 -> 128) 로 지정된 정밀도로 복소수로 변환한다.

bitSize 가 64인 경우 여전히 complex128 유형이지만 값을 변경하지 않고 complex64로 변환할 수 있다.

func ParseFloat(s string, bitSize int) (float64, error)

bitSize 에 지정된 정밀도(float32 -> 32, float64 -> 64)로 문자열 s 를 부동 소수점 숫자로 변환한다.

bitSize 가 32 인 경우 여전히 float64 유형이지만 값을 변경하지 않고 float32 로 변환할 수 있다.

func ParseInt(s string, base int, bitSize int) (int64, error)
func PraseUnit(s string, base int, bitSize int) (unit64, error)

ParseInt 는 주어진 기본(0, 2 ~ 36) 및 비트 크기 (0 ~ 64)의 문자열 s 를 해석하여 해당 i 를 반환한다.

ParseUnit 도 동일하며 부호없는 숫자로 반환한다.

func Quote(s string) string
func QuoteRune(r rune) string
func QuoteRuneToASCII(r rune) string
func QuoteToGraphic(s string) string

Quotes 를 나타내는 큰 따옴표로 묶인 GO 문자열 리터럴을 반환한다.

반환된 문자열은 제어 문자 및 IsPrint 에 의해 정의된 출력할 수 없는 문자에 GO 이스케이프 시퀀스를 사용한다. (\t, \n, \xFF, \u0100)

QuoteRune 도 동일하며 룬을 나타내는 작은 따옴표 GO 문자 리터럴을 반환한다.

QuoteRuneToASCII 도 룬을 나태는 작은 따옴표 GO 문자 리터럴을 반환하며

IsPrint 에 정의된 대로 ASCII 가 아닌 문자나 인쇄 할 수 없는 문자에 이스케이스를 사용한다.

QuoteToGraphics 를 나타내는 큰 따옴표로 묶인 GO 문자열 리터럴을 반환하며 IsGraphic 에 정의한 유니코드 그래픽 문자를 변경하지 않고 그대로두고 그래픽이 아닌 문자에 이스케이스를 사용한다.

func Unquote(s string) (string, error)

s 를 작은 따옴표, 큰 따옴표 또는 백틱이 있는 GO 문자열 리터럴로 해석하여 따옴표로 묶은 문자열 값을 반환한다.

func UnquoteChar(s string, quote byte) (rune, bool, string, error)

이스케이프된 문자열 또는 s 로 표시되는 문자 리터럴의 첫 번째 문자 도는 바이트를 디코딩한다.

다음의 네 가지 값을 반환한다.

  1. 값, 디코딩된 유니코드 포인트 또는 바이트 값
  2. 멀티바이트, 디코딩된 문자에 멀티 바이트 UTF-8 표현이 필요한지 여부
  3. 문자 뒤의 나머지 문자열
  4. 문자가 구문적으로 유효한 경우 nil 오류를 반환

구조체

NumError 구조체는 실패한 변환을 기록한다.

type NumError struct {
    Func string // 실패한 함수(ParseBool, ParseInt 등)
    Num  string // 입력
    Err  error  // 변환에 실패한 이유 (ErrRange, ErrSyntax 등)
}

다음과 같이 이용할 수 있다.

func main() {
	str := "Not a number"
	if _, err := strconv.ParseFloat(str, 64); err != nil {
		e := err.(*strconv.NumError)
		fmt.Println("Func:", e.Func)
		fmt.Println("Num:", e.Num)
		fmt.Println("Err:", e.Err)
		fmt.Println(err)
	}

}

func (e *NumError) Error() string
func (e *NumError) UnWrap() error

에러를 래핑하거나 언랩하는 함수.

profile
Study

0개의 댓글