golang 类型转换的陷阱

今天在调试索引色图片的时候,使用golang碰到一个很奇怪的事情, 代码如下:


var pal_data []byte //调色板数据
var img_data []byte //图像数据
new_img := image.NewRGBA(image.Rect(0, 0, Width, Height))
for x:=0; x < len(img_data); x++ {
  v := img_data&#91;x&#93;
  if(v == 106) {
    vv:=106
    fmt.Println("V1=",v,",C={",pal_data&#91;vv*3+2&#93;,",",pal_data&#91;vv*3+1&#93;, ",",pal_data&#91;vv*3&#93;, "}")
    fmt.Println("V2=",v,",C={",pal_data&#91;v*3+2&#93;,",",pal_data&#91;v*3+1&#93;, ",",pal_data&#91;v*3&#93;, "}")
  }
}

&#91;/sourcecode&#93;

<p> 我特别提取了一个索引值106,结果发现打印出来的颜色值是不同的,使用vv这个指定变量的值是正确的, 另外一个却是错误的。 </p>

<p> 我一开始以为是优化的问题,然后取消了所有优化,发现结果还是不同的。 </p>

<p> 程序没有任何警告之类的,除了结果是错误的,其他的都正常。 </p>

<p> 直到我修改成下面的样子: </p>



v := img_data[x]*3
if(v == 106*3) 

在其他语言中,最多会有个警告,在golang中,直接报错了:

constant 318 overflows byte

…. 使用golang 的语法糖果然是需要代价的,当v:=img_data[x]的时候,v的类型是byte,标示范围为 0-255,然后v*3还是个byte,计算结果标示的范围还是0-255,并不会自动转换为容量更大的short或者int, 所以计算到最后还是个byte, 远远没办法访问所有的调色板数据了。

所以将v:=img_data[x]修改喂v:=int(img_data[x])就没问题了

类型很重要,当使用简单写法的时候尤其需要注意。

我差点忘记github的密码

这段时间在研究godot的android侧的源代码的时候,发现GDScript调用java代码各种不方便。

  1. 通过android/modules的方式,传递和返回的参数只能是基本类型
  2. 通过JavaClassWrapper的方式,查找类这一步就返回有问题了

研究了几天,修改android部分的源代码,解决了上述的问题。实现GDScript基本调用任意Java类和函数, 无论是通过android/modules还是JavaClassWrapper的方式,或者混合调用。结果在登陆github的 时候,多试了几次密码,github不让我重试了。

明天再试试,等可以了试试pull request, 这玩意在github上我还没有用过。

vue中使用umd

今天在整理代码的时候,将@json-editor/json-editor升级了,升级到最新的2.2.1版本了,然后发现 很悲剧了,程序怎么也找不到JSONEditor了。我以为是我程序哪块有问题了,所以各种调查。

幸好线上版本没有做更改,结果在线上版本中发现一句window.JSONEditor=…, 然后立刻在本地查找, 发现本地更新完之后已经没有这句话了。所以可以肯定不是我程序的事情啦。

最后发现线上版本在4月7号提交了一个 Unify the format of the module to umd.的补丁, 大致从 2.1.0的版本都不支持了。

做了下测试,发现2.0.0的版本都还正常,虽然可以强制版本为2.0.0,但既然发现了,总想试着解决下。 从网上搜索”vue 无法 import umd”, 发现原来是webpack的坑。

坑找到了,就开始填坑。首先安装 @babel/plugin-transform-modules-umd:

npm i –save-dev @babel/plugin-transform-modules-umd

然后在babel.config.js的配置的plugins中添加这个插件, 类似这样:

module.exports = {
presets: [
‘@vue/app’
],
plugins:[‘@babel/plugin-transform-modules-umd’]
}

org2blog在org 9.1.9无法创建模板

错误信息大概是一个check org template alist的错误, 我已经找不到了。表现就是模式已经是org2blog的org-mode了, 但创建的buffer里面是空的,命令行报告一个类似的错误。

原因在于在之前的版本中,如果使用模板的话,需要手动加载org-tempo这个,新版本下不需要加载了。 所以在配置中将 (require ‘org-tempo)去掉即可。

不过,我的软件包一向很少更新,获取9.1.9之前的某个版本就已经有问题了。