import( "bufio" "log" "net / rpc" "os" ) type Reply struct { Data string } func main(){ client、err:= rpc.Dial( "tcp"、 "localhost:12345") if err != nil { log.Fatal(err) } in:= bufio.NewReader(os.Stdin) for { line、_、err:= in.ReadLine() if err!= nil { log.Fatal(err) } var返信返信 err = client.Call( "Listener.GetLine"、line、&reply) if err!= nil { log.Fatal(err) } log.Printf( "Reply:%v、Data:%v"、reply、reply 。データ) } }
上記はrpcフレームワークコードのクライアント実装であり、以下はサーバー実装です。
import( "fmt" "log" "net" "net / rpc" ) type Listener int type Reply struct { Data string } func(l * Listener)GetLine(line [] byte、reply * Reply)error { rv:= string (line) fmt.Printf( "Receive:%v \ n"、rv) * reply = Reply {rv} return nil } func main(){ addy、err:= net.ResolveTCPAddr( "tcp"、 "0.0.0.0 :12345 ") if err!= nil { log.Fatal(err) } インバウンド、err:= net.ListenTCP(" tcp "、addy) if err!= nil { log.Fatal(err) } listener:= new(リスナー) rpc。登録(リスナー) rpc。Accept(inbound) }
追加のパッケージをダウンロードする必要はありません。これは、goに付属するrpcフレームワークです。欠点は、go言語のプログラム間でしか通信できないことです。