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 golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/6bb5e6c2-8da7-4597-b92b-82ea3c5577b0n%40googlegroups.com.