표준 입출력을 사용하면 목적지에 상관없이 간편하게 입출력 처리를 할 수 있다. Go 언어에서는 fmt 패키지를 사용해서 간편하게 표준 입출력을 처리할 수 있다.
표준 입출력 기능은 Go 언어 기본 패키지인 fmt에서 제공한다. 패키지를 사용하려면 import를 사용해서 사용할 패키지를 불러와야 한다.
import "fmt"
fmt 패키지는 3가지 표준 출력용 함수를 제공한다.
Print() | 힘수 입력값들을 출력한다. |
---|---|
Println() | 함수 입력값들을 출력하고 개행한다. |
Printf() | 서식(format)에 맞도록 입력값들을 출력한다. |
이 표준 출력 함수들을 사용하는 예제를 통해서 이들의 기능 차이를 알아보겠다.
package main
import "fmt"
func main() {
var a int = 10
var b int = 20
var f float64 = 32799438743.8297
fmt.Print("a:", a, "b:", b) //1
fmt.Println("a:", a, "b:", b, "f:", f) //2
fmt.Printf("a: %d b: %d, f: %f\n", a, b, f) //3
}
//출력결과
//a:10b:20a: 10 b: 20 f: 3.27994387438297e+10
//a: 10 b: 20, f: 32799438743.829700
표준 입력은 표준 입력 장치에서 데이터를 얻어온다. 일반적으로 표준 입력을 변경하지 않았다면 키보드가 표준 입력 장치이다. fmt 패키지는 표준 입력으로부터 입력받는 Scan(), Scanf(), Scanln() 함수를 제공한다.
Scan() | 표준 입력에서 값을 입력받는다. |
---|---|
Scanf() | 표준 입력에서 서식 형태로 값을 입력받는다. |
Scanln() | 표준 입력에서 한 줄을 읽어서 값을 입력받는다. |
Scan() 함수는 값을 채워놓을 변수들의 메모리 주소를 인수로 받는다. 한 번에 여러 값을 입력 받을 때는 변수 사이를 공란으로 두어 구분한다.
함수 반환값은 성공적으로 입력한 값 개수와 입력 실패 시 에러를 반환한다.
Scan()을 이용해 숫자값 2개를 입력받는 예제를 보자.
package main
import "fmt"
func main() {
var a int //1
var b int
n, err := fmt.Scan(&a, &b) //2
if err != nil { //3
fmt.Println(n, err)
} else { //4
fmt.Println(n, a, b)
}
}
Scanf() 함수는 서식에 맞춘 입력을 받는다.
func Scanf(format string, a ...interface{}) (n int, err error)
예를 들어 fmt.Scanf(”%d %d\n”, &a, &b) 라고 하면 숫자 하나와 공란 그리고 다른 숫자 하나와 한 줄 띄우기에 맞춰진 입력을 받는다. 서식에 맞춰서 입력하기가 힘들기 때문에 Scan() 이나 Scanln() 함수 사용을 추천한다고 한다.
Scanf()를 이용해서 숫자 2개를 입력받는 예제를 살펴본다.
package main
import "fmt"
func main() {
var a int
var b int
n, err := fmt.Scanf("%d %d\n", &a, &b) //1
if err != nil {
fmt.Println(n, err)
} else {
fmt.Println(n, a, b)
}
}
Scanln() 함수는 한 줄을 입력받아서 인수로 들어온 변수 메모리 주소에 값을 채워준다.
func Scanln(a ...interface{}) (n int, err error)
Scan() 과 다른 점은 마지막 입력값 이후 반드시 엔터키로 입력을 종료해야 한다는 점이다. 예를 들어 아래 예제처럼 값을 두 개 입력받을 때는 두 값을 입력한 뒤 반드시 엔터키로 입력해야 한다.
Scanln() 를 이용해서 숫자 2개를 입력받는 예제를 살펴보자.
package main
import "fmt"
func main() {
var a int
var b int
n, err := fmt.Scanln(&a, &b) //1
if err != nil {
fmt.Println(n, err)
} else {
fmt.Println(n, a, b)
}
}