Golang 함수
Golang의 문법중 부족했던 부분들만 따로 요약하여 포스팅하려한다.
이번 포스팅의 주제는 함수다.
👉함수
가변 인수 함수는 … 키워드를 사용하여 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func add(nums ...int) {
// nums는 슬라이스로 취급된다.
sum := 0
for _, val := range nums {
sum += v
}
fmt.Println(sum)
}
func add2(nums []int) {
sum := 0
for _, val := range nums {
sum += v
}
fmt.Println(sum)
}
func main() {
// 두 함수의 호출방식은 살짝 다르다.
add(1,2,3,4)
add2([]int{1,2,3,4})
}
모든 타입을 다 받고싶다면 빈 인터페이스를 이용한다.
1
2
3
4
5
6
7
8
9
10
11
12
func Print(args ...interface{}) {
for _, arg := range args{
switch f:=arg.(type) {
case bool:
val := arg.(bool)
case float64:
val := arg.(float64)
case int:
val := arg.(int)
}
}
}
defer
함수 종료 전에 실행을 보장한다. OS의 자원을 반납해야할 때 사용한다.
파일.Close(), 네트워크 Close() 등.
함수타입 변수
함수 타입도 별칭 타입을 통해 정의할 수 있다.
1
2
type opFn func (int,int) int
함수 리터럴 (람다)
1
2
3
4
5
6
7
8
9
10
var a int = 3
B := a
// -> B := 3 (리터럴)
func add(a,b int) int {
return a+b
}
f := add
// -> f:= func (a,b int) int {return a+b}
// 함수도 리터럴로 생성할 수 있다.
의존성 주입
외부에서 로직을 주입하는 것을 의존성 주입이라고 한다.
의존성 주입을 통해 로직의 분리가 가능하다.
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
type Writer func(string)
func writeHello(writer Writer) {
// 무조건 writer함수에 "Hello world"를 쓰겠다.
// 네트워크든, 파일이든, 화면이든
writer("Hello World")
}
func main() {
f, err := os.Create("test.txt")
if err != nil {
fmt.Println("Failed to Create file")
return
}
defer f.Close()
// 의존성을 파일 입력으로 주입
writeHello(func(msg string){
fmt.Fprintln(f, msg)
})
// 의존성을 콘솔 출력으로 주입
writeHello(func(msg string) {
fmt.Println(f, msg)
})
}
Reference
This post is licensed under CC BY 4.0 by the author.