go升级1.3bug,查询源码

u010026901 · · 1502 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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,查询源码

1502 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传