함수 선언
이전 랩에서는 프로그램이 간단하든 복잡하든 상관없이 main 함수만 연산에 사용했습니다.
프로그램은 하나의 main 함수만 가질 수 있으며, 이는 프로그램의 진입점입니다. 프로그램을 실행하면 다른 함수들이 main 함수 내에서 직접 또는 간접적으로 호출되고 실행됩니다.
이제 함수의 구문을 살펴보겠습니다.
func functionName(parameters...)(returnValues...){
code block
}
여기서 함수 이름은 함수를 식별하는 데 사용됩니다. 함수 이름에는 다음 규칙이 적용됩니다.
- 문자, 숫자, 밑줄로 구성될 수 있습니다. 그러나 함수 이름의 첫 글자는 숫자가 될 수 없습니다. 예를 들어,
func 3ab(){}는 유효하지 않습니다.
- 첫 글자가 대문자인 경우 외부 패키지의 코드에서 참조할 수 있습니다. 첫 글자가 소문자인 경우 패키지 내에서만 사용할 수 있습니다. 이는 public 및 private 함수와 유사합니다.
매개변수 목록은 함수에 전달되는 매개변수의 수와 유형을 선언합니다.
-
매개변수 목록은 비어 있거나 여러 매개변수를 포함할 수 있습니다.
-
각 매개변수는 매개변수 이름과 매개변수 유형으로 구성됩니다. 예를 들어, 아래 매개변수 목록에서는 int 유형의 두 변수를 선언합니다.
func test(a, b int) (res int){}
반환 값 목록은 함수가 실행된 후 필요한 값을 반환하는 데 사용됩니다.
-
반환 값 목록은 매개변수 목록과 유사합니다. 매개변수의 수는 임의의 값일 수 있습니다.
-
일반적으로 반환 목록은 변수 이름과 변수 유형으로 구성되며, 변수 이름은 선택 사항입니다.
-
하나의 변수만 반환되고 변수 유형만 선언된 경우 괄호를 생략할 수 있습니다. 예를 들어:
func test(a int, b string) int{}
매개변수 유형이 동일한 경우 축약형을 사용할 수 있습니다. 아래 두 함수는 동일한 기능을 수행합니다.
func test(a, b int, c, d string)(res1, res2 int, res3 string){}
// Short writing mode
func test(a, b int, c, d string)(res1, res2 int, res3 string){}
func.go의 내용을 다음 코드로 바꿉니다.
package main
import "fmt"
func check(divisor int) bool {
if divisor == 0 {
fmt.Println("The divisor cannot be 0")
return false
}
return true
}
func main() {
a1, b1 := 12, 4
a2, b2 := 12, 0
// Use the check function before division
if check(b1) {
fmt.Println(a1 / b1)
}
if check(b2) {
fmt.Println(a2 / b2)
}
}
프로그램을 다시 실행합니다.
go run func.go
동일한 출력을 볼 수 있습니다.
3
The divisor cannot be 0
이번에는 검사 로직이 check 함수에 캡슐화되어 코드가 더 깔끔하고 재사용 가능해졌습니다.