Gomobile绑定:不支持的基本类型:uint64

时间:2017-08-02 18:49:10

标签: go gomobile

文档说应该支持它。 它似乎没有在gen.go文件中实现:

function myFunction() {   

  var stime = new Date();
  var col1;
  var col2;
  var col3;
  var dbconnection = Jdbc.getConnection(dbUrl, root, rootPwd);
  var statement = dbconnection.createStatement();
  var googlesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); 
  var data = googlesheet.getDataRange().getValues(); 
  var itrows=1000;
  var complete=false;
  if(PropertiesService.getScriptProperties().getProperty('iteration'))
  {
     var iteration=Number(PropertiesService.getScriptProperties().getProperty('iteration') + 1); 
  }
  else
  {
    var iteration=Number(PropertiesService.getScriptProperties().setProperty('iteration', 1));
  }

  var max=itrows * iteration;
  var min=max - itrows + 1;
  if(max>data.length-1)
  {
    max=data.length-1;
    complete=true;
  }


  dbconnection.setAutoCommit(false)

  for (var i=min;i<=max;i++) 
  {
    col1 = data[i][0];
    col2 = data[i][1];
    col3 = data[i][2];
    var sql = "{call [dbo].[sp_googlesheetimport](?,?,?)}";
    statement = dbconnection.prepareCall(sql);
    statement.setString(1, col1);
    statement.setString(2, col2);
    statement.setString(3, col3);
    statement.addBatch();
  }

  statement.executeBatch();
  dbconnection.commit();
  statement.close();
  dbconnection.close();
  if(complete)
  {
    PropertiesService.getScriptProperties().deleteProperty('iteration');
  }
  var etime = new Date();
  Logger.log('Exec time: ' + (etime.getTime() - stime.getTime()));
}

function createGASTrigger() {
    var varUserPropertiesService = PropertiesService.getUserProperties();
    var varUserTriggerId = varUserPropertiesService.getProperty("myFunction");
    var varUserTrigger = ScriptApp.getProjectTriggers();

    for (var i=0;i<varUserTrigger.length;i++)
    {
      if (varUserTrigger[i].getUniqueId() == varUserTriggerId)
      {
        ScriptApp.deleteTrigger(varUserTrigger[i]);
        break;
      }
    }  
    var userProperties = PropertiesService.getUserProperties();
    var nextTrigger = ScriptApp.newTrigger("myFunction").timeBased().after(1 * 120 * 1000).create();
}

我读到我需要修补移动支持 但是在更改文件以支持Uint64后,(go / src / golang.org / x / mobile / bind / gen.go) 并重新启动移动:gomobile init

同样的错误仍然出现,我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:0)

我认为这里的问题是Java没有unsigned。因此,Java接口不能将uint64(和uint32 IIRC)文件类型作为全局变量,函数返回值或函数参数。

您可以在Go mobile中使用uint64。

基于以上两种解决方案:

  1. 将非法类型的暴露限制在最低限度
  2. 在Go中将uint64转换为int64,并在Java中将long转换为BigInteger。

答案 1 :(得分:0)

我通过修补Go mobile来解决这个问题,受到这个StackOverflow帖子的启发!我使用&#34; patch&#34;非常松散,我不鼓励任何人使用此代码,因为它是非常特定于目的的。

我只是将default案例短路以返回uint64 - 您可以看到我在这里做了什么:https://github.com/Sidetalker/mobile/commit/01eb11be69a781e71c7f00df6fc17b35f828f7a2

我需要在该分支上进行一些其他查找/替换更改以使其正确构建,我还必须修复我非常确定的移动错误{{{ 1}}类型。所有这些都可以在分支上看到。

另外,关键的是,我必须完全byte这个项目 - 进行更改并运行go get是不够的。

不要使用此代码。请注意这一点。