My background. I've written a lot of C and Python (and other things), but
am new to Go.
I am getting results from fmt.Fprintf that I can't understand. Here's what
I'm puzzled about:
I wrote, in Go, a file hex-and-ASCII dumper of the kind everyone has seen.
(Like the Unix xxd command, for example.) I've been using it, and it DOES
work. The output looks like this:
00000000 2f 2f 20 50 61 63 6b 61 67 65 20 68 64 75 6d 70 // Package hdump
00000010 20 64 75 6d 70 73 20 64 61 74 61 20 69 6e 20 74 dumps data in t
00000020 68 65 20 74 72 61 64 69 74 69 6f 6e 61 6c 20 68 he traditional h
The dumping is done by a function that accepts a count and a []bytes, and
an io.Writer to send the output to. I pass os.Stdout to the function, and
the hex/ASCII you see above is printed. I won't show all that code, but
perhaps you can trust me that I've used it for weeks with no problems.
Then I started reading about how good Go programmers write unit tests, and
I wrote a simple test. Of course, I need to capture the output, instead of
sending it to os.Stdout. I read about strings.Builder, and that seems to be
what I need. As a first attempt, I'll send the same parameters to my
function, one going to stdout and other to a strings.Builder. I'll print
the contents of the string.Builder and it should match what gets sent to
stdout.
Here is the code:
func TestHdump(t *testing.T) {
var b strings.Builder
dest := NewHdumper(&b)
dest.DumpBytes(21, []byte("\t123456789abcdefHello"))
fmt.Printf(b.String())
fmt.Printf("for real:\n")
dest = NewHdumper(os.Stdout)
dest.DumpBytes(21, []byte("\t123456789abcdefHello"))
}
Quite simple: do it once to the strings.Builder and once to stdout, and
visually compare them. (I'll make it a real test, after I sort this out.)
But the output is VERY different, and I can't figure out why:
00000000 09 31 32 33 34 35 36 37 38 39 61
62 63 64 65 66 .123456789abcdef
00000010 48 65 6c 6c 6f Hello
for real:
00000000 09 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 .123456789abcdef
00000010 48 65 6c 6c 6f Hello
There are two big differences:
1. The first line of 16 bytes is indented (a lot) when going to the
strings.Builder.
2. The "Hello" chars are not "pushed out to the right" to align with the
ASCII characters of the line above.
Now, why aren't these two things absolutely identical? HELP!
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/6bb5e6c2-8da7-4597-b92b-82ea3c5577b0n%40googlegroups.com.