相关疑难解决方法(0)

any/interface{} 作为约束与参数类型之间的区别?

由于泛型最近在 Go 1.18 中发布,我已经开始学习它们。我一般都明白这个概念,因为我过去有一些 Java 经验。但我没有得到一些实施细节。

例如:什么时候更适合any使用interface{}? 这是一个例子:

func printInterface(foo interface{}) {
    fmt.Printf("%v\n", foo)
}

func printAny[T any](foo T) {
    fmt.Printf("%v\n", foo)
}

func (suite *TestSuite) TestString() {
    printInterface("foo")
    printAny("foo")
}
Run Code Online (Sandbox Code Playgroud)

两种实现都有效。但是,如果我尝试nil使用any-version 进行打印,我会收到编译时错误:

无法推断 T。

https://go.dev/play/p/0gmU4rhhaOP

nil如果我尝试使用-version进行打印,我不会收到此错误interface{}

那么它的用例是什么any?与简单地使用相比,它何时会带来哪些好处interface{}

我要求提供一个具体的示例,其中一种实现客观上比另一种实现更合适和/或存在可以评估的特定好处。

generics go any

52
推荐指数
3
解决办法
4万
查看次数

如何在Golang中创建没有字段或方法的顶级对象?

由于我来自Java并且是Golang的新手,我将尝试用Java解释我想要的东西.

    interface Car { }

    class MyCarA implements Car {
      int specificToA
    }

    class MyCarB implements Car {
      int specificToB
    }
Run Code Online (Sandbox Code Playgroud)

我认为这样的界面(如Car)在Java中称为标记界面.它只是表明编译器必要的抽象.

我怎么能在Golang中这样做?

我有

type MyCarA struct {
   specificToA int
}
type MyCarB struct {
  specificToB int
}
Run Code Online (Sandbox Code Playgroud)

我现在如何概括这些结构?它应该是一个接口还是另一个结构?

go

-1
推荐指数
1
解决办法
159
查看次数

标签 统计

go ×2

any ×1

generics ×1