Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。
兄弟连Go语言+区块链培训课程共计22周学习时长,划分为9个学习阶段,即区块链主流语言-Go语言开发实战、区块链后端技术体系-Go语言高并发和服务器开发、Go开发区块链公链(区块链密码学、分布式编程、共识算法、基本概念,Golan公链开发)、以-太 坊与智能合约与DAPP开发、区块链分布式应用开发、区块链系统框架开发-超级账本与区块链3.0EOS、Go与区块链面试强化和高级企业级项目实战。
一 HTTP RPC
服务端代码
package main
import (
"errors"
"fmt"
"net/http"
"net/rpc"
)
const (
)
type Args struct {
A, B int
}
type Quotient struct {
Quo, Rem int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *int) error {
*reply = args.A * args.B
return nil
}
func (t *Arith) Divide(args *Args, quo *Quotient) error{
if args.B == 0 {
return errors.New("divide by zero!")
}
quo.Quo = args.A / args.B
quo.Rem = args.A % args.B
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
rpc.HandleHTTP()
err := http.ListenAndServe(URL, nil)
if err != nil {
fmt.Println(err.Error())
}
}
客户端代码
package main
import (
"fmt"
"net/rpc”
)
const (
)
func main() {
client, err := rpc.DialHTTP("tcp", URL)
if err != nil {
fmt.Println(err.Error())
}
args := Args{2, 4}
var reply int
err = client.Call("Arith.Multiply", &args, &reply)
if err != nil {
fmt.Println(err.Error())
} else {
fmt.Println(reply)
}
}
二 JSON-RPC
服务器端代码
package main
import (
"errors"
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
const (
)
type Args struct {
A, B int
}
type Quotient struct {
Quo, Rem int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *int) error {
*reply = args.A * args.B
return nil
}
func (t *Arith) Divide(args *Args, quo *Quotient) error {
if args.B == 0 {
return errors.New("divide by zero!")
}
quo.Quo = args.A / args.B
quo.Rem = args.A % args.B
return nil
}
func main() {
arith := new(Arith)
rpc.Register(arith)
tcpAddr, err := net.ResolveTCPAddr("tcp", URL)
if err != nil {
fmt.Println(err)
}
listener, err := net.ListenTCP("tcp", tcpAddr)
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go jsonrpc.ServeConn(conn)
}
}
客户端代码
package main
import (
"fmt"
"net/rpc”
)
const (
)
func main() {
client, err := jsonrpc.Dial("tcp", URL)
defer client.Close()
if err != nil {
fmt.Println(err)
}
args := Args{7, 2}
var reply int
err = client.Call("Arith.Multiply", &args, &reply)
if err != nil {
fmt.Println(err)
}
fmt.Println(reply)
}
下一篇:PHP语言好不好?优势在哪里?