Go的struct方法在调用中引发了太多的参数

时间:2016-12-07 08:30:59

标签: function go struct

运行以下Go代码时出现以下编译器错误。

package sort

type InsertionSort struct {
    Unsorted []int;
}

func (is InsertionSort) Sort(mode string) []int {
    length := len(is.Unsorted);

    funcs := map[string] func(int, int) bool {"method":is.greaterThan};
    if mode == "desc" {
        funcs = map[string] func(int, int) bool {"method":is.lesserThan};
    }

    for i := 0; i < length; i++ {
        temp := is.Unsorted[i];
        j := i - 1;
        for ; j >=0 && funcs["method"](is.Unsorted[j], temp); j-- {
            is.Unsorted[j + 1] = is.Unsorted[j];
        }
        is.Unsorted[j + 1] = temp;
    }

    return is.Unsorted;
}

func (is InsertionSort) greaterThan (a int, b int) bool {
    return a > b;
}

func (is InsertionSort) lesserThan (a int, b int) bool {
    return a < b;
}

以及具有调用功能的主包

package main

import (
  "learning/Go/testgo/sort"
  "fmt"
)

func main() {
    unsort := []int {5, 7, 3, 2 ,4 ,8, 9, 12, 1};
    i := sort.InsertionSort {unsort};

    mode := "asc";
    sorted := i.Sort(mode);
    fmt.Println(sorted);
}

编译器返回的错误消息是

  

。\ sort.go:16:调用i.Sort

的参数太多了

注意: - sort 已经有另一个名为BubbleSort的结构,它具有相同的Sort方法,没有参数。我不知道它是否与当前结构冲突。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我认为您的目录顺序不正确,或者您可能还有其他一些奇怪的东西。

注意:我正在运行Ubuntu 16.04.1 64bit wihtin go version go1.6.2 linux/amd64

所以,这是我用来运行你的包的步骤。

1 -

检查您的GOPATH或导出一个新示例

$ export GOPATH=$HOME/Bureau/stack

<强> 2 -

检查您的$GOPATH是否指向某个目录:

$ $GOPATH
bash: /home/nexus/Bureau/stack/ : is a directory

第3 -

克隆$GOPATH/src文件夹中的repository

$ cd $GOPATH/src
$ git clone https://github.com/gokulnathk/Go

现在,文件夹的层次结构为:

$ tree
.
├── Go
│   ├── atm-dispening
│   ├── download
│   │   └── download.go
│   ├── downloadParallel
│   │   └── downloadParallel.go
│   ├── hello
│   │   └── hello.go
│   ├── portserver
│   │   └── simpleport.go
│   ├── safebrowsing
│   ├── testgo
│   │   ├── functionParam.go
│   │   ├── functions.go
│   │   ├── greeting
│   │   │   └── greeting.go
│   │   ├── routine.go
│   │   ├── sort
│   │   │   ├── bubblesort.go
│   │   │   └── insertionsort.go
│   │   ├── sort.go
│   │   ├── sorttest.go
│   │   ├── struct.go
│   │   └── test.go
│   └── webserver
│       ├── modcloth.txt
│       └── simple.go
└── main.go

11 directories, 17 files

在这里,我们需要知道运行代码的是:

  • 排序文件夹的路径为:Go/testgo/sort
  • main.go置于$GOPATH/src

main.go:

package main

import (
  "Go/testgo/sort"
  "fmt"
)

func main() {
    unsort := []int {5, 7, 3, 2 ,4 ,8, 9, 12, 1};
    i := sort.InsertionSort {unsort};

    mode := "asc";
    sorted:= i.Sort(mode);
    fmt.Println(sorted);
}

<强>最后

检查您是否在$GOPATH/src并运行:

$ go run main.go

输出:

[1 2 3 4 5 7 8 9 12]