일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- php
- rabbitmq
- phpredis
- nodejs
- AWS
- fastapi
- python
- mariadb
- For
- deep learning
- 기초 수학
- Go
- javascript
- linux
- React
- Babel
- NCP
- 블레이드 템플릿
- Node
- nginx
- webpack
- Machine Learning
- docker
- CentOS
- Redis
- Switch
- laravel
- Backbone.js
- SQL
- Redux
- Today
- Total
개발일기
Go - 함수의 정의 및 사용법 본문
1. 함수 정의
Go에서 함수를 선언할 때는, 다른 언어에서 사용하는 키워드 function이 아니라 func를 사용하여 함수를 정의한다.
func test() {
...
}
2. 함수의 값 반환
func test(a int, b int) int { // 매개변수 괄호 뒤에 반환할 값의 자료형을 써준다.
...
return a + b
}
함수에 반환값이 존재할 경우, 매개변수를 나열한 괄호 뒤에 반환할 값의 자료형을 써주면 된다. return에 들어가는 부분의 자료형이 위와 같이 정수형이 아닌 경우 오류가 발생한다.
2-1. 여러개의 값 반환하기
다른 언어들과는 다르게 다양한 값을 반환할 수 있다. 다수의 값을 반환하려면 반환할 자료형을 괄호로 묶은 후, 순서대로 나열한다. 그 후, return에 반환할 값 또는 변수들을 차례대로 입력한다.
package main
import "fmt"
func main() {
var add, sub int = test(3, 5) // add와 sub에 각각의 반환값이 순서대로 정의된다.
fmt.Println(add)
fmt.Println(sub)
}
func test(a int, b int) (int, int) { // 반환할 자료형을 순서대로 나열한다.
return a + b, a - b // 반환할 값 또는 변수들을 순서대로 나열한다.
}
2-2. 반환할 값 생략
package main
import "fmt"
func main() {
var add, _, multi int = test(3, 5) // _를 입력하면 해당 순서의 반환값을 생략된다.
fmt.Println(add)
fmt.Println(multi)
}
func test(a int, b int) (int, int, int) { // 반환할 자료형을 순서대로 나열한다.
return a + b, a - b, a * b // 반환할 값 또는 변수들을 순서대로 나열한다.
}
_를 사용하면 해당 순서에 반환될 반환값을 생략할 수 있다. 즉, 2번째 순서에 반환될 뺄셈의 값은 생략된다.
2-3. 매개변수에 가변인자 사용
함수의 매개변수에 총 몇개의 매개변수가 들어가게 될지 모르는 경우, ...를 붙여 가변인자로 지정한 후에 사용한다.
package main
import "fmt"
func main() {
a := test(3, 4, 5)
fmt.Println("합 : ", a)
}
func test(n ...int) int {
// 변수명 선언 후, 자료형 앞에 ...를 붙여 변수 n을 가변인자로 지정한다.
total := 0
for key, value := range n {
total += value
fmt.Println(key, value)
}
return total
}
/*
실행결과 :
0 3
1 4
2 5
합 : 12
Program exited.
*/
위의 함수는 for - range를 사용하여 들어온 매개변수를 합친 후, 반환하는 함수이다. 반복문을 사용할 때, key와 value값이 변수 n을 반복하면서 생성되는데, key라는 변수를 선언하고, 사용하지 않을 경우 에러가 발생한다. 이때, _를 사용하면 불필요한 부분을 생략하고, 함수를 진행시킬 수 있다.
package main
import "fmt"
func main() {
a := test(3, 4, 5)
fmt.Println("합 : ", a)
}
func test(n ...int) int {
// 변수명 선언 후, 자료형 앞에 ...를 붙여 변수 n을 가변인자로 지정한다.
total := 0
for _, value := range n {
// 불필요한 key 생략
total += value
}
return total
}
/*
실행결과 :
합 : 12
Program exited.
*/
2-4. 슬라이스를 매개변수에 대입
변수를 쭉 나열하는 것 뿐만 아니라 슬라이스를 매개변수에 대입하여 사용할 수 있다.
package main
import "fmt"
func main() {
arr := []int{1, 2, 3}
test(arr...) // 인자값에 슬라이스
}
func test(n ...int) {
fmt.Println(n)
}
/*
실행결과 :
[1 2 3]
Program exited.
*/
arr이라는 슬라이스 변수를 test라는 함수 선언 부분의 인자값으로 넣을때, 변수명 뒤에 ...을 붙여준다. ...를 붙여주면 test함수에서는 슬라이스 값을 순서대로 넘겨주어 위와 같은 실행결과가 나오게 된다.
참고 사이트 :
https://dev-yakuza.posstree.com/en/golang/function/
'프로그래밍 언어 > Go' 카테고리의 다른 글
Go - panic() / recover() 예외처리 (0) | 2022.08.09 |
---|---|
Go - defer 호출이란? (0) | 2022.08.07 |
Go - Map이란? (0) | 2022.03.29 |
Go - Slice의 len과 cap (0) | 2022.03.16 |
Go - 배열 사용법 (0) | 2022.03.15 |