Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- open ai
- AWS
- dockerfile
- docker
- 표준 라이브러리
- AI
- Linux
- Azure
- 명령어
- GIT
- 사용자 계정 관리
- go
- 리눅스
- maven
- jenkins
- 변수
- it기사
- aws사용자모임
- 애저
- git hub
- terraform
- python
- AI챗봇
- 프로세스 관리
- nexus
- 파이썬
- awskrug
- 클라우드
- 3티어 아키텍처
- 함수
Archives
- Today
- Total
We are Architect
fmt 패키지를 통한 표준 입출력(7) 본문
* fmt 패키지
- 입출력을 가능하게 하는 패키지
* 표준 입출력
- 사용자는 프로그램과 입력과 출력으로 대화를 한다.
- 입력은 키보드와 마우스, 출력은 모니터로 이루어진다.
* 표준 출력 함수
- 기본적으로 모니터(터미널)에 출력이 된다.
함수 | 설명 |
Print() | 함수 입력값들을 출력. |
Println() | 함수 입력값들을 출력하고 한 줄 내림. |
Printf() | 서식에 맞도록 입력값들을 출력. |
* 표준 출력 예제
- Print() : 일반 출력
- Println() : 일반 출력 + 한 칸 띄기 + 개행 (이때 서식 문자는 %v 로 적용됨.)
- Printf() : 서식 문자 있는 곳에 변수 값 반영
- 서식 : 출력대상의 형태를 지정해주는 문
- %d : 정수 출력(음수 + 양수)
- %f : 실수 출력 (음수 + 양수)
- \n : 한 줄 내림
- \t : 한 칸 탭
- %t : 어떤 타입인지 출력
- %v : 데이터 타입에 맞춰서 기본 형태로 출력(거의 이것만 사용하면 알아서 출력)
- %b : 2진수 형태로 출력
- %e : 지수형태로 출력
- %g : 출력의 길이가 길면 지수 형태, 작으면 실수 형태. (기준은 소수점 6자리 이상)
- %s : 문자열 출력
- %q : 특수 문자도 그대로 출력
- %5d : 우측으로 5칸 밀어서 출력
- %05d : 우측으로 5칸 밀어서 출력, 빈칸은 0으로 매꾼다.
- %-5d: 좌측으로 5칸 밀어서 출력
// 프로그램 시작점을 포함하고 있다.
package main
// fmt라는 패키지를 사용하겠다.
import "fmt"
func main() {
var a int = 10
var b int = 20
var f float64 = 32.1234
fmt.Print("a:", a, "b:", b, "f:", f)
fmt.Println("a:", a, "b:", b, "f:", f)
fmt.Printf("a: %d b: %d f: %f\n", a, b, f)
}
- 출력 결과
* 표준 입력 함수
- 기본 입력값을 받는다. (키보드)
함수 | 설명 |
Scan() | 표준 입력에서 값을 입력 받음. |
Scanf() | 표준 입력에서 값을 서식 형태로 값을 입력 받음. |
Scanln() | *표준 입력에서 한 줄 내리고 값을 입력 받음.(자주 쓰임) |
* 표준 입력 예제
- &a, &b에는 입력 받은 값들이 각자 들어간다.
package main
import "fmt"
func main() {
var a int // 기본 값은 0이 들어간다.
var b int
n, err := fmt.Scanln(&a, &b) // &(어퍼스트로피)는 해당 변수의 주소값을 나타냄.
if err != nil {
fmt.Println(err)
} else {
// Println > 메모리 공간 / (n, a, b) > 데이터 값
fmt.Println(n, a, b) // n은 입력 받은 갯수가 들어감.
}
}
- 출력 결과
* 입력 버퍼
- 키보드로부터 입력받아 온 값을 보관하는 곳을 입력 버퍼라고 한다.
- 우측부터 차례대로 값이 버퍼에 임시로 저장되고 읽고 출력된다.
- 입력 실패 했을 때 입력 버퍼가 지워진다.
\n | 4 | o | l | l | e | H |
* 입력 버퍼 예제
- 입력 관련 핵심만 보자.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
stdin := bufio.NewReader(os.Stdin) // Stdin : 표준 입력을 나타낸다.(os 패키지 안에 있음)
var a int
var b int
//Scanln은 두 가지 값을 받아 온다. n: 입력값, err: 에러 발생 값
n, err := fmt.Scanln(&a, &b)
if err != nil {
fmt.Println(err)
stdin.ReadString('\n') // ReadString() : 표준 입력에서 어떤 문자열(\n)이 나올 때 까지 읽어라.
} else {
fmt.Println(n, a, b)
}
n, err = fmt.Scanln(&a, &b)
if err != nil {
fmt.Println(err)
stdin.ReadString('\n') // ReadString() : 표준 입력에서 어떤 문자열(\n)이 나올 때 까지 읽어라.
} else {
fmt.Println(n, a, b)
}
}
- 핵심 구문
- Scanln 함수로 입력 값을 받아온다.
- if 조건문으로 오류값이 없는 게(nil) 아니라면(!=)
- 에러를 출력한다.
- 그리고 stdin.ReadString은 \n 값이 입력될 때까지 기다리는 함수인데 이미 위에서 Println으로 인해 \n 이 입력되었기에 작업을 수행하고 종료.
- else 조건문으로 그밖에 상황이라면
- n에 있는 입력된 변수의 개수 값
- a, b 변수에 저장된 값을 출력한다.
n, err := fmt.Scanln(&a, &b)
if err != nil {
fmt.Println(err)
stdin.ReadString('\n') // ReadString() : 표준 입력에서 어떤 문자열(\n)이 나올 때 까지 읽어라.
} else {
fmt.Println(n, a, b)
}
- 출력 결과