deckarep / golang-set

A simple, battle-tested and generic set type for the Go language. Trusted by Docker, 1Password, Ethereum and Hashicorp.
Other
4.15k stars 274 forks source link

Getting error when instantiating a set: "invalid operation: cannot index mapset.NewSet (value of type func(s ...interface{}) mapset.Set)" #111

Closed pcgeek86 closed 1 year ago

pcgeek86 commented 1 year ago

Repro Steps

myset := mapset.NewSet[string]()

Actual Result

invalid operation: cannot index mapset.NewSet (value of type func(s ...interface{}) mapset.Set)

Expected Result

New set should be instantiated.

deckarep commented 1 year ago

@pcgeek86 - Hi, this is pretty surprising if this is somehow broken on Go 1.20 and I'll be investigating this today. In the meantime, if anyone else experiences this with 1.20 please +1 this issue.

pcgeek86 commented 1 year ago

Thanks, I'm pretty new to Go. I was just copying the example from the README, and was surprised that it was throwing the error.

deckarep commented 1 year ago

So far I can't reproduce the issue you are seeing...here is a complete code snippet running go1.20

package main

import (
    "fmt"
    mapset "github.com/deckarep/golang-set/v2"
    "runtime"
)

func main() {
    // Create a string-based set of required classes.
    req := mapset.NewSet[string]()
    req.Add("cooking")
    req.Add("english")
    req.Add("math")
    req.Add("biology")

    fmt.Printf("Go version: %s\n", runtime.Version())
    fmt.Println("size: ", req.Cardinality())

    req.Each(func(x string) bool {
        fmt.Println("->", x)
        return false
    })
}

Output:

Go version: go1.20.1
size:  4
-> cooking
-> english
-> math
-> biology
deckarep commented 1 year ago

You mentioned you are new to Go, a couple of things to make sure:

  1. That you are properly importing the correct version of the Set v2
  2. That you are using Go modules correctly which is the recommended way to use dependencies for awhile now: go get github.com/deckarep/golang-set/v2
  3. That your Go environment is properly setup, perhaps try pulling in other dependencies to make sure things are solid.
pcgeek86 commented 1 year ago

I just created a new folder / module and was able to repro the issue.

> go mod init trevortest
> go get github.com/deckarep/golang-set
Screenshot 2023-03-05 at 11 49 00 AM Screenshot 2023-03-05 at 11 49 52 AM

Go.mod

Screenshot 2023-03-05 at 11 50 11 AM

NOTE: I solved the issue by appending /v2 to the module name. Thanks for pointing that out! I had incorrectly assumed the module name was just the GitHub repo path.

deckarep commented 1 year ago

Glad it's resolved!