go 언어는 자바처럼 오버로드가 없지만 함수를 매개변수로 전달할 수 있어 반복적인 데이터 타입에 대한 연산을 내부적으로 작성할 수 있다.
데이터 타입에 리스트가 없지만 리스트의 특징인 다양한 데이터를 슬라이스로 받아서 각 리스트의 요소에 맞춰 실질적인 함수 처리가 가능하다.
go 언어의 특징이 함수도 하나의 데이터타입으로 정의가 가능하고 함수를 변수나 매개변수에 전달할 수 있으므로 다양한 요건을 처리할 수 있다.
package main
import (
"fmt"
)
//리스트 타입을 정의
type List []interface{}
//리스트에 대한 메소드 정의
func (l List) Accumulate(f Operation) interface{} {
res := 0
for _, v := range l {
if i, ok := v.(int); ok {
res = f(res, i)
continue
}
if lst, ok := v.(List); ok {
res = f(res, lst.Accumulate(f).(int))
}
}
return res
}
//함수 타입을 정의
//함수를 매개변수 등으로 전달하기 위한 타입 정의
type Operation func(int, int) int
// 매개변수로 전달되는 함수 정의
func add11(x, y int) int {return x + y}
func main() {
l := List{1, 2, 3, 4}
fmt.Println(" interface type assertion type list ", l)
fmt.Println(" list sum ", l.Accumulate(add11).(int))
}
댓글
댓글 쓰기