go升级用最新的go包,记得要在自己的程序库中先makeclean(删除原先的.ma文件),再make下(Makefile文件中有 go install ../...)
采用压缩包安装的go,用编辑器可以很快定位源码
以一个例子来说明
gifConf, err1 := gif.DecodeAll(imgSource) //这里的DecodeAll调用的image/gif库里的
ok进入该源码
func DecodeAll(r io.Reader) (*GIF, error) {
var d decoder
if err := d.decode(r, false); err != nil {
return nil, err
}
gif := &GIF{
Image: d.image,
LoopCount: d.loopCount,
Delay: d.delay,
}
return gif, nil
}
我这次之所以查看源码,是因为出现读gif图片的bug,经测试报的是gif: invalid pixel value
errBadPixel = errors.New("gif: invalid pixel value")//在源码中查找到,接着我们查找errBadPixel
找到错误源
// Check that the color indexes are inside the palette.
if len(m.Palette) < 256 {//值为128
for _, pixel := range m.Pix {
//pixel也为128。因为用的gifsicle进行处理的,对图片有所优化
if int(pixel) >= len(m.Palette) {
return errBadPixel
}
}
}
假如我们要修改go的源码,可以修改,注意权限sudo
记得编译,如果一般自己写的go文件可以直接干掉pkg和src包,然后go install 或者make就可以重新生成
这里有点不同
给go的工作人员提issue,他们认为是gif自身的问题,so我们对gifsicle加了参数 gifsicle -k 128
我们指定他的colormap最高是128(程序一般自身忽略不在范围内的,原先未加的话应该是忽略,加上后,如果超出128,则设为128)
有疑问加站长微信联系(非本文作者)