기본 입출력 관련 패키지
콘솔에 출력하기 위해 사용한다
메모리에 값을 저장하기 위해 사용한다.
콘솔에서 입력을 받기 위해 사용한다.
Go 언어에서는 입력 함수를 호출할 때, C언어와 같이 인자(Argument)로 입력받을 변수의 주소값을 넣어줘야 합니다. (Go의 경우 배열의 경우에도 동일합니다)
이때 &(ampersand) - 앰퍼샌드를 사용하게 되는데, 왜 출력 함수와는 달리 입력 함수에는 주소값이 사용되어야만 할까요?
출력 함수의 경우 전달받은 값을 단순히 출력만 하기 때문에 주소값을 전달해줄 필요가 없습니다. scanf()함수는 함수 내부에서 전달받은 값을 수정합니다. 함수의 외부에서 다른 함수의 변수를 수정할 수 있는 방법이 메모리 주소를 통한 접근만 가능하기 때문입니다. call by value vs call by reference의 차이점을 통해 알 수 있었습니다.
var i int // 선언
var j int = 10 // 선언 및 초기화
var i = 10 // 타입 추론
var j = "name"
예시
package main
import (
"fmt"
"reflect"
)
func main() {
var i = 10
var j = "donggyu"
fmt.Println(i)
fmt.Println("Type : ", reflect.TypeOf(i))
fmt.Println(j)
fmt.Println("Type : ", reflect.TypeOf(j))
}
i := 10 // var i int = 10
선언과 동시에 값을 할당 해줘야한다.
const i string = "name"
func TestFunction(i int){
//...
}
func TestFunction(){
//...
}
func TestFunction()(x int){
//...
return x
}
func TestFunction(int i){
//...
}
2개 이상의 반환값을 동시에 반환할 수 있다.
func TestFunction()(i int, j int){
//...
return i,j
}
사용할 필요가 없는 변수는 “_” 기호로 사용하지 않음을 표시
func TestFunction()(i int, j int){
//...
return i,j
}
a, _ := TestFunction()
defer 키워드를 통해 함수를 나중에 실행할 수 있음
package main
import (
"fmt"
)
func stack() {
for i := 1; i <= 10; i++ {
defer fmt.Println(i)
}
}
func main() {
stack()
}
매개변수가 동적으로 변할 때 사용
package main
import "fmt"
func sum(n ...int) int {
total := 0
for _, value := range n {
total += value
}
return total
}
func main() {
result := sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
fmt.Println("result : ", result)
}