PHPからGo言語のメソッドを呼び出す方法は何ですか?

PHPからGo言語のメソッドを呼び出すには、次の2つの方法があります。

  1. Golangが提供するCGO(C語言呼び出しGolang)機構を使用すると、GolangでC言語形式の関数をエクスポートして他の言語から呼び出すことができます。CGOを使用して、Golangのコードを共有ライブラリ(.soファイル)にコンパイルし、PHPでFFI(Foreign Function Interface)を使用して共有ライブラリをロードし、Golangのメソッドを呼び出すことができます。

まず、Golangでエクスポートする関数を//exportコメントマークで注釈付けする必要があります。これにより、CGOで関数が認識され、エクスポートされます。次に、go buildコマンドを使用してGolangコードを共有ライブラリにコンパイルします。以下に例を示します。

package main

import "C"

//export MyGoFunction
func MyGoFunction() {
    // Golang函数的实现
}

func main() {
    // 程序入口
}

次に、go build -buildmode=c-shared -o libmygo.so コマンドを使用して、コードを共有ライブラリにコンパイルします。その次に、PHP で FFI 拡張を使用して、共有ライブラリをロードして Golang のメソッドを以下のように呼び出すことができます。

<?php
$ffi = FFI::cdef("
    void MyGoFunction();
", "libmygo.so");

$ffi->MyGoFunction();
?>

なお、共有ライブラリのロードにFFIを使用する場合は、PHP側でFFI拡張を有効にする必要があります。

  1. net/rpc
  2. ネイティブの日本語で文章を言い換えてください。1 つのオプションのみが必要です。

まず,RPCサービスはGoで以下のように実装されます。

package main

import (
    "errors"
    "net"
    "net/http"
    "net/rpc"
)

type MyService struct{}

func (s *MyService) MyGoFunction(args *int, reply *int) error {
    // Golang函数的实现
    return nil
}

func main() {
    myService := new(MyService)
    rpc.Register(myService)
    rpc.HandleHTTP()

    l, err := net.Listen("tcp", ":1234")
    if err != nil {
        // 错误处理
        return
    }

    http.Serve(l, nil)
}

その後、go run main.go コマンドを使用して Golang コードを実行し、localhost:1234 で RPC サービスを開始します。

次に、PHPでjsonrpcや同様のライブラリを利用して、以下のようにGoのメソッドを呼び出します。

<?php
$client = new JsonRPC\Client('http://localhost:1234');
$result = $client->MyGoFunction($args);

if ($result->isError()) {
    // 错误处理
    return;
}

// 处理结果
?>

jsonrpc 拡張機能または同様のライブラリを PHP にインストールする必要があることに注意してください。RPC 呼び出しで Golang のメソッドを使用できます。さらに、Golang の RPC サービスがアクセス可能なサーバーで実行され、PHP はそのサーバーとネットワーク接続を確立できることを確認してください。

bannerAds