2014-10-18 1 views
2

Go의 첫 번째 주이므로 무지를 용서하십시오.). 파이썬에서 평화롭게 왔습니다. 저는 현재 더하기와 빼기가있는 간단한 계산기를 만들고 있습니다.패키지를 통해 어떻게 동적으로 반복합니까?

addition.go 파일은 다음과 같습니다 :

package calculator 

type Add struct{} 

func (h Add) First(x int) int { 
    x += 5 
    return x 
} 

func (h Add) Second(x int) int { 
    x += 10 
    return x 
} 

subtraction.go 파일의 레이아웃은 유사합니다 addition.go와 미래의 기능 multiplication.go 추천하고 division.go과 매우 비슷합니다. 다음을 실행하려면 내가 가진 :

package main 

import (
    "fmt" 
    "github.com/mytester/calculator" 
) 

type Calc interface { 
    First(x int) int 
    Second(x int) int 
} 

func main() { 
    x := 10 
    var i Calc 
    a := &calculator.Add{} 
    i = a 
    i.First(x) 
    fmt.Println(x) 
    fmt.Println(i.First(x)) 
    fmt.Println(i.Second(x)) 

    fmt.Println("Next method...") 
    b := &calculator.Sub{} 
    i = b 
    fmt.Println(x) 
    fmt.Println(i.First(x)) 
    fmt.Println(i.Second(x)) 

    // iterate through the rest of my calculator methods 

} 

이 나는 ​​등, 곱셈과 같은 더 많은 기능을 추가 할 특히, 매우 자세한 보인다 & 다음 그들 모두를 반복 내 계산기의 모든 방법을 찾을 수있는 방법이 있나요 ? reflect 설명서를 살펴 보았지만이를 얻는 방법이없는 것 같습니다. 실행 순서는 중요하지 않습니다. 예를 들어 뺄셈은 더하기 전에 실행될 수 있습니다.

답변

5

이동은 원하는 기능을 제공하지 않습니다. 패키지 내용을 검토 할 수있는 메커니즘이 없습니다. 그 이유는 컴파일러가 어딘가에서 참조되는 실행 파일에 함수와 변수만을 유지하기 때문입니다. 명시 적으로 함수를 사용하지 않으면 실행 파일에 포함되지 않습니다. 불완전한 심볼 세트를 반복하는 것은 무의미하며 따라서 구현되지 않습니다.

조작하려는 유형의 객체를 포함하는 배열을 만들 수 있으며 문제가 해결되면 반복 할 수 있습니다.

관련 문제