美文网首页
使用go实现类似微软小冰的程序

使用go实现类似微软小冰的程序

作者: FredricZhu | 来源:发表于2020-05-01 14:43 被阅读0次

程序效果


image.png

程序代码:
utils.go

package utils

import (
    "encoding/csv"
    "fmt"
    "io"
    "os"
)

type csvReader struct {
    FileName string
}

func NewCSVReader(fileName string) *csvReader {
    reader := new(csvReader)
    reader.FileName = fileName
    return reader
}

func (cReader *csvReader) Read() [][]string {
    file, err := os.Open(cReader.FileName)
    if err != nil {
        fmt.Println("Error:", err)
        return nil
    }
    defer file.Close()
    reader := csv.NewReader(file)

    res := make([][]string, 0)

    for {
        record, err := reader.Read()
        if err == io.EOF {
            break
        } else if err != nil {
            fmt.Println("Error:", err)
            return nil
        }
        res = append(res, record)
    }
    return res
}

type xiaoBin struct {
}

func NewXiaoBin() *xiaoBin {
    x := new(xiaoBin)
    return x
}

func (x *xiaoBin) MakeAnswers(strs [][]string) map[string]string {
    res := make(map[string]string)
    for _, line := range strs {
        res[line[0]] = line[1]
    }
    return res
}

server.go

package main

import (
    "fmt"
    "golearn/tcpdemo2/server/utils"
    "net"
    "strings"
)

func Handle(conn net.Conn) {
    for {
        buf := make([]byte, 1024)
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Printf("客户端关闭连接, %v!!\n", err)
            return
        }
        strRecv := string(buf[:n])
        // 本身带换行,不用加换行
        fmt.Print(strRecv)
        question := strings.Trim(strRecv, " \r\n")

        // 加载CSV Answers
        csvReader := utils.NewCSVReader("D:/csv/微软小冰.csv")
        content := csvReader.Read()
        xiaoBin := utils.NewXiaoBin()
        answers := xiaoBin.MakeAnswers(content)

        if answer, ok := answers[question]; !ok {
            conn.Write([]byte("你说啥"))
        } else {
            conn.Write([]byte(answer))
        }
    }
}

func main() {
    listen, err := net.Listen("tcp", "0.0.0.0:8888")
    if err != nil {
        fmt.Printf("创建TCP监听失败, %v!!\n", err)
        return
    }

    defer listen.Close()

    for {
        conn, err := listen.Accept()
        if err != nil {
            fmt.Printf("接收客户端连接失败, %v!!\n", err)
        }
        go Handle(conn)
    }
}

client.go

package main

import (
    "bufio"
    "fmt"
    "net"
    "os"
    "strings"
)

func main() {
    conn, err := net.Dial("tcp", "192.168.3.6:8888")
    if err != nil {
        fmt.Printf("连接到服务器失败%v!!\n", err)
        return
    }

    defer conn.Close()

    for {
        reader := bufio.NewReader(os.Stdin)
        line, err := reader.ReadString('\n')
        if err != nil {
            fmt.Printf("从终端读取数据失败 %v!!\n", err)
            return
        }

        line = strings.Trim(line, " \r\n")
        if line == "exit" {
            fmt.Println("您已确定退出客户端程序\n")
            return
        }

        _, err = conn.Write([]byte(line + "\n"))
        if err != nil {
            fmt.Printf("向服务端写入数据失败%v!!\n", err)
        }

        answer := make([]byte, 1024)
        n, err := conn.Read(answer)
        if err != nil {
            fmt.Printf("服务端关闭 %v!!\n", err)
            return
        }
        fmt.Println(string(answer[:n]))
    }
}

相关文章

  • 使用go实现类似微软小冰的程序

    程序效果 程序代码:utils.go server.go client.go

  • 微软小冰主持人小程序体验

    微软小冰是微软的人工智能产品,我们可以在QQ群里面看到小冰,可以直接@小冰和小冰直接对话;在小程序里面也有微软小冰...

  • 小爱同学“召唤”微软小冰,成为“好闺蜜”

    小米IoT开发者大会上,小米宣布,小爱同学已与微软小冰实现互连,可对微软小冰进行唤醒。小米表示,小爱同学是小米AI...

  • 以产品角度分析微软小冰的未来

    一、微软小冰的未来 二、使用场景 三、盈利模式 1 什么是微软小冰 分析产品性质 用户群体划分 用户群体的需求(使...

  • Go | 函数(包)的使用

    本文通过一个实现加减乘除运算的小程序来介绍go函数的使用,以及使用函数的注意事项,并引出了对包的了解和使用。 实现...

  • 微信小程序概念

    一、什么是小程序 小程序就是类似之前的服务号,公众号的存在。 “小程序是一种不需要下载安装即可使用的应用,它实现了...

  • 微软小冰

    杨澜说,微软有位人工智能机器人叫微软小冰,在微信里已经拥有了一亿用户。居然已经有了这样的高科技我居然不知道,于是我...

  • [诗] 差遣小冰

    差遣小冰 小冰是微软的AI写诗程序,喂料一张图就可以代笔写诗。我们被大数据吃得死死的,那么让小冰担当写诗的奴仆也算...

  • 微信企业号_智能机器人_python3

    前提,不使用网络上提供的第三方机器人接口(类似微软小冰、图灵机器人),而是部署自己训练的智能机器人。 TODO 部...

  • 少女诗人小冰杀到,10秒一首诗

    首先说明,这里的少女诗人小冰并不是真正的人类,而是微软人工智能程序小冰。或许你在语音助理中已经与小冰有过接触,也许...

网友评论

      本文标题:使用go实现类似微软小冰的程序

      本文链接:https://www.haomeiwen.com/subject/pmhqghtx.html