18

Golang を使用して C# の関数のオーバーロードやオプションのパラメーターと同様の方法で作業することは可能ですか? それとも別の方法ですか?

4

4 に答える 4

12

Go のオプション パラメータに対する慣用的な答えは、ラッパー関数です。

func do(a, b, c int) {
    // ...
}

func doSimply(a, b) {
    do(a, b, 42)
}

関数のオーバーロードは、コードが読みにくくなるため、意図的に除外されました。

于 2012-10-26T09:38:24.160 に答える
10

関数のオーバーロードもオプションの引数も直接サポートされていません。それらを回避して、独自の引数構造体を構築できます。私はこのように意味します(テストされていない、動作しない可能性があります...)編集:今テストされています...

package main

    import "fmt"

    func main() {
        args:=NewMyArgs("a","b") // filename is by default "c"
        args.SetFileName("k")

        ret := Compresser(args)
        fmt.Println(ret)
    }

    func Compresser(args *MyArgs) string {
        return args.dstFilePath + args.srcFilePath + args.fileName 
    }

    // a struct with your arguments
    type MyArgs struct 
    {
        dstFilePath, srcFilePath, fileName string 
    }

   // a "constructor" func that gives default values to args 
    func NewMyArgs(dstFilePath string, srcFilePath string) *MyArgs {
        return &MyArgs{
              dstFilePath: dstFilePath, 
              srcFilePath:srcFilePath, 
              fileName :"c"}
    }

    func (a *MyArgs) SetFileName(value string){
      a.fileName=value;
    }
于 2012-10-23T11:00:34.613 に答える
3

ここには、可変引数を使用するヒントがいくつかあります。次に例を示します。

sm1 := Sum(1, 2, 3, 4) // = 1 + 2 + 3 + 4 = 10
sm2 := Sum(1, 2) // = 1 + 2 = 3
sm3 := Sum(7, 1, -2, 0, 18) // = 7 + 1 + -2 + 0 + 18 = 24
sm4 := Sum() // = 0

func Sum(numbers ...int) int {    
    n := 0    
    for _,number := range numbers {
        n += number
    }    
    return n
}

または...interface{}任意のタイプの場合:

Ul("apple", 7.2, "BANANA", 5, "cHeRy")

func Ul(things ...interface{}) {
  fmt.Println("<ul>")    
  for _,it := range things {
    fmt.Printf("    <li>%v</li>\n", it)
  }    
  fmt.Println("</ul>")
}
于 2015-02-11T02:14:31.353 に答える