Change signature of generated function to only return the decompressed byte slice. The error value is removed. Instead the function will panic when a decompression error occurs. This allows us to assign the data to global variables were necessary. A decompression error is considered a deal breaker and therefor the panic is warranted.

这个提交包含在:
jim teeuwen 2012-03-08 11:47:57 +01:00
父节点 360acac596
当前提交 0450ba8421
共有 4 个文件被更改,包括 22 次插入11 次删除

查看文件

@ -19,24 +19,31 @@ converted to a raw byte slice.
declaration with name 'main' and one function named 'gophercolor_png'. declaration with name 'main' and one function named 'gophercolor_png'.
It looks like this: It looks like this:
func gophercolor_png() ([]byte, error) { // gophercolor_png returns the decompressed binary data.
// It panics if an error occurred.
func gophercolor_png() []byte {
gz, err := gzip.NewReader(bytes.NewBuffer([]byte{ gz, err := gzip.NewReader(bytes.NewBuffer([]byte{
... ...
})) }))
if err != nil { if err != nil {
return nil, err panic("Decompression failed: " + err.Error())
} }
var b bytes.Buffer var b bytes.Buffer
io.Copy(&b, gz) io.Copy(&b, gz)
gz.Close() gz.Close()
return b.Bytes(), nil return b.Bytes()
} }
You can now simply include the new .go file in your program and call You can now simply include the new .go file in your program and call
gophercolor_png() to get the uncompressed image data. gophercolor_png() to get the uncompressed image data. The function panics
if something went wrong during decompression. This makes any faults appearant
during initialization of your program, so it can quickly be fixed. Additionally,
this approach allows us to assign the decompressed file data to global
variables where necessary.
See the testdata directory for example input and output. See the testdata directory for example input and output.
Aternatively, you can pipe the input file data into stdin. bindata will then Aternatively, you can pipe the input file data into stdin. bindata will then

查看文件

@ -21,8 +21,10 @@ import (
"io" "io"
) )
func %s() ([]byte, error) { // %s returns the decompressed binary data.
gz, err := gzip.NewReader(bytes.NewBuffer([]byte{`, pkgname, funcname) // It panics if an error occurred.
func %s() []byte {
gz, err := gzip.NewReader(bytes.NewBuffer([]byte{`, pkgname, funcname, funcname)
gz := gzip.NewWriter(&GoWriter{Writer: output}) gz := gzip.NewWriter(&GoWriter{Writer: output})
io.Copy(gz, input) io.Copy(gz, input)
@ -32,14 +34,14 @@ func %s() ([]byte, error) {
})) }))
if err != nil { if err != nil {
return nil, err panic("Decompression failed: " + err.Error())
} }
var b bytes.Buffer var b bytes.Buffer
io.Copy(&b, gz) io.Copy(&b, gz)
gz.Close() gz.Close()
return b.Bytes(), nil return b.Bytes()
}`) }`)
return return
} }

0
testdata/gophercolor.png vendored 可执行文件 -> 普通文件
查看文件

之前

宽度:  |  高度:  |  大小: 21 KiB

之后

宽度:  |  高度:  |  大小: 21 KiB

查看文件

@ -6,7 +6,9 @@ import (
"io" "io"
) )
func gophercolor_png() ([]byte, error) { // gophercolor_png returns the decompressed binary data.
// It panics if an error occurred.
func gophercolor_png() []byte {
gz, err := gzip.NewReader(bytes.NewBuffer([]byte{ gz, err := gzip.NewReader(bytes.NewBuffer([]byte{
0x1f,0x8b,0x08,0x00,0x00,0x09,0x6e,0x88,0x00,0xff,0x34,0x9b, 0x1f,0x8b,0x08,0x00,0x00,0x09,0x6e,0x88,0x00,0xff,0x34,0x9b,
0x65,0x50,0x1b,0x5f,0x17,0xc6,0x43,0x69,0x8b,0xbb,0xbb,0xbb, 0x65,0x50,0x1b,0x5f,0x17,0xc6,0x43,0x69,0x8b,0xbb,0xbb,0xbb,
@ -1837,12 +1839,12 @@ func gophercolor_png() ([]byte, error) {
})) }))
if err != nil { if err != nil {
return nil, err panic("Decompression failed: " + err.Error())
} }
var b bytes.Buffer var b bytes.Buffer
io.Copy(&b, gz) io.Copy(&b, gz)
gz.Close() gz.Close()
return b.Bytes(), nil return b.Bytes()
} }