11

Similar to this question but not quite identical.

I'm doing some code-generation, making .go files from within Go. I've got a struct, and I want to generate the text representation of it so that I can insert it as a literal into the generated code.

So, if I had myVal := SomeStruct{foo : 1, bar : 2}, I want to get the string "SomeStruct{foo : 1, bar : 2}".

Is this possible in Go?

1 Answer 1

19

From the fmt package:

%#v   a Go-syntax representation of the value

This is as close as you can come with built-in formatting, after removing the package identifier (main. in this example) from the output.

type T struct {
    A string
    B []byte
}

fmt.Printf("%#v\n", &T{A: "hello", B: []byte("world")})

// out
// &main.T{A:"hello", B:[]uint8{0x77, 0x6f, 0x72, 0x6c, 0x64}}

Run

Sign up to request clarification or add additional context in comments.

8 Comments

I tried this, but when I've got type Foo string and {field : Foo("Bar")}, it just prints this to {field : "Bar"}. Any workarounds for this?
@jmite: what is the type of field in the struct?
It's type Foo
@jmite: then the type conversion is superfluous, since the string literal can be assigned to the Foo type.
@jmite: this still can't do everything, nested pointers are only going to be printed as %p with a type, and values assigned to an interface will only show the underlying type. If you want more detailed output, you need to format it manually.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.