go调java代码 goto java( 二 )


pair2 := StringPair{"ghi","jkl"}
point := Point{5, 7}
fmt.Println(pair1, pair2, point)
pair1.exchange()
pair2.exchange()
point.exchange()
fmt.Println(pair1, pair2, point)
// exchangeThese(pair1, pair2) //wrong
exchangeThese(pair1, pair2)
fmt.Println(pair1, pair2)
}
运行结果
在本例中 , 自定义类型StringPair和Point指针实现了接口Exchanger所需的方法 , 因此该类型的值可以被赋值给接口的值 。
另外 , 特别注意一点 。如果使用exchangeThese(pair1,
pair2)会导致编译错误(如下图),正确写法应当是exchangeThese(pair1,
pair2) 。这是由于真正满足接口Exchanger的类型是StringPair指针,而非StringPair 。
在golang中 , 值接收者和指针接收者的方法集是不同的 。只是golang会智能地解引用和取引用,使得二者的方法集看上去是一样的 。但是,在调用exchangeThese时,就凸显出二者的不同了 。
golang调用javagolang调用java是什么,让我们一起了解一下?
golang是一种静态强类型、编译型语言 。功能上有:内存安全 , GC(垃圾回收) , 结构形态及 CSP-style 并发计算 , golang调用java就是接收一个参数 , 然后输出一行结果 。
由于Java世界里有非常丰富的开源应用模型和轮子,而这些正是Go世界里面最缺乏的东西,所以我首先考虑的就是如何在Go里面调用现有的Java代码 。
我们用一个简单的Go调用Java的例子,来进行测试 。(在winxp环境下能够正常运行)这段代码比较简单,就是在Go代码里面去call一个叫Hello的java对象 。而这个Hello .java功能也非常简单,就是接收一个参数,然后输出一行结果 。
// run_javapackage mainimport ("fmt""os/exec")/*** 调用一个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.javapublic class Hello{public static void main(String[] args){if(args.length==0)System.out.println("hello my world!");elseSystem.out.println("hello my world! "+args[0]);}}*/
注意:
为了能够运行我的例子,需要把Hello.class放在和 run_java的可执行文件同样的目录下 。例如,run_java.exe在d:\goproject下,那么Hello.class也要在d:\goproject下 。
go的uint64转换成java的哪种类型Golang 和java/c不同,Go在不同类型的变量之间赋值时需要显式转换 。也就是说Golang中数据类型不能自动转换 。
基本语法
表达式T(v))将值v 转换为类型T
T∶就是数据类型 , 比如int32,int64 , float32等等
v∶ 就是需要转换的变量
var i int = 100
var b float64 = float64(i)
var c int64 = int64(b)
fmt.Printf("b=%f,c=%d",b,c)
b=100.000000,c=100
登录后复制
细节说明
1)Go中,数据类型的转换可以是从表示范围小-表示范围大 , 也可以范围大一范围小
2) 被转换的是变量存储的数据(即值) , 变量本身的数据类型并没有变化!
3) 在转换中,比如将 int64 转成int8,编译时不会报错,只是转换的结果是按溢出处理,和
我们希望的结果不一样 。(在转换的时候需要注意范围)
var a int64 = 10000000
var b int8 = int8(a)
fmt.Printf("%d",b)
-128
登录后复制
可以看到在转换的时候,一定要保证转换大数据要是对方可以接受的范围 。
n1类型是int32,那么?20整个就是int32类型,可是n2是int64 , 这样就会编译错误 。

推荐阅读