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)
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.
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
Code (playground)
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) }