天津网站建设揭秘,wordpress 浮动 插件,宁波建网站一站式服务,建筑网建设通平台一、准备工作
需求分析 1)用户注册 2)用户登录 3)显示在线用户列表 4)群聊(广播) 5)点对点聊天 6)离线留言 主界面 首先#xff0c;在项目根目录下初始化mod#xff0c;然后按照如下结构设计目录#xff1a;
海量用户通信系统/
├── go.mod
├── client/
│ ├──…一、准备工作
需求分析 1)用户注册 2)用户登录 3)显示在线用户列表 4)群聊(广播) 5)点对点聊天 6)离线留言 主界面 首先在项目根目录下初始化mod然后按照如下结构设计目录
海量用户通信系统/
├── go.mod
├── client/
│ ├── main.go
│ └── login.go
└── server/
二、main
package mainimport (fmt
)// 定义两个变量一个表示用户id一个表示用户密码
var userID int
var pwd stringfunc main() {//接收用户的选择var key int//判断是否还继续显示菜单var loop truefor loop {fmt.Println(------------------欢迎登录多人聊天系统)fmt.Println(\t\t\t 1 登录聊天室)fmt.Println(\t\t\t 2 注册用户)fmt.Println(\t\t\t 3 退出系统)fmt.Println(\t\t\t 请选择1-3)fmt.Scanln(key)switch key {case 1:fmt.Println(登录聊天室)loop falsecase 2:fmt.Println(注册用户)loop falsecase 3:fmt.Println(退出系统)loop falsedefault:fmt.Println(你的输入有误请重新输入)}}//根据用户输入显示新的提示信息if key 1 {//说明用户要登录fmt.Printf(请输入用户的id号)fmt.Scanf(%d\n, userID)fmt.Printf(请输入用户的密码)fmt.Scanf(%s\n, pwd)//先把登录的函数写到另外一个文件err : login(userID, pwd)if err ! nil {fmt.Println(登录失败)} else {fmt.Println(登录成功)}} else if key 2 {fmt.Println(进行用户注册的逻辑...)}
}
特别注意scanf中要加上换行符否则其余scanf会接收换行符如果用scanln换行符处理更麻烦所以推荐用scanf且加上\n的形式。
三、login
package mainimport (fmt
)func login(userId int, pwd string) error {//下一个就要开始定协议fmt.Printf(userId%d pwd%s\n, userId, pwd)return nil
}
四、测试login
特别注意login和main是同包所以login的函数名开头无需大写main无需导包即可使用但如果不导包编译器是不会编译调用函数所在文件的所以运行main前必须先编译login也可以在client下用“go run .”注意有一个点来编译运行当前目录下所有文件。如果你用的是vscodecode runner且仍想通过运行按钮来执行main那么你需要打开settings打开settings.json找到code-runner.executorMap中的go选项将原来的值“go run”改为“go run ./client”运行server目录的情况同理。 运行结果如下 1 登录聊天室1 登录聊天室 2 注册用户 3 退出系统 请选择1-3
1
登录聊天室
请输入用户的id号111
请输入用户的密码111
userId111 pwd111
登录成功