因爲Java世界裏有很是豐富的開源應用模型和輪子,而這些正是Go世界裏面最缺少的東西,因此我首先考慮的就是如何在Go裏面調用現有的Java代碼。早上寫了個簡單的Go調用Java的例子,在winxp環境下可以正常運行。這段代碼比較簡單,就是在Go代碼裏面去call一個叫Hello的java對象。而這個Hello .java功能也很是簡單,就是接收一個參數,而後輸出一行結果。
調用的初始感受還行,固然還須要後面作更復雜的案例測試。具體的代碼以下:
java
// run_javagit
package maingithub
import (併發
"fmt"框架
"os/exec"學習
)測試
/**spa
* 調用一個Hello.class,並接收一個參數對象
*/進程
func callJava(){
cmd := exec.Command("java","Hello","tom")
out,err := cmd.Output()
if err != nil {
println("error:",err.Error())
}
fmt.Printf("call java class Hello: %q\n", string(out))
}
func main() {
fmt.Println("Test Call Java function!")
callJava()
}
/* Hello.java
public class Hello{
public static void main(String[] args){
if(args.length==0)
System.out.println("hello my world!");
else
System.out.println("hello my world! "+args[0]);
}
}*/
注意:
爲了可以運行個人例子,須要把Hello.class放在和 run_java的可執行文件一樣的目錄下。例如, run_java.exe在d:\goproject下,那麼Hello.class也要在d:\goproject下。
-------------------------------------------------
2012-07-03
找到一款開源的GoJVM框架,能夠在Go程序裏面實例化一個java class,並調用 java class 裏面的方法。 老外真是牛, GoJVM 正是我想要的東西。有些遺憾的是GoJVM目前支持比較簡單的JAVA對象,並且已經有快一年沒有更新了。感興趣的朋友能夠本身去下載學習一下。
--------------------------------------
2012-07-04
看來有些人仍是沒看懂程序,那我就給沒看懂程序的朋友再講解一下吧。寫這個例子是爲了探索Go調用Java代碼的可行方式。而這個例子是演示了在同一個進程內,Go程序如何與Java程序完成信息交換的。首先,在同一個進程裏,Go程序啓動JVM,並加載Java程序Hello.class,併發送參數「tom」,Java程序Hello.class在接收到消息後,完成運算後經過控制檯向Go程序返回結果,而後Go程序把返回結果打印出來。這種Go 在同一個進程內調用Java程序是最簡單、最容易實現的方式。