相关疑难解决方法(0)

Go错误:无法在没有实例化的情况下使用泛型类型

在学习 Go 泛型时,我遇到了一个似乎无法解决的错误。我把它归结为最简单的代码:

type opStack[T any] []T

func main() {

    t := make(opStack)
    //  t := new(opStack)
    t = append(t, 0)
    fmt.Println(t[0])
}
Run Code Online (Sandbox Code Playgroud)

在操场上,这会在调用时(以及在注释掉的调用make()上类似)出现问题,并显示以下错误消息:new

无法在没有实例化的情况下使用泛型类型 opStack[T any]

但是make()是一个实例化函数。所以,我希望我错过了一些语法上的微妙之处。Go 抱怨什么以及需要纠正什么?

generics go

35
推荐指数
1
解决办法
4万
查看次数

去相当于C中的void指针

我一直在玩Go有点制作一些数据结构库,我有一个大问题.我希望数据结构能够包含任何类型,但是我没有看到任何方法在Go中执行此操作,因为您无法声明void指针,并且它们没有像NSObject这样的类,所有内容都继承自.我如何在Go中实现相同的功能?

pointers go

22
推荐指数
1
解决办法
1万
查看次数

Go支持模板或泛型吗?

我知道Go没有传统OOP意义上的类,但是Go确实提供了一个接口概念,允许你做大部分你想要做的OOP事情.

但是,Go是否允许创建模板类?例如,我正在阅读容器/列表包的源代码.它定义了一个列表和列表的相关方法.但是在所有方法中,列表中包含的值都是类型interface{}- 因此,任何类型.有没有办法创建一个仅限于保存特定类型值的列表?int,string,Fruit ......等等.

oop generics go

7
推荐指数
2
解决办法
450
查看次数

如何创建通用结构?

如何构建通用结构?

我试过:

type SafeSet[type T] struct {
    Values map[T]bool
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做到例如

SafeSet{ Values: make(map[net.Conn]bool) }
SafeSet{ Values: make(map[string]  bool) }
SafeSet{ Values: make(map[int]     bool) }
Run Code Online (Sandbox Code Playgroud)

generics go

5
推荐指数
1
解决办法
6934
查看次数

go2go.playground - 预期类型,找到“类型”(还有 1 个错误)

我尝试从设计草案泛型的下一步)中 运行示例go2go.playground

type Pair(type T) struct { f1, f2 T }
Run Code Online (Sandbox Code Playgroud)

,但得到一个错误

prog.go2:14:11: expected type, found 'type' (and 1 more errors)
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到实际的go generics design draft

generics go go-playground go-2

3
推荐指数
1
解决办法
652
查看次数

如何在Go中为不同类型实现容器?

以下代码在Go中实现了一个int列表:

package main

import "fmt"

type List struct {
    Head int
    Tail *List
}

func tail(list List) *List {
    return list.Tail
}

func main() {
    list := List{Head: 1, Tail: 
         &List{Head: 2, Tail:
         &List{Head: 3, Tail:
         nil}}}
    fmt.Println(tail(list).Head)
}
Run Code Online (Sandbox Code Playgroud)

问题是这只适用于int.如果我想要一个列表strings,我需要再次重新实现每个列表方法(例如tail)!这显然不实用,所以,这可以通过使用空接口来解决:

type List struct {
  Head interface{} // Now works for any type!
  Tail *List
}
Run Code Online (Sandbox Code Playgroud)

问题是,1.由于类型转换,这似乎要慢得多,2.它抛弃了类型安全,允许人们键入任何东西:

// This type-checks!
func main() {
    list := List{Head: 123456789 , Tail:
         &List{Head: "covfefe" , Tail: …
Run Code Online (Sandbox Code Playgroud)

generics types interface go

2
推荐指数
1
解决办法
611
查看次数

标签 统计

go ×6

generics ×5

go-2 ×1

go-playground ×1

interface ×1

oop ×1

pointers ×1

types ×1