3.29 Go 随意问候语模块|Go主题月

239 阅读2分钟

  之前章节中有介绍到模块之前调用返回问候语句,两个模块之间进行调用,返回我们基础的问候语句,这里只是说简单的返回我们固定好的语句,这一章节简单的介绍如何随机返回我们的问候语句。

  想要做到随机问候语返回,我们需要首先了解到Go slice,它就像一个数组。只是它的大小会随着添加和删除项而动态改变,slice可以说是Go中最有用的类型之一。

代码编写

  接下来我们就需要编写代码。

  1. 修改greetings代码

    package greetings
    
     import (
         "errors"
         "fmt"
         "math/rand"
         "time"
     )
    
     func Hello(name string) (string, error) {
         if name == "" {
             return name, errors.New("empty name")
         }
         message := fmt.Sprintf(randomFormat(), name)
         return message, nil
     }
    
     func init() {
         rand.Seed(time.Now().UnixNano())
     }
    
    
     func randomFormat() string {
         formats := []string{
             "Hi, %v. Welcome!",
             "Great to see you, %v!",
             "Hail, %v! Well met!",
         }
    
         return formats[rand.Intn(len(formats))]
     }
    

    以上代码主要做了以下方面的修改:

    1. 添加一个randomFormat函数,它返回一个随机选择的欢迎消息格式。注意,randomFormat以小写字母开始,这使得它只能被自己包中的代码访问(换句话说,它不被外部引用)。
    2. randomFormat中,声明一个带有三种消息格式的格式数组。当声明一个文案时,在括号中忽略它的大小,就像这样:这告诉Go slice底层数组的大小可以动态更改。
    3. 使用math/rand包生成从slice中选择一个字符串的随机数。
    4. 添加一个init函数来为rand包播下当前时间的种子。Go在程序启动时,全局变量初始化后自动执行init函数。有关init函数的更多信息,请参见Effective Go
    5. Hello中,调用randomFormat函数获得您将返回的消息的格式,然后一起使用格式和名称值来创建消息。
    6. 像之前一样返回消息(或错误)。
  2. 修改hello代码

    package main
    
     import (
         "fmt"
         "log"
         "montos.com/greetings"
     )
    
     func main() {
         log.SetPrefix("greetings: ")
         log.SetFlags(0)
    
         message, err := greetings.Hello("Gladys")
         if err != nil {
             log.Fatal(err)
         }
    
         fmt.Println(message)
     }
    
  3. 接下来就可以运行我们的代码了:

    [root@montos-prod hello]# go run .
     Hail, Gladys! Well met!
     [root@montos-prod hello]# go run .
     Great to see you, Gladys!
     [root@montos-prod hello]# go run .
     Great to see you, Gladys!
     [root@montos-prod hello]# go run .
     Hi, Gladys. Welcome!
     [root@montos-prod hello]# go run .
     Great to see you, Gladys!
    

总结

   上述就已经完成了随机问候语的产生,主要是利用了slice类型数据结构,同时还加入了一个随机的函数进行选择文案信息。