範例:聊天機器人

2020-07-16 10:05:11
結合咱們之前的學習,本節帶領大家來編寫一個聊天機器人的雛形,下面的程式碼中展示了一個簡單的聊天程式。
package main

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

func main() {
    // 準備從標準輸入讀取資料。
    inputReader := bufio.NewReader(os.Stdin)
    fmt.Println("Please input your name:")
    // 讀取資料直到碰到 n 為止。
    input, err := inputReader.ReadString('n')
    if err != nil {
        fmt.Printf("An error occurred: %sn", err)
        // 異常退出。
        os.Exit(1)
    } else {
        // 用切片操作刪除最後的 n 。
        name := input[:len(input)-2]
        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: %sn", err)
            continue
        }
        input = input[:len(input)-2]
        // 全部轉換為小寫。
        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.")
        }
    }
}
這個聊天程式在問候使用者之後會不斷地詢問“是否可以幫忙”,但是實際上它什麼忙也幫不上,因為它現在什麼也聽不懂,除了 nothing 和 bye,一看到這兩個詞,它就會與使用者“道別”,停止執行,現在試執行一下這個命令原始碼檔案:

D:code>go run test.go
Please input your name:
->Robert
Hello, Robert! What can I do for you?
->A piece of cake, please.
Sorry, I didn't catch you.
->Bye
Bye!

注意,其中的“->”符號之後的內容是我們輸入的。