首页 > 其他分享 >DevOpsCamp 第三期(202302-b) 作业发布

DevOpsCamp 第三期(202302-b) 作业发布

时间:2023-03-14 11:34:01浏览次数:55  
标签:context string -- 202302 Go DevOpsCamp Context interface 第三期

DevOpsCamp 第三期(202302-b) 作业发布

本来这期想直接开始写 dnscli 命令行工具的, 但是在准备的时候发现, 还是把 interface 和 Context 说一下会比较好。

另外, 最近比较忙, 所以这期内容发布时间晚了接近一周。

作业地址还是在 Github: https://github.com/devops-camp/semi-plan-homework

如果你愿意分享自己的学习经历, 可以参考这篇文章操作 DevOpsCamp 主站改版及作业仓库变更通知(20230207)

1. Cobra08 - 使用第三方库 cobrautils 快速管理参数

提示

cobrautils 是我写的一个 cobra 扩展库, 目的是为了能在 结构体方便 的管理所有 flag 和默认值。

之前我们绑定参数时, 有多少参数就要写多少个 flag, 非常的麻烦。

type Person struct {
    Name string
    Age int
}

var p=&Person{}

func init(){
    root.Flags.StringVarP(&p.Name, "name","n","zhangsan","user name")
    root.Flags.IntVarP(&p.Int, "age","a",20,"user age")
}

但是用了 cobrautils 后, 所有的定义都在 结构体的标签中, 就如同 YAMLJSON 管理参数。

作业要求

访问 https://github.com/go-jarvis/cobrautils , 阅读 README.md

实现以下效果。

go run .
student info

Usage:
  student [flags]

Flags:
      --addr.home string       home address (default "Sichuan,China")
      --addr.school string     school address
  -a, --age int                student age
      --contcat.email string   email address
      --contcat.phone string   phone number (default "138-8888-8888")
      --gender                 
  -h, --help                   help for student
      --name string            student name (default "zhangsan")

2. Golang 接口(interface) 简介和入门使用

提示

上下文 Context 应该是 Go语言 中一个极其重要的 基石 概念了。

这里有一篇 Go 语言设计与实现 - 接口 interface , 是目前我学习的资料中 完成度友善度 都很高的一篇文章。

go v1.18 中, interface 有了一个别名 any。 所以在说 interface 和 any 的时候, 其实说的是相同的东西。

interface 的使用场景到处都是。 还记得我们之前说的 JSONYAML 的配置文件处理吗?

// json.Marshal
func Marshal(v any) ([]byte, error) {
// ....
}

看完文章, 你至少应该知道

  1. 什么是 鸭式对象
  2. 怎么使用 接口断言

作业

人和大熊猫都是哺乳动物

  1. 他们都会 吃 (Eat) 吃东西, 区别是 人吃饭, 熊猫吃竹子
  2. 更大的不同是, 人会 读书 (Read), 熊猫不会。
func Eating(v any){
    v.Eat() // output: ???
}

func WhoAreYou(v any){
    // ???? 
}

3. Golang Context 简介和入门使用

提示

上下文 Context 应该是 Go语言 中一个极其重要的 基石 概念了。

这里有一篇 Go 语言设计与实现 - 上下文 Context , 是目前我学习的资料中 完成度友善度 都很高的一篇文章。

不管你愿不愿意, 用 Go 都绕不过 Context。不管用不用, 在所有 公共方法或函数 中强迫自己自己使用 context 作为入参。 虽然有点武断,但是...(我也没有想到好的理由)

作业

就用 context 实现一个 曹操打新野 的传递游戏吧。

main -> Lubei(ctx context.Context, n int)
     -> Guanyu(ctx context.Context)
     -> Zhangfei(ctx context.Context)
  1. 给刘备传递 任意数字
  2. 刘备拿到数字, 并输出 “曹操来了 n 万人”
  3. 刘备把数字传递给关羽。
  • a. 如果数字为偶数, 直接传递给张飞
  • b. 如果数字为奇数, 数字扩大10倍后传递给张飞。
  • c. 输出 “曹操来了 n 万人”。 (注意 n 的直)
  1. 张飞拿到数字, 直接输入 “曹操来了 n 万人”。

互相吹捧, 共同进步

欢迎和我一起学习进步, 如果有什么问题, 可以给我私信留言。 或者

公众号

标签:context,string,--,202302,Go,DevOpsCamp,Context,interface,第三期
From: https://blog.51cto.com/bashrc/6120137

相关文章