반응형
Golang : 키보드 입력받기
console창에서 작업을 하는 프로그램을 만들다보면 가끔 키보드 입력을 받아야 할 때가 있습니다. 단순하다면 단순할 수 있는데, 파이썬 등에 익숙해져 있다보니 조금은 낮설긴 합니다.
예제에서 가져오는 패키지 목록은 다음과 같습니다.
- bufio : Buffered I/O로 인출력 인터페이스 제공
- os : 패키지 내에 standard input을 제공
- strings : 입력받은 문자열에서 필요없는 줄바꿈이라든지 앞뒤공백을 제거하기 위해 TrimSpace 이용
- strconv : 문자열을 정수, 실수 등으로 변환
- fmt : 출력을 한다면..
- log : 에러 출력하기 위해..
키보드로부터 문자열 입력받기
package main
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
func main() {
kbReader := bufio.NewReader(os.Stdin)
fmt.Print("이름을 입력하세요 : ")
strName, err := kbReader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
strName = strings.TrimSpace(strName)
fmt.Printf("당신의 이름 : %s\n", strName)
}
- bufio의 NewReader로 standard input을 받는 입력 인스턴스 kbReader를 생성합니다.
- ReadString('\n')에서는 엔터키를 받을 때까지 키보드의 입력을 받습니다.
- strings.TrimSpace()를 하는 이유는 문자열 앞뒤의 필요없는 줄바꿈/공백을 없애기 위함입니다.
키보드로부터 정수 입력받기
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
func main() {
kbReader := bufio.NewReader(os.Stdin)
fmt.Print("나이를 입력하세요 : ")
strAge, err := kbReader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
strAge = strings.TrimSpace(strAge)
iAge, err := strconv.Atoi(strAge)
if err != nil {
log.Fatal(err)
}
fmt.Printf("당신의 나이 : %d세\n", iAge)
}
- strings.TrimSpace()를 해줘야하는게, ReadString('\n')에서 \n까지 포함된 문자열이 strAge에 있기 때문에 불필요한 공백 등을 제거해야합니다. 아니면 정수로 변환할 때 에러가 납니다.
- strconv.Atoi()로 문자열을 정수로 변환합니다. ParseInt()를 쓰면 안되나 싶은 생각이 들기도 할텐데, Atoi()가 ParseInt()를 써서 우리가 말하는 일반적인 정수로 변환하는 함수입니다.
키보드로부터 실수 입력받기
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
"strings"
)
func main() {
kbReader := bufio.NewReader(os.Stdin)
fmt.Print("몸무게를 입력하세요 : ")
strWeight, err := kbReader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
strWeight = strings.TrimSpace(strWeight)
fWeight, err := strconv.ParseFloat(strWeight, 64)
if err != nil {
log.Fatal(err)
}
fmt.Printf("당신의 무게 : %.2fkg\n", fWeight)
}
- strconv.ParseFloat()로 문자열을 실수로 변환합니다. 문자열 말고, 두번째 인자로 64 정수가 들어갔는데, Float64로 하겠다는 의미입니다.
반응형
'컴 & 프로그래밍 > Golang' 카테고리의 다른 글
Golang: Naver 지도 API를 이용한 위도, 경도 구하기 (0) | 2022.06.27 |
---|---|
Golang: euc-kr → utf-8 인코딩 변환 (0) | 2020.09.28 |