用Go语言实现一个简单的聊天机器人

一、介绍

目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识。

软件环境:Go1.9,Goland 2018.1.5。

二、回顾

Go语言基本构成要素:标识符、关键字、字面量、分隔符、操作符。它们可以组成各种表达式和语句,而后者都无需以分号结尾。

  • 标识符:程序实体,前者即为后者的名称。
  • 关键字:被编程语言保留的字符序列,不能把它用作标识符。
  • 字面量:值的一种标记法。
  • 操作符==运算符:用于执行特定算术或逻辑操作的符号,操作的对象称为操作数。

数组:由若干相同类型的元素组成的序列。

切片(slice):可以看作是一种对数组的包装形式,它包装的数组称为该切片的底层数组。

函数和方法:一个函数的声明通常包括关键字func、函数名、分别由圆括号包裹的参数列表和结果列表,以及由花括号包裹的函数体。

func divide(dividend int,divisor ,int)(int,error){
    
}
//函数可以没有参数列表,也可以没有结果列表,但空参数列表必须保留括号,而空结果列表则不用
func printTab(){
    //
}

三、程序(初版本)

代码仓库链接:https://github.com/OctopusLian/ChatRobot

package main

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

func main() {
    inputReader := bufio.NewReader(os.Stdin)  //准备从标准输入读取数据
    fmt.Println("Please input your name:")
    input,err := inputReader.ReadString('\n')  //读取数据直到碰到 \n为止
    if err != nil{
        fmt.Printf("An error occurred:%s")
        os.Exit(1)  //异常退出
    }else {
        //用切片操作删除最后的 \n
        name := input[:len(input)-1]
        fmt.Printf("Hello,%s! What can I do for you?\n",name)
    }
    for{
        input,err = inputReader.ReadString('\n')
        if err != nil{
            fmt.Printf("An error occurred:%s\n",err)
            continue
        }
        input = input[:len(input)-1]
        //全部转换为小写
        input = strings.ToLower(input)
        switch input {
        case "":
            continue
        case "nothing","bye":
            fmt.Println("Bye!")
        //正常退出
        os.Exit(0)
        default:
            fmt.Println("Sorry,I didn't catch you.")
        }
    }
}

参考资料

bufio

os

strings

fmt

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang语言社区--Go语言基础第四节类型

大家好,我是Golang语言社区主编彬哥,这节给大家讲解Go语言中的类型。

45350
来自专栏C/C++基础

C++编码格式建议

每个人都可能有自己的代码风格和格式,但如果一个项目中的所有人都遵循同一风格的话,这个项目就能更顺利地进行。每个人未必能同意下述的每一处格式规则,而且其中的不少规...

13120
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb03-轻松理解JS(Java真正的全栈开发)

? 一.js常用对象 ljs中的常见对象有以下几个: Boolean Number String Array 数组 Date 日期 Math 数学 RegEx...

296120
来自专栏Golang语言社区

厚土Go学习笔记 | 18. 数组

数组由一组数据类型相同的值组成。 定义一个整数数组 var a [10]int 这个数组由10个整数组成的。 数组的长度是其类型的一部分,因此数组不能改变大小。...

34950
来自专栏转载gongluck的CSDN博客

结构体字节对齐

      在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量...

40950
来自专栏mathor

第五届蓝桥杯决赛B组C/C++——Log大侠

15660
来自专栏Python

Python内置函数property()使用实例

class Shuxing(): def __init__(self, size = 10): self.size = size ...

227100
来自专栏技术之路

golang 详解defer

什么是defer defer用来声明一个延迟函数,把这个函数放入到一个栈上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是运行到最外...

28570
来自专栏Coding+

JS 中的一些概念问题

在 JS 中,每个对象都会在内部引用一个叫做prototype的对象,而这个原型对象本身也会引用自己的原型对象,并以此类推。这样就形成了一条原型引用链,这个链的...

10930
来自专栏函数式编程语言及工具

Scalaz(2)- 基础篇:随意多态-typeclass, ad-hoc polymorphism

  scalaz功能基本上由以下三部分组成: 1、新的数据类型,如:Validation, NonEmptyList ... 2、标准scala类型的延伸类型,...

24070

扫码关注云+社区

领取腾讯云代金券