• 返回随机问候语


    在本节,你又要调整代码了,这将会返回预定义的问候语中的一条,代替原先只能返回固定问候

    为了完成这事儿,你可以尝试用Go 切片,一个切片就相当于数组,不同之处在于添加或删除项目时切片的大小会动态改变.切片是Go语言中特别有用的类型之一

    你将添加一个切片,其中包含三个问候语,然后你编码实现随机返回消息,想要知道更多关于切片的知识,请看看 go 切片

      1.在greetings/greetings.go中,做如下改造

    package greetings
    
    import (
        "errors"
        "fmt"
        "math/rand"
        "time"
    )
    
    // Hello returns a greeting for the named person.
    func Hello(name string) (string, error) {
        // If no name was given, return an error with a message.
        if name == "" {
            return name, errors.New("empty name")
        }
        // Create a message using a random format.
        message := fmt.Sprintf(randomFormat(), name)
        return message, nil
    }
    
    // init sets initial values for variables used in the function.
    func init() {
        rand.Seed(time.Now().UnixNano())
    }
    
    // randomFormat returns one of a set of greeting messages. The returned
    // message is selected at random.
    func randomFormat() string {
        // A slice of message formats.
        formats := []string{
            "Hi, %v. Welcome!",
            "Great to see you, %v!",
            "Hail, %v! Well met!",
        }
    
        // Return a randomly selected message format by specifying
        // a random index for the slice of formats.
        return formats[rand.Intn(len(formats))]
    }

     这片代码中:

    • 添加了 randomFormat函数 用来返回随机选择的问候函数,注意,randomFormat函数是小写字母开头,这表示,这个代码只能被自己包访问(换句话说,他不能被导出).
    • 在random中,声明了包含三个消息格式的 formats切片,在声明切片时,用[]string这样的方法,可以让你省去括号中的大小,这就告诉Go,切片下的数组尺寸是可以动态改变的
    • 使用math/rand包用来产生随机数,这样就能选切片中的项目了
    • init函数内,使用当前时间作为rand包的种子, Go会在程序启动时,自动执行init函数,之后,全局变量会被初始化,有关init函数的细节,请看"Go本质论"
    • hello中,调用random函数就会返回一个消息格式,然后使用格式和name值一起创造消息
    • 返回之前你做的那样的消息

    2.对hello/hello.go中的代码做如下改变
      你只需将gladys的名字作为参数传给hello.go的hello函数即可

    package main
    
    import (
        "fmt"
        "log"
    
        "example.com/greetings"
    )
    
    func main() {
        // Set properties of the predefined Logger, including
        // the log entry prefix and a flag to disable printing
        // the time, source file, and line number.
        log.SetPrefix("greetings: ")
        log.SetFlags(0)
    
        // Request a greeting message.
        message, err := greetings.Hello("Gladys")
        // If an error was returned, print it to the console and
        // exit the program.
        if err != nil {
            log.Fatal(err)
        }
    
        // If no error was returned, print the returned message
        // to the console.
        fmt.Println(message)
    }

    3.在hello路径下,运行hello.go 来确认代码可以执行,运行多次,观察问候语的变化

    $ go run .
    Great to see you, Gladys!
    
    $ go run .
    Hi, Gladys. Welcome!
    
    $ go run .
    Hail, Gladys! Well met!

    接下来,使用切片给多人发送问候

      

  • 相关阅读:
    PO、POJO、BO、DTO、VO区别与总结
    redis缓存策略
    redis key/value 出现乱码\xAC\xED\x00\x05t\x00\x05
    Maven中的GroupID和ArtifactID和name指的是什么?
    为什么不应该加班?
    IDEA 激活
    redis使用规范
    python 练习题 172. 阶乘后的零
    3.28 Niagara ROLLTHE
    3.31 ROLLTHE
  • 原文地址:https://www.cnblogs.com/yaoshi641/p/15239162.html
Copyright © 2020-2023  润新知