在 golang 中使用类型断言进行转换

问题描述

我了解到,正在使用类型断言在 go 中实现强制转换。 我正在尝试将一个对象作为一个实现接口的结构的实例。 我的代码

package main

import "fmt"

type Base interface {
    Merge(o Base)
}

type Impl struct {
    Names []string
}

func (i Impl) Merge (o Base) {
  other,_ := o.(Impl)
  i.Names = append(i.Names,other.Names...)
}

func main() {
    impl1 := &Impl{
        Names: []string{"name1"},}
    
    impl2 := &Impl{
        Names: []string{"name2"},}
    
    impl1.Merge(impl2)
    fmt.Println(impl1.Names)
}

输出

[name1]

我希望输出是:

[name1,name2]

为什么这个演员表不起作用?调试之后,似乎 other 变量为空。

解决方法

您需要使用指针方法来修改接收器的构建。

JSON_MERGE_PATCH

游乐场:https://play.golang.org/p/7NQQnfJ_G6A

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...