美文网首页
go创建模块(第二部分)

go创建模块(第二部分)

作者: 护念 | 来源:发表于2023-07-06 22:28 被阅读0次

4.返回随机问候语

  1. 修改greetings包
// greetings.go
package greetings

import (
    "errors" // 这是go标准库中包 添加后无需单独运行go mod
    "fmt"
    "math/rand" // 引入go标准包
)

// 定义一个hello函数 供其它包使用
func Hello(name string) (string, error) {
    // 返回多个值
    if name == "" {
        return "", errors.New("empty name")
    }

    // Create a message using a random format.
    message := fmt.Sprintf(randomFormat(), name)
    return message, nil
}

// 这里函数名是小写 因此只能在包自己内部用
func randomFormat() string {
    // 切片
    formats := []string{
        "Hi, %v. Welcome!",
        "Great to see you, %v!",
        "Hail, %v! Well met!",
    }

    // 返回随机问候
    return formats[rand.Intn(len(formats))]
}
  1. 修改hello.go文件
// hello.go
package main

import (
    "fmt"
    "log"  // 本地库包
    "example.com/greetings"// 引入我们本地greetings包
)

func main() {
    // 设置日志前缀 不带时间、文件 行号
    log.SetPrefix("greetings: ")
    log.SetFlags(0)

    // 这里改成一个随机名称
    message, err := greetings.Hello("dmy")
    if err != nil {
        log.Fatal(err) // 日志记录
    }

    // If no error was returned, print the returned message
    // to the console.
    fmt.Println(message)
}
  1. 运行
dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
Hail, dmy! Well met!
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
Hail, dmy! Well met!
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
Great to see you, dmy!

小结:

  • 切片和数组的区别,在于切片声明时候可以省略大小,意味着它底层数组的大小可以动态改变
  • 在一个包内小写函数,代表只能在包自己内部使用

5. 多人问候

之前我们已经写了一个Hello函数支持单人问候,如果要支持多人问候问候需要修改Hello函数参数,为了保证向后兼容性我们单独写一个函数Hellos函数供使用

  1. 修改greetings.go
// greetings.go
package greetings

import (
    "errors" // 这是go标准库中包 添加后无需单独运行go mod
    "fmt"
    "math/rand" // 引入go标准包
)

// 定义一个hello函数 供其它包使用
func Hello(name string) (string, error) {
    // 返回多个值
    if name == "" {
        return "", errors.New("empty name")
    }

    // Create a message using a random format.
    message := fmt.Sprintf(randomFormat(), name)
    return message, nil
}


// 入参为为切片
// 返回映射-类似于ruby中hash
func Hellos(names []string) (map[string]string, error) {
    // 初始化一个map 用于返回
    messages := make(map[string]string)

    // 循环name
    for _, name := range names {
        message, err := Hello(name)

        if err != nil {
            return nil, err
        }

        messages[name] = message
    }

    return messages, nil
}

// 这里函数名是小写 因此只能在包自己内部用
func randomFormat() string {
    // 切片
    formats := []string{
        "Hi, %v. Welcome!",
        "Great to see you, %v!",
        "Hail, %v! Well met!",
    }

    // 返回随机问候
    return formats[rand.Intn(len(formats))]
}
  1. 修改hello.go文件
// hello.go
package main

import (
    "fmt"
    "log"  // 本地库包
    "example.com/greetings"// 引入我们本地greetings包
)

func main() {
    // 设置日志前缀 不带时间、文件 行号
    log.SetPrefix("greetings: ")
    log.SetFlags(0)

    // 生成一个切片名称数组
    names := []string{"张三", "lisi", "wangwu"}

    // 这里返回问候map-映射
    messages, err := greetings.Hellos(names)
    if err != nil {
        log.Fatal(err) // 日志记录
    }

    fmt.Println(messages)
}
  1. 运行
dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
map[lisi:Great to see you, lisi! wangwu:Hi, wangwu. Welcome! 张三:Hi, 张三. Welcome!]
 dongmingyan@pro ⮀ ~/go_playground/hello ⮀ go run .
map[lisi:Hi, lisi. Welcome! wangwu:Great to see you, wangwu! 张三:Hail, 张三! Well met!]

小结:

  • map 映射类似于ruby中hash
  • 映射类型写法 map[key-type]value-type
  • 创建一个映射 make(map[key-type]value-type)
  • 初始化切片 []string{"张三", "lisi", "wangwu"}
  • for 循环_, name := range names写法

相关文章

  • go基础例子

    创建模块 2. 初始化模块 创建接口go 运行 创建第二个模块 添加greetings.go 调用模块, 编辑he...

  • go模块

    创建模块 创建目录:mkdir greetings 进入目录:cd greetings 创建mod依赖:go m...

  • GO Modules 使用

    旧项目迁移,打算使用GO Modules 作为依赖管理。 go版本 1.12 私人依赖包,如何处理 1. 创建模块...

  • beego cache模块源码分析笔记一

    cache模块是beego中的一个独立模块,这个模块的设计方式是经典的工厂模式。 cache.go:抽象接口部分、...

  • Getting started with multi-modul

    这一章介绍Go语言多模块工作空间的基础概念,我们会在共享的多模块工作空间创建两个模块并修改它们,从而在构建程序过程...

  • 1. Magneto 2 模块开发 - 简单的 Hello Wo

    Magento 2 模块开发基础部分 - 目录 本文主要描述如何创建一个最简单的模块。 模块 (Module) 也...

  • 使用 Go Module 构建项目

    生成项目 创建一个目录作为 GO 项目目录。然后进入该目录并初始化项目。 目录下会生成模块配置文件go.mod,其...

  • 【源码剖析】Launcher 8.0 源码 (11) --- L

    这篇依然讲解桌面布局的创建,这一部分依然服务于setupViews,创建每一个UI模块,所有模块都创建完了也就组成...

  • Golang 游戏leaf系列(六) Go模块

    在Golang 游戏leaf系列(一) 概述与示例(下文简称系列一)中,提到过Go模块用于创建能够被 Leaf 管...

  • 从零开始学springboot-maven聚合下的pom依赖关系

    背景 创建多模块项目时,相信有部分同学对父模块个子模块的pom文件产生了疑问,子模块是否能自动继承父模块的依赖。这...

网友评论

      本文标题:go创建模块(第二部分)

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