服务计算-CLI 命令行实用程序开发实战 - Agenda

CLI 命令行实用程序开发实战 - Agenda

    • 概述
    • 1.任务目标
      • golang知识整理
      • 安装 cobra
      • Cobra 的简单使用
    • 2.agenda 开发项目
      • 需求描述
      • Agenda 业务需求
      • 命令与参数设计
      • 测试用例

概述

命令行实用程序并不是都象 cat、more、grep 是简单命令。go项目管理程序,类似 java 项目管理 maven、Nodejs 项目管理程序 npm、git 命令行客户端、 docker 与 kubernetes 容器管理工具等等都是采用了较复杂的命令行。即一个实用程序同时支持多个子命令,每个子命令有各自独立的参数,命令之间可能存在共享的代码或逻辑,同时随着产品的发展,这些命令可能发生功能变化、添加新命令等。因此,符合 OCP原则 的设计是至关重要的编程需求。

1.任务目标

1.熟悉 go 命令行工具管理项目
2.综合使用 go 的函数、数据结构与接口,编写一个简单命令行应用 agenda
3.使用面向对象的思想设计程序,使得程序具有良好的结构命令,并能方便修改、扩展新的命令,不会影响其他命令的代码
4.项目部署在 Github 上,合适多人协作,特别是代码归并
5.支持日志(原则上不使用debug调试程序)


golang知识整理

  • 《Go程序设计语言》要点总结——程序结构
  • 《Go程序设计语言》要点总结——数据类型
  • 《Go程序设计语言》要点总结——函数
  • 《Go程序设计语言》要点总结——方法
  • 《Go程序设计语言》要点总结——接口

安装 cobra

使用命令 go get -v github.com/spf13/cobra/cobra 下载过程中,会出提示如下错误

Fetching https://golang.org/x/sys/unix?go-get=1

https fetch failed: Get https://golang.org/x/sys/unix?go-get=1: dial tcp 216.239.37.1:443: i/o timeout

这是熟悉的错误,请在 $GOPATH/src/golang.org/x 目录下用 git clone 下载 systext 项目,然后使用 go install github.com/spf13/cobra/cobra, 安装后在 $GOBIN 下出现了 cobra 可执行程序。
服务计算-CLI 命令行实用程序开发实战 - Agenda_第1张图片

Cobra 的简单使用

创建一个处理命令 agenda register -uTestUseragenda register --user=TestUser 的小程序。

简要步骤如下:

cobra init
cobra add register

需要的文件就产生了。 你需要阅读 main.gomain() ; root.goExecute(); 最后修改 register.go, init() 添加:

registerCmd.Flags().StringP(“user”, “u”, “Anonymous”, “Help message for username”)

Run 匿名回调函数中添加:

username, _ := cmd.Flags().GetString(“user”)

fmt.Println("register called by " + username)

测试命令:

$ go run main.go register --user=TestUser

register called by TestUser

服务计算-CLI 命令行实用程序开发实战 - Agenda_第2张图片在这里插入图片描述


2.agenda 开发项目

需求描述

  • 业务需求:见后面需求

  • 功能需求: 设计一组命令完成 agenda 的管理,例如:

agenda help :列出命令说明
agenda register -uUserName --password pass [email protected] :注册用户
agenda help register :列出 register 命令的描述
agenda cm … : 创建一个会议
原则上一个命令对应一个业务功能

  • 持久化要求:

使用 json 存储 User 和 Meeting 实体
当前用户信息存储在 curUser.txt 中

  • 项目目录

cmd :存放命令实现代码
entity :存放 User 和 Meeting 对象读写与处理逻辑

  • 其他目录 : 自由添加
  • 日志服务

使用 log 包记录命令执行情况


Agenda 业务需求

本次实验完成了以下需求:

  • 用户注册
    注册新用户时,用户需设置一个唯一的用户名和一个密码。另外,还需登记邮箱及电话信息。
    如果注册时提供的用户名已由其他用户使用,应反馈一个适当的出错信息;成功注册后,亦应反馈一个成功注册的信息。

  • 用户登录
    用户使用用户名和密码登录 Agenda 系统。
    用户名和密码同时正确则登录成功并反馈一个成功登录的信息。否则,登录失败并反馈一个失败登录的信息。

  • 用户登出
    已登录的用户登出系统后,只能使用用户注册和用户登录功能。

命令与参数设计

  • register 用户注册
$ register -n [username] -p [password] -e [email] -t [phone]
  • login 用户登录
$ login -n  [username] -p [password]
  • logout 用户登出
$ logout(无参数)

测试用例

1.登录,不存在用户提示注册,注册之后在./entity/data/curUser.txt会出现当前用户
服务计算-CLI 命令行实用程序开发实战 - Agenda_第3张图片

2.注册成功,用户信息存在./entity/data/User.txt

服务计算-CLI 命令行实用程序开发实战 - Agenda_第4张图片

3.登录其他账户时curUser.txt相应更新
服务计算-CLI 命令行实用程序开发实战 - Agenda_第5张图片

4.一些错误提示:(举例)

  • 登录时密码错误:
    在这里插入图片描述

  • 命令格式输入错误:
    服务计算-CLI 命令行实用程序开发实战 - Agenda_第6张图片


你可能感兴趣的:(服务计算作业)