最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang兩種調(diào)用rpc的方法

 更新時(shí)間:2016年07月26日 16:19:42   作者:軒脈刃  
這篇文章主要介紹了golang兩種調(diào)用rpc的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言調(diào)用rpc的原理與實(shí)現(xiàn)方法,需要的朋友可以參考下

本文實(shí)例講述了golang兩種調(diào)用rpc的方法。分享給大家供大家參考,具體如下:

golang的rpc有兩種方法進(jìn)行調(diào)用,一種是rpc例子中給的:

復(fù)制代碼 代碼如下:
package main
import (
        "net/rpc"
        "net/http"
        "log"
        "net"
        "time"
)
type Args struct {
        A, B int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *([]string)) error {
        *reply = append(*reply, "test")
        return nil
}
func main() {
        arith := new(Arith)
        rpc.Register(arith)
        rpc.HandleHTTP()
        l, e := net.Listen("tcp", ":1234")
        if e != nil {
                log.Fatal("listen error:", e)
        }
        go http.Serve(l, nil)
        time.Sleep(5 * time.Second)
        client, err := rpc.DialHTTP("tcp", "127.0.0.1" + ":1234")
        if err != nil {
                log.Fatal("dialing:", err)
        }
        args := &Args{7,8}
        reply := make([]string, 10)
        err = client.Call("Arith.Multiply", args, &reply)
        if err != nil {
                log.Fatal("arith error:", err)
        }
        log.Println(reply)
}

另一種是使用NewServer

這種是當(dāng)rpc已經(jīng)注冊(cè)的時(shí)候就要使用了另外一種了。即一個(gè)server只能在DefaultRPC中注冊(cè)一種類型。

當(dāng)Server使用rpc.NewServer的時(shí)候,client也需要進(jìn)行下改動(dòng)了

復(fù)制代碼 代碼如下:
package main
import (
        "net/rpc"
        //"net/http"
        "log"
        "net"
        "time"
)
type Args struct {
        A, B int
}
type Arith int
func (t *Arith) Multiply(args *Args, reply *([]string)) error {
        *reply = append(*reply, "test")
        return nil
}
func main() {
        newServer := rpc.NewServer()
        newServer.Register(new(Arith))
        l, e := net.Listen("tcp", "127.0.0.1:1234") // any available address
        if e != nil {
                log.Fatalf("net.Listen tcp :0: %v", e)
        }
        go newServer.Accept(l)
        newServer.HandleHTTP("/foo", "/bar")
        time.Sleep(2 * time.Second)
        address, err := net.ResolveTCPAddr("tcp", "127.0.0.1:1234")
        if err != nil {
                panic(err)
        }
        conn, _ := net.DialTCP("tcp", nil, address)
        defer conn.Close()
        client := rpc.NewClient(conn)
        defer client.Close()
        args := &Args{7,8}
        reply := make([]string, 10)
        err = client.Call("Arith.Multiply", args, &reply)
        if err != nil {
                log.Fatal("arith error:", err)
        }
        log.Println(reply)
}

第二個(gè)例子中的

復(fù)制代碼 代碼如下:
newServer.HandleHTTP("/foo", "/bar")

可以任意設(shè)置,第一個(gè)例子其實(shí)是設(shè)置了默認(rèn)的兩個(gè)

這里也順便將reply作為[]slice的例子給演示了下

希望本文所述對(duì)大家Go語(yǔ)言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • go通過(guò)benchmark對(duì)代碼進(jìn)行性能測(cè)試詳解

    go通過(guò)benchmark對(duì)代碼進(jìn)行性能測(cè)試詳解

    在開(kāi)發(fā)中我們要想編寫(xiě)高性能的代碼,或者優(yōu)化代碼的性能時(shí),你首先得知道當(dāng)前代碼的性能,在go中可以使用testing包的benchmark來(lái)做基準(zhǔn)測(cè)試 ,文中有詳細(xì)的代碼示例,感興趣的小伙伴可以參考一下
    2023-04-04
  • Go語(yǔ)言Gin框架實(shí)現(xiàn)HTML頁(yè)面渲染

    Go語(yǔ)言Gin框架實(shí)現(xiàn)HTML頁(yè)面渲染

    Web開(kāi)發(fā)中,我們經(jīng)常要面對(duì)如何將數(shù)據(jù)渲染到前端的問(wèn)題,這就涉及到了模板引擎的知識(shí),Go語(yǔ)言的Gin框架就提供了強(qiáng)大的HTML模板渲染功能,本文就來(lái)為大家介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-01-01
  • Go語(yǔ)言omitempty選項(xiàng)的實(shí)現(xiàn)

    Go語(yǔ)言omitempty選項(xiàng)的實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言omitempty選項(xiàng)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Go語(yǔ)言defer的一些神奇規(guī)則示例詳解

    Go語(yǔ)言defer的一些神奇規(guī)則示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言defer的一些神奇規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Go切片的具體使用

    Go切片的具體使用

    本文主要介紹了Go切片的具體使用,包括聲明切片、初始化切片、切片的切割、切片的添加、切片的刪除、切片的復(fù)制、切片的遍歷、多維切片等,感興趣的可以了解一下
    2023-11-11
  • Golang實(shí)現(xiàn)web文件共享服務(wù)的示例代碼

    Golang實(shí)現(xiàn)web文件共享服務(wù)的示例代碼

    這篇文章主要介紹了Golang實(shí)現(xiàn)web文件共享服務(wù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • gorm 結(jié)構(gòu)體中 binding 和 msg 結(jié)構(gòu)體標(biāo)簽示例詳解

    gorm 結(jié)構(gòu)體中 binding 和 msg 結(jié)構(gòu)體標(biāo)簽示例詳解

    文章介紹了Gin框架中binding和msg結(jié)構(gòu)體標(biāo)簽的使用,包括基本用法、常用驗(yàn)證規(guī)則、自定義驗(yàn)證器、錯(cuò)誤信息自定義、控制器使用示例、組合驗(yàn)證規(guī)則、跨字段驗(yàn)證和初始化驗(yàn)證器等,這些標(biāo)簽主要用于數(shù)據(jù)驗(yàn)證、自定義錯(cuò)誤信息、參數(shù)綁定和表單驗(yàn)證
    2024-11-11
  • golang根據(jù)生日計(jì)算星座和屬相實(shí)例

    golang根據(jù)生日計(jì)算星座和屬相實(shí)例

    這篇文章主要為大家介紹了golang根據(jù)生日計(jì)算星座和屬相的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語(yǔ)言正則表達(dá)式的使用詳解

    Go語(yǔ)言正則表達(dá)式的使用詳解

    正則表達(dá)式是一種進(jìn)行模式匹配和文本操縱的功能強(qiáng)大的工具。這篇文章主要介紹了Go正則表達(dá)式使用,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Mac上Go環(huán)境和VS Code的正確安裝與配置方法

    Mac上Go環(huán)境和VS Code的正確安裝與配置方法

    Go語(yǔ)言是一個(gè)新興的語(yǔ)言。下面介紹一下如何在Mac系統(tǒng)下安裝和使用這個(gè)語(yǔ)言,Go語(yǔ)言提供了mac下安裝包,可直接下載安裝包點(diǎn)擊安裝
    2018-03-03

最新評(píng)論

玛多县| 乌兰浩特市| 黄石市| 莒南县| 嘉鱼县| 湖南省| 大石桥市| 广安市| 大足县| 彭阳县| 定南县| 永吉县| 天门市| 合山市| 金秀| 汉川市| 洱源县| 奇台县| 航空| 富蕴县| 邳州市| 绍兴市| 申扎县| 伽师县| 盐源县| 昭觉县| 东明县| 定远县| 津南区| 麻栗坡县| 新蔡县| 奈曼旗| 新营市| 南丰县| 缙云县| 宣汉县| 繁峙县| 永善县| 肃南| 拜泉县| 龙山县|