海量用户通讯系统-完成界面|学习笔记

简介: 快速学习海量用户通讯系统-完成界面

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:海量用户通讯系统-完成界面】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/626/detail/9797


海量用户通讯系统-完成界面

 

内容介绍

一、实现功能-显示客户端登录菜单

二、总结

 

一、实现功能-显示客户端登录菜单

在涉及到注册与留言时,项目要保存用户信息和消息数据,因此我们需要学习数据库(Redis或Mysql),这里选择 Redis,所以先讲解如何在 Golang 中使用 Redis。

其中有两级菜单,首先在登录成功之后会看到第二层菜单。

(1)功能:能够正确地显示客户端的菜单。

(2)界面:

image.png此时可以选择登录聊天系统、注册用户以及退出系统。当用户登录聊天系统成功后,则会显示界面如下:

1. 显示在线用户列表

2. 发送信息

3. 消息列表

4. 退出系统

在此要完成消息协议,消息协议的定夺极为重要。

(3)思路分析:思路分析很简单,直接进行书写就可以。

(4)代码实现

1.新建文件夹为 chatroom,在其中再建子文件夹代表客户端client与服务器端server。客户端中新建 main.go 文件,在登陆后要进行调用函数,写入 login.go 文件。写入如下:

package main

import (

"fmt"

)

//定义两个变量,一个表示用户id,一个表示用户密码

var userId int

var userPwd string

func main() {

//接收用户的选择

var key int

//判断是否还继续显示菜单

var loop = true

for 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.Scanf("%d\n”,&key)

switch key {

case 1:

fmt.Println("登陆聊天室")

loop = false

case 2 :

fmt.Println("注册用户")

loop = false

case 3:

fmt.Println("退出系统")

loop = false

default:

fmt.Println(‘’你的输入有误,请重新输入‘’)

}

}

//更加用户的输入,显示新的提示信息

If key = = 1 {

//说明用户要登陆

fmt.Println(“请输入用户的id”)

fmt.Scanf(“%d/n”,&userId)

fmt.Println(“请输入用户的密码“)

fmt.Scanf(“%s/n”,&userPwd)

//先把登陆的函数,写到另一个文件,比如login.go

err := login(userId,userPwd)

if err != nil {

fmt.Println(“登录失败“)

} else {

fmt.Println(“登录成功“)

}

} else if key == 2 {

fmt.Println(“进行用户注册的逻辑…“)

}

}

完成后进行运行,先进到client,结果报错如下:

image.png

此时login没有被定义,原因为在主包时要完成编译时要退到src中进行操作。解决办法为进行几次退后推到go build go_code/chatroom/client,编译后会得到main.exe,此时再编译时会默认生成main.exe,要指定名字,客户端生成的则是client.exe,服务器端生成的则是server.exe。而退出系统也可以写入os.Exit()来进行,但要将“os“先写入。如果不带\n,没有换行,则会被认为回车则是要输出的东西。

2.login.go文件展示如下:

package main

import(

"fmt"

)

//写一个函数,完成登录

func login(userId int, userPwd string) (err error) {

//下一个就要开始定协议..

fmt.Println(" userId = %d userPwd=%s\n",userId, userPwd)

return nil //表示暂时没有错误

}

3.注意事项

用整数不用字符串是因为如果使用字符串回车后则会全部被去除。

根据 loop 来判断是否显示菜单。

所有的流程全都要自定义。

登录会很复杂,要输入用户名和密码再进行校验,校验完成后进行回复,此时要设计一个 message 协议。

以 error 的形式返回比以真假的形式返回更有说服力,error 可以返回各种错误。

两个都在主包里,在同一个包下面可以直接使用函数。

三、总结

1. client/main.go:

package main

import (

"fmt"

)

//定义两个变量,一个表示用户id,一个表示用户密码

var userId int

var userPwd string

func main() {

//接收用户的选择

var key int

//判断是否还继续显示菜单

var loop = true

for 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.Scanf("%d\n”,&key)

switch key {

case 1:

fmt.Println("登陆聊天室")

loop = false

case 2 :

fmt.Println("注册用户")

loop = false

case 3:

fmt.Println("退出系统")

loop = false

default:

fmt.Println(‘’你的输入有误,请重新输入‘’)

}

}

//更加用户的输入,显示新的提示信息

If key = = 1 {

//说明用户要登陆

fmt.Println(“请输入用户的id”)

fmt.Scanf(“%d/n”,&userId)

fmt.Println(“请输入用户的密码“)

fmt.Scanf(“%s/n”,&userPwd)

//先把登陆的函数,写到另一个文件,比如login.go

err := login(userId,userPwd)

if err != nil {

fmt.Println(“登录失败“)

} else {

fmt.Println(“登录成功“)

}

} else if key == 2 {

fmt.Println(“进行用户注册的逻辑…“)

}

}

2. client/login.go:

package main

import(

"fmt"

)

//写一个函数,完成登录

func login(userId int, userPwd string) (err error) {

//下一个就要开始定协议..

fmt.Println(" userId = %d userPwd=%s\n",userId, userPwd)

return nil //表示暂时没有错误

}

相关文章
|
消息中间件 监控 NoSQL
一个支持消息推送,文件管理,在线用户监控的后台权限管理系统来了
一个支持消息推送,文件管理,在线用户监控的后台权限管理系统来了
100 0
|
网络协议 前端开发 测试技术
海量用户通讯系统——服务端结构改进1|学习笔记
快速学习海量用户通讯系统——服务端结构改进1
91 0
海量用户通讯系统——服务端结构改进1|学习笔记
|
JSON 网络协议 测试技术
海量用户通讯系统-项目小结|学习笔记
快速学习海量用户通讯系统-项目小结
106 0
海量用户通讯系统-项目小结|学习笔记
|
网络协议 测试技术 Go
海量用户通讯系统-显示在线用户列表(1)|学习笔记
快速学习海量用户通讯系统-显示在线用户列表(1)
154 0
海量用户通讯系统-显示在线用户列表(1)|学习笔记
|
网络协议 测试技术 Go
海量用户通讯系统——客户端结构改进1|学习笔记
快速学习海量用户通讯系统——客户端结构改进1
85 0
海量用户通讯系统——客户端结构改进1|学习笔记
|
缓存 JSON 网络协议
海量用户系统-客户端结构改进2|学习笔记
快速学习海量用户系统-客户端结构改进2
90 0
海量用户系统-客户端结构改进2|学习笔记
|
NoSQL 网络协议 Oracle
海量用户即时通讯系统需求|学习笔记
快速学习海量用户即时通讯系统需求
101 0
海量用户即时通讯系统需求|学习笔记
|
JSON 网络协议 测试技术
海量用户通讯系统-登录(指定用户)|学习笔记
快速学习海量用户通讯系统-登录(指定用户)
78 0
|
NoSQL 网络协议 测试技术
海量用户通讯系统-用户登录(2)|学习笔记
快速学习海量用户通讯系统-用户登录(2)
67 0
|
JSON NoSQL 网络协议
海量用户通讯系统-用户登录(1)|学习笔记
快速学习海量用户通讯系统-用户登录(1)
274 0