typetostring

package module
v1.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2025 License: MIT Imports: 3 Imported by: 5

README

Extract a string representation of Go type

tag Go Version GoDoc Build Status Go report Coverage Contributors License

Motivations

For the samber/do project, I needed to convert a Go type into a string. I used to convert it with fmt.Sprintf("%T", t) -> mypkg.MyStruct, but it does not insert package path into type representation, leading to collision when types from different pacakges match.

This package export type using the following representation:

  *[]**<-chan   github.com/samber/example    .Example
  |             |                            ^
  |             |                            Type name
  |             ^
  |             The package path (including package name)
  ^
  Type indicators (map, slice, pointer, channel...)

This library supports:

  • primitive types
  • pointers
  • structs
  • functions with input and output
  • vaargs
  • interfaces
  • maps
  • arrays
  • slices
  • channels
  • generics
  • anonymous types
  • named types
  • unsafe.Pointer
  • recursive types

Known limitations:

  • structs in generic type
  • any("foobar") is currently reported as any instead of string (see #2)

Examples

Using the following types:

package example

type testStruct struct{}
type testGeneric[T any] struct{ t T }
type testNamedType testStruct
Type Exported
int int
*int *int
**[]*int **[]*int
**[]*map[int]bool **[]*map[int]bool
func (a string, b bool) int func (string, bool) int
func(int, ...string) (bool, error) func(int, ...string) (bool, error)
testStruct github.com/samber/example.testStruct
*testStruct *github.com/samber/example.testStruct
***testStruct ***github.com/samber/example.testStruct
***testNamedType ***github.com/samber/example.testNamedType
[][3]***testStruct [][3]***github.com/samber/example.testStruct
testGeneric[string] github.com/samber/example.testGeneric[string]
*map[testStruct]chan<- testGeneric[string] *map[github.com/samber/example.testStruct]chan<- github.com/samber/example.testGeneric[string]

See more examples here

🚀 Install

go get github.com/samber/go-type-to-string

This library is v1 and follows SemVer strictly. No breaking changes will be made to exported APIs before v2.0.0.

💡 How to

GoDoc: https://pkg.go.dev/github.com/samber/go-type-to-string

package example

import converter "github.com/samber/go-type-to-string"

type Example struct{
    foo string
    bar int
}

func main() {
    name1 := converter.GetType[*Example]()
    // "*github.com/samber/example.Example"

    name2 := converter.GetValueType(Example{})
    // "github.com/samber/example.Example"
}

🤝 Contributing

Don't hesitate ;)

# Install some dev dependencies
make tools

# Run tests
make test
# or
make watch-test

👤 Contributors

Contributors

💫 Show your support

Give a ⭐️ if this project helped you!

GitHub Sponsors

📝 License

Copyright © 2023 Samuel Berthe.

This project is MIT licensed.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetReflectType added in v1.2.0

func GetReflectType(typeOfT reflect.Type) string

func GetReflectValueType added in v1.2.0

func GetReflectValueType(v reflect.Value) string

func GetType

func GetType[T any]() string

func GetValueType

func GetValueType[T any](t T) string

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL