Skip to content

False positive with generic interface and generic type #1616

Open
@errrov

Description

  • The output of 'staticcheck -version' :
    staticcheck.exe 2024.1.1 (0.5.1)

  • The output of 'go version'
    go version go1.23.0 windows/amd64

  • Exactly which command you ran
    staticcheck main.go

  • Output of the command and what's wrong with the output

main.go:31:2: field v is unused (U1000)
main.go:38:28: func (*genericStruct[T]).setValue is unused (U1000)
main.go:42:28: func (*genericStruct[T]).getValue is unused (U1000)
package main

import (
	"fmt"
	"reflect"
)

type valueHandler[T any] interface {
	setValue(T)
	getValue() T
}

type handler[T any] struct {
	valueHandler[T]
}

func (h *handler[T]) setAndGetValue(v T) {
	h.setValue(v)
	va := h.getValue()
	fmt.Println("Value is : ", va)
}

type genericStruct[T any] struct {
	v T
}

func newGenericStruct[T any]() *genericStruct[T] {
	return &genericStruct[T]{}
}

func (g *genericStruct[T]) setValue(v T) {
	fmt.Println("setting value")
	g.v = v
}

func (g *genericStruct[T]) getValue() T {
	fmt.Println("getting value")
	return g.v
}

func main() {
	test := handler[int]{newGenericStruct[int]()}
	test.setAndGetValue(1)
}

So staticcheck shows that functions setValue and getValue are not used. However we can see that messages of "setting value" and "getting value" appear. So they are clearly used. For me it seems like false positive.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions