如何通过Java调用Golang编写的服务接口?

更新于
2026-10-11 08:28:07
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1008个文字,预计阅读时间需要5分钟。

如何通过Java调用Golang编写的服务接口?

Java调用Golang服务实现跨语言协作,在软件开发中,我们经常会遇到不同语言服务之间的调用需求。Java作为一种通用编程语言,在许多场景下需要调用其他语言如Golang编写的服务。本文将介绍如何在Java中调用Golang服务。

1. 使用gRPC框架

如何通过Java调用Golang编写的服务接口?

gRPC是一个高性能、开源的远程过程调用(RPC)框架,支持多种编程语言。在Java中调用Golang服务,可以使用gRPC框架实现。

2. 编写Golang服务端代码

首先,在Golang中定义服务接口和消息格式,然后实现接口。

go// file: greeter.protosyntax=proto3;

package greeter;

// The greeting service definition.service Greeter { rpc SayHello (HelloRequest) returns (HelloResponse);}

// The request message containing the user's name.message HelloRequest { string name=1;}

// The response message containing the greetingsmessage HelloResponse { string message=1;}

使用protoc命令生成Golang和Java的代码:

bashprotoc --go_out=. --java_out=. greeter.proto

3. 实现Golang服务端

实现`Greeter`接口中的`SayHello`方法:

gopackage main

import (contextlognetgoogle.golang.org/grpcexample.com/greeter/greeterpb)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *greeterpb.HelloRequest) (*greeterpb.HelloResponse, error) {return &greeterpb.HelloResponse{Message: Hello, + in.Name}, nil}

func main() {lis, err :=net.Listen(tcp, :50051)if err !=nil {log.Fatalf(failed to listen: %v, err)}s :=grpc.NewServer()greeterpb.RegisterGreeterServer(s, &server{})log.Println(server listening at 0.0.0.0:50051)if err :=s.Serve(lis); err !=nil {log.Fatalf(failed to serve: %v, err)}}

4. Java客户端调用

在Java项目中,引入gRPC库和protobuf库。

java// file: GreeterClient.javaimport io.grpc.ManagedChannel;import io.grpc.ManagedChannelBuilder;import greeterpb.GreeterGrpc;import greeterpb.HelloRequest;import greeterpb.HelloResponse;

public class GreeterClient { public static void main(String[] args) { ManagedChannel channel=ManagedChannelBuilder.forAddress(localhost, 50051) .usePlaintext() .build(); GreeterGrpc.GreeterBlockingStub stub=GreeterGrpc.newBlockingStub(channel); HelloRequest request=HelloRequest.newBuilder().setName(World).build(); HelloResponse response=stub.SayHello(request); System.out.println(Response: + response.getMessage()); channel.shutdown(); }}

编译Java和Golang代码,运行Java客户端程序,即可调用Golang服务端程序。

Java调用Golang服务

前言

在软件开发中,我们经常会遇到不同语言的服务之间的调用。Java作为一种常用的编程语言,有时需要调用其他语言编写的服务,比如Golang。本文将介绍如何在Java中调用Golang服务,以及一些实际应用案例。

Golang简介

Golang是由Google开发的一种编程语言,它具有高效的并发性和简洁的语法。Golang的编译器将源代码编译成机器码,使它能够生成可独立执行的二进制文件,并且无需依赖其他软件。

Golang的高性能和可执行性使其成为一种理想的编程语言,特别适用于构建网络应用、Web服务、分布式系统等。

Java调用Golang服务的方法

在Java中调用Golang服务,有多种方法可供选择。下面介绍两种常用的方法。

方法一:使用HTTP协议进行通信

Java和Golang都提供了HTTP的支持,因此可以使用HTTP协议进行通信。具体步骤如下:

  1. Golang服务端使用net/localhost:8080/"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json"); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }

    通过上述代码,Java客户端发送HTTP GET请求给Golang服务端,并打印返回的响应。

    方法二:使用RPC进行通信

    除了使用HTTP协议进行通信,还可以使用RPC(Remote Procedure Call,远程过程调用)进行通信。RPC允许不同语言的程序之间进行函数调用,使得Java和Golang之间的调用更加方便。具体步骤如下:

    1. Golang服务端使用net/rpc包注册服务和方法,并监听指定的端口。

    // main.go package main import ( "fmt" "net" "net/rpc" ) type MyService struct {} func (s *MyService) Hello(name string, reply *string) error { *reply = fmt.Sprintf("Hello, %s!", name) return nil } func main() { service := new(MyService) rpc.Register(service) l, err := net.Listen("tcp", ":1234") if err != nil { fmt.Println("Listen error:", err) return } defer l.Close() fmt.Println("Listening on :1234...") for { conn, err := l.Accept() if err != nil { fmt.Println("Accept error:", err) return } go rpc.ServeConn(conn) } }

    1. 在Java中,使用java.net包创建一个TCP客户端,向Golang服务端发送RPC请求,并获取响应。

    // Main.java import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; public class Main { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 1234); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); out.writeObject("MyService.Hello"); out.writeObject("John"); String response = (String) in.readObject(); System.out.println("Response: " + response); socket.close(); } catch (Exception e) { e.printStackTrace(); }

本文共计1008个文字,预计阅读时间需要5分钟。

如何通过Java调用Golang编写的服务接口?

Java调用Golang服务实现跨语言协作,在软件开发中,我们经常会遇到不同语言服务之间的调用需求。Java作为一种通用编程语言,在许多场景下需要调用其他语言如Golang编写的服务。本文将介绍如何在Java中调用Golang服务。

1. 使用gRPC框架

如何通过Java调用Golang编写的服务接口?

gRPC是一个高性能、开源的远程过程调用(RPC)框架,支持多种编程语言。在Java中调用Golang服务,可以使用gRPC框架实现。

2. 编写Golang服务端代码

首先,在Golang中定义服务接口和消息格式,然后实现接口。

go// file: greeter.protosyntax=proto3;

package greeter;

// The greeting service definition.service Greeter { rpc SayHello (HelloRequest) returns (HelloResponse);}

// The request message containing the user's name.message HelloRequest { string name=1;}

// The response message containing the greetingsmessage HelloResponse { string message=1;}

使用protoc命令生成Golang和Java的代码:

bashprotoc --go_out=. --java_out=. greeter.proto

3. 实现Golang服务端

实现`Greeter`接口中的`SayHello`方法:

gopackage main

import (contextlognetgoogle.golang.org/grpcexample.com/greeter/greeterpb)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *greeterpb.HelloRequest) (*greeterpb.HelloResponse, error) {return &greeterpb.HelloResponse{Message: Hello, + in.Name}, nil}

func main() {lis, err :=net.Listen(tcp, :50051)if err !=nil {log.Fatalf(failed to listen: %v, err)}s :=grpc.NewServer()greeterpb.RegisterGreeterServer(s, &server{})log.Println(server listening at 0.0.0.0:50051)if err :=s.Serve(lis); err !=nil {log.Fatalf(failed to serve: %v, err)}}

4. Java客户端调用

在Java项目中,引入gRPC库和protobuf库。

java// file: GreeterClient.javaimport io.grpc.ManagedChannel;import io.grpc.ManagedChannelBuilder;import greeterpb.GreeterGrpc;import greeterpb.HelloRequest;import greeterpb.HelloResponse;

public class GreeterClient { public static void main(String[] args) { ManagedChannel channel=ManagedChannelBuilder.forAddress(localhost, 50051) .usePlaintext() .build(); GreeterGrpc.GreeterBlockingStub stub=GreeterGrpc.newBlockingStub(channel); HelloRequest request=HelloRequest.newBuilder().setName(World).build(); HelloResponse response=stub.SayHello(request); System.out.println(Response: + response.getMessage()); channel.shutdown(); }}

编译Java和Golang代码,运行Java客户端程序,即可调用Golang服务端程序。

Java调用Golang服务

前言

在软件开发中,我们经常会遇到不同语言的服务之间的调用。Java作为一种常用的编程语言,有时需要调用其他语言编写的服务,比如Golang。本文将介绍如何在Java中调用Golang服务,以及一些实际应用案例。

Golang简介

Golang是由Google开发的一种编程语言,它具有高效的并发性和简洁的语法。Golang的编译器将源代码编译成机器码,使它能够生成可独立执行的二进制文件,并且无需依赖其他软件。

Golang的高性能和可执行性使其成为一种理想的编程语言,特别适用于构建网络应用、Web服务、分布式系统等。

Java调用Golang服务的方法

在Java中调用Golang服务,有多种方法可供选择。下面介绍两种常用的方法。

方法一:使用HTTP协议进行通信

Java和Golang都提供了HTTP的支持,因此可以使用HTTP协议进行通信。具体步骤如下:

  1. Golang服务端使用net/localhost:8080/"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json"); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }

    通过上述代码,Java客户端发送HTTP GET请求给Golang服务端,并打印返回的响应。

    方法二:使用RPC进行通信

    除了使用HTTP协议进行通信,还可以使用RPC(Remote Procedure Call,远程过程调用)进行通信。RPC允许不同语言的程序之间进行函数调用,使得Java和Golang之间的调用更加方便。具体步骤如下:

    1. Golang服务端使用net/rpc包注册服务和方法,并监听指定的端口。

    // main.go package main import ( "fmt" "net" "net/rpc" ) type MyService struct {} func (s *MyService) Hello(name string, reply *string) error { *reply = fmt.Sprintf("Hello, %s!", name) return nil } func main() { service := new(MyService) rpc.Register(service) l, err := net.Listen("tcp", ":1234") if err != nil { fmt.Println("Listen error:", err) return } defer l.Close() fmt.Println("Listening on :1234...") for { conn, err := l.Accept() if err != nil { fmt.Println("Accept error:", err) return } go rpc.ServeConn(conn) } }

    1. 在Java中,使用java.net包创建一个TCP客户端,向Golang服务端发送RPC请求,并获取响应。

    // Main.java import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; public class Main { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 1234); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); out.writeObject("MyService.Hello"); out.writeObject("John"); String response = (String) in.readObject(); System.out.println("Response: " + response); socket.close(); } catch (Exception e) { e.printStackTrace(); }