본문 바로가기
IT 초보코딩의 세계/Go 언어

Go언어의 출력함수 IO, FMT, 유니코드, 디코딩 1장

by 조이럭키7 2023. 4. 10.
반응형

◆ fmt 패키지의 표준 출력함수

func Print(a ...interface{}) (n int, err error): 값을 그 자리에 출력(새 줄로 넘어가지 않음)

func Println(a ...interfaced) (n int, err error): 값을 출력한 뒤 새 줄로 넘어감(개행)

func Printf(format string, a ...interfaced) (n int, err error): 형식을 지정하여 값을 출력

package main

import "fmt"

func main() {
  var num1 int = 10
  var num2 float32 = 3.2
  var num3 complex64 = 2.5 + 8.1i
  var s string = "Hello, world!"
  var b bool = true
  var a []int = []int{1, 2, 3}
  var m map[string]int = map[string]int{"Hello": 1}
  var p *int = new(int)
  type Data struct{ a, b int }
  var data Data = Data{1, 2}
  var i interface{} = 1

  fmt.Printf("정수: %d\n", num1)     // 정수: 10
  fmt.Printf("실수: %f\n", num2)     // 실수: 3.2
  fmt.Printf("복소수: %f\n", num3)   // 복소수: (2.500000+8.100000i)
  fmt.Printf("문자열: %s\n", s)      // 문자열: Hello, world!
  fmt.Printf("불: %t\n", b)          // 불: true
  fmt.Printf("슬라이스: %v\n", a)    // 슬라이스: [1 2 3]
  fmt.Printf("맵: %v\n", m)          // 맵: map[Hello:1]
  fmt.Printf("포인터: %p\n", p)      // 포인터: 0xc0820062d0 (메모리 주소)
  fmt.Printf("구조체: %v\n", data)   // 구조체: {1 2}
  fmt.Printf("인터페이스: %v\n", i)  // 인터페이스: 1
  fmt.Printf("%d %f %s\n", num1, num2, s) // 10 3.200000 Hello, world!
}

func Scan(a ...interfaced) (n int, err error): 콘솔에서 공백, 새 줄로 구분하여 입력을 받음

func Scanln(a ...interfaced) (n int, err error): 콘솔에서 공백으로 구분하여 입력을 받음

func Scanf(format string, a ...interface{}) (n int, err error): 콘솔에서 형식을 지정하여 입력을 받음

▶ 입력받기


package main

import "fmt"

func main() {
  var num1, num2 int
  n, _ := fmt.Scanf("%d,%d", &num1, &num2) // 정수형으로 형식을 지정하여 입력을 받음
  fmt.Println("입력 개수:", n)
  fmt.Println(num1, num2)
}

◆ 유니코드 함수 - unicode 패키지

func ls(rangeTab *RangeTable, r rune) bool: 문자가 지정한 범위 테이블에 포함되는지 확인

func ln(r rune, ranges ...*RangeTable) bool:문자가 여러 범위 테이블 중에 포함되는지 확인

func lsGraphic(r rune) bool: 값이 화면에 표시될 수 있는지 확인

func lsLetter(r rune) bool: 값이 문자인지 확인

func lsDigit(r rune) bool: 값이 숫자인지 확인

func lsControl(r rune) bool: 값이 제어 문자인지 확인

func lsMark(r rune) bool: 값이 마크인지 확인

func lsPrint(r rune) bool: 값이 Go 언어에서 출력할 수 있는지 확인

func lsPunct(r rune) bool: 값이 문장 부호인지 확인

func lsSpace(r rune) bool: 값이 공백인지 확인

func lsSymbol(r rune) bool: 값이 심볼인지 확인

func lsllpper(r rune) bool: 값이 대문자인지 확인

func lsLower(r rune) bool: 값이 소문자인지 확인

unicode.Latin: 라틴 문자, 로마자, 영문자

unicode.Hangul: 한글

unicode.Han: 한자

unicode.Hiragana, unicode.Katakana: 일본어 히라가나, 카타카나

package main

import (
  "fmt"
  "unicode"
)

func main() {
  var r1 rune = '한'
  fmt.Println(unicode.Is(unicode.Hangul, r1)) // true: r1은 한글이므로 true
  fmt.Println(unicode.Is(unicode.Latin, r1))  // false: r1은 라틴 문자가 아님
  var r2 rune = '漢'
  fmt.Println(unicode.Is(unicode.Han, r2))    // true: r2는 한자이므로 true
  fmt.Println(unicode.Is(unicode.Hangul, r2)) // false: r2는 한글이 아님

  var r3 rune = 'a'
  fmt.Println(unicode.Is(unicode.Latin, r3))  // true: r3은 라틴 문자이므로 true
  fmt.Println(unicode.Is(unicode.Hangul, r3)) // false: r3은 한글이 아님

  fmt.Println(unicode.In(r1, unicode.Latin, unicode.Han, unicode.Hangul)) // true
}

◆ unicode / utf8 패키지

func RuneLen(r rune) int: 문자의 바이트 수를 구함

func RuneCountlnString(s string) (n int): 문자열의 실제 길이를 구함

func DecodeRune(p []byte) (r rune, size int): byte 슬라이스에서 첫 글자를 디코딩함

func DecodeLastRune(p []byte) (r rune, size int): byte 슬라이스에서 마지막 글자를 디코딩함

func DecodeRunelnString(s string) (r rune, size int): 문자열에서 첫 글자를 디코딩함

func DecodeLastRunelnString(s string) (r rune, size int): 문자열에서 마지막 글자를 디코딩함

func Valid(p [ ]byte) bool: byte 슬라이스가 UTF-80| 맞는지 확인

func ValidRune(r rune) bool: rune 변수에 저장된 값이 UTF-80| 맞는지 확인

func ValidString(s string) bool:문자열이 UTF-80| 맞는지 확인


◆ 디코딩

package main

import (
  "fmt"
  "unicode/utf8"
)

func main() {
  b := []byte("조이(joylucky)")

  r, size := utf8.DecodeRune(b)
  fmt.Printf("%c %d\n", r, size)
  r, size = utf8.DecodeRune(b[3:])
  fmt.Printf("%c %d\n", r, size)
  r, size = utf8.DecodeLastRune(b)
  fmt.Printf("%c %d\n", r, size)
  r, size = utf8.DecodeLastRune(b[:len(b)-3])                                         
  fmt.Printf("%c %d\n", r, size)
}
반응형

댓글