go升级1.3bug,查询源码

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)

本文来自:CSDN博客

感谢作者:u010026901

查看原文:go升级1.3bug,查询源码

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。