猿问

在Golang中初始化一个新类(Convert Java to Golang)

我正在尝试将此 java 转换为 golang,现在我遇到了这个错误。我不知道为什么会出现这个错误。


这是java代码:


ArrayList<Cell> path; // path does not repeat first cell

String name;

static int count = 0;


public Path() {

  this.path = new ArrayList<>();

  this.name = "P" + (++this.count);

}


public Path(Path op) {

  this.path = new ArrayList<>();

  this.name = op.name;

  path.addAll((op.path));

}

这是我写的


type Path struct {

    name  string

    count int

    path  []Cell

}


func NewPath() (p *Path) {

    p = new(Path)

    p.path = []Cell{}

    p.count = 0

    p.name = "P" + strconv.Itoa(1+p.count)

    return

}


func NewPath(op Path) (p *Path) {

    p = new(Path)

    p.path = []Cell{}

    p.count = 0

    p.name = op.name

    p.path = append(p.path, op.path)

    return

}

go 系统说我在重新声明 NewPath 方面是错误的,错误是:


prog.go:21:6: NewPath redeclared in this block

我该如何调试它?


元芳怎么了
浏览 136回答 2
2回答

慕尼黑的夜晚无繁华

Golang 不支持重载方法名。您只需调用(其中一个)不同的方法。

aluckdog

这段代码中有几个问题,但第一个,也是你指出的那个,是函数NewPath在这里定义了两次,Go 会因此抛出错误。Go 不支持方法重载,因此解决此问题的最简单方法是将第二个函数重命名为其他名称。您将遇到的下一个错误是,它发生在第二个函数的cannot use op.path (type []Cell) as type Cell in append行中。发生这种情况是因为您试图将(type&nbsp;)放入(type&nbsp;),因此由于不是类型,因此无法附加到.&nbsp;请注意,这与连接不同,相反,它采用从第二个开始的所有参数并将它们放在第一个参数中。要解决此问题,您可以使用运算符解压。这将使 的每个参数成为一个单独的参数,并且每个元素都将被放置在 中。p.path = append(p.path, op.path)NewPathop.path[]Cellp.path[]Cellop.pathCellp.pathappendop.pathappend...op.pathappendp.path这是您的代码的重构版本:func NewPath() (p *Path) { // no changes&nbsp; &nbsp; p = new(Path)&nbsp; &nbsp; p.path = []Cell{}&nbsp; &nbsp; p.count = 0&nbsp; &nbsp; p.name = "P" + strconv.Itoa(1+p.count)&nbsp; &nbsp; return}func NewPathFromOriginal(op Path) (p *Path) { // renamed&nbsp; &nbsp; p = new(Path)&nbsp; &nbsp; p.path = []Cell{}&nbsp; &nbsp; p.count = 0&nbsp; &nbsp; p.name = op.name&nbsp; &nbsp; p.path = append(p.path, op.path...) // note the '...'&nbsp; &nbsp; return}
随时随地看视频慕课网APP

相关分类

Go
我要回答