为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
元芳怎么了 2023-06-12 17:02:50
我正在尝试将此 java 转换为 golang,现在我遇到了这个错误。我不知道为什么会出现这个错误。这是java代码:ArrayList<Cell> path; // path does not repeat first cellString 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我该如何调试它?
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

Golang 不支持重载方法名。

您只需调用(其中一个)不同的方法。


查看完整回答
反对 回复 2023-06-12
?
aluckdog

TA贡献1847条经验 获得超7个赞

这段代码中有几个问题,但第一个,也是你指出的那个,是函数NewPath在这里定义了两次,Go 会因此抛出错误。Go 不支持方法重载,因此解决此问题的最简单方法是将第二个函数重命名为其他名称。

您将遇到的下一个错误是,它发生在第二个函数的cannot use op.path (type []Cell) as type Cell in append行中。发生这种情况是因为您试图将(type )放入(type ),因此由于不是类型,因此无法附加到. 请注意,这与连接不同,相反,它采用从第二个开始的所有参数并将它们放在第一个参数中。要解决此问题,您可以使用运算符解压。这将使 的每个参数成为一个单独的参数,并且每个元素都将被放置在 中。p.path = append(p.path, op.path)NewPathop.path[]Cellp.path[]Cellop.pathCellp.pathappendop.pathappend...op.pathappendp.path

这是您的代码的重构版本:

func NewPath() (p *Path) { // no changes

    p = new(Path)

    p.path = []Cell{}

    p.count = 0

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

    return

}


func NewPathFromOriginal(op Path) (p *Path) { // renamed

    p = new(Path)

    p.path = []Cell{}

    p.count = 0

    p.name = op.name

    p.path = append(p.path, op.path...) // note the '...'

    return

}


查看完整回答
反对 回复 2023-06-12
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信