GO网络编程(三):海量用户通信系统1:登录功能初步

news2024/11/28 10:38:45

一、准备工作

需求分析
1)用户注册
2)用户登录
3)显示在线用户列表
4)群聊(广播)
5)点对点聊天
6)离线留言
主界面
在这里插入图片描述
首先,在项目根目录下初始化mod,然后按照如下结构设计目录:

海量用户通信系统/
├── go.mod
├── client/
│   ├── main.go
│   └── login.go
└── server/

二、main

package main

import (
	"fmt"
)

// 定义两个变量,一个表示用户id,一个表示用户密码
var userID int
var pwd 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.Scanln(&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.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 main

import (
	"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 .”(注意有一个点)来编译运行当前目录下所有文件。如果你用的是vscode+code 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
userId=111 pwd=111
登录成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

血液细胞计数与检测(BCCD)数据集教程

BCCD 数据集:血液细胞检测与计数-CSDN博客文章浏览阅读431次,点赞5次,收藏3次。BCCD 数据集:血液细胞检测与计数 BCCD_Dataset BCCD (Blood Cell Count and Detection) Dataset is a small-scale dataset for blood cells detecti…

U盘格式化别担心,数据恢复神器来了!

一、恢复数据的紧迫性和希望 别担心,小编我有幸深陷U盘数据丢失的境地,因此通过不懈的努力与反复试验,今日在此为广大读者分享一次趟雷后恢复数据工具的真实体验;当U盘格式化后,你可能会面临数据的丢失,但…

超简单 Flux 换背景工作流:结合最新 ControlNet 深度 Depth 模型

在本篇文章中,我们将深入探讨如何使用 Flux ControlNet Depth 模型进行换背景。这种方法是我之前基于 Flux 模型换背景工作流的简化版。虽然旧的工作流程功能强大,但它非常复杂且运行缓慢。今天,我们将学习一个更快速、更易用的替代方案。 F…

变电站红外检测数据集 1180张 变电站红外 标注voc yolo 13类

变电站红外检测数据集 1180张 变电站红外 标注voc yolo 13类 变电站红外检测数据集 名称 变电站红外检测数据集 (Substation Infrared Detection Dataset) 规模 图像数量:1185张图像。类别:13种设备类型。标注个数:2813个标注。 数据划分…

【全球顶级域名后缀】

数据时间: 2024.10.6 广告: 五分钟申请SSL证书 (手机电脑都能用) ["aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","ac"…

一项研究表明,只需一滴干血,新的检测技术或许可以在几分钟内发现癌症

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

视频加字幕用什么软件最快?12款工具快速添加字幕!

对于大多数同学来讲,剪辑中比较头疼的就是如何给视频加字幕和唱词啦,特别是用Pr或者FCXP等专业剪辑软件,加字幕也是特别费时的,哪怕是有批量添加的功能orz... 虽然关于这方面的内容已经很多啦,但是真正全面的内容还特…

unity 2d 近战攻击判定的三种方式以及精确获取碰撞点

精确获取碰撞点 核心是获取武器碰撞盒最顶点&#xff0c;然后获取敌人碰撞盒距离该点最近的点 /// <summary>/// 获取获取武器前端位置 碰撞盒最左或最右顶点/// </summary>/// <param name"collider"></param>/// <param name"…

如何把数组作为参数传递给函数(注意,只是传递数组名)?

直接上代码吧&#xff1a; template<class T, size_t nSize> void printArray(T(&Array)[nSize]) {T* pt Array;for (size_t n 0; n < nSize; n) {cout << *(pt n) << "\t";}cout << "\n"; } int main() {int ia[] {…

6款不错的本地大模型运行工具推荐

运行大型语言模型 (LLM)&#xff08;如 ChatGPT 和 Claude&#xff09;通常涉及将数据发送到 OpenAI 和其他 AI 模型提供商管理的服务器。虽然这些服务是安全的&#xff0c;但一些企业更愿意将数据完全离线&#xff0c;以保护更大的隐私。 本文介绍了开发人员可以用来在本地运…

基于Vue.js + 大屏Datav + Spring Boot后端的养殖场环境设备实时监测控制系统

开发一个基于Vue.js 大屏Datav Spring Boot后端的养殖场环境设备实时监测控制系统是一个复杂而全面的任务。下面将详细介绍整个项目的架构设计、技术选型、开发实现和测试部署过程。 1. 需求分析 1.1 功能需求 环境参数监控&#xff1a;实时监控温度、湿度、光照强…

C/C++/EasyX——入门图形编程(5)

【说明】友友们好&#xff0c;今天来讲一下键盘消息函数。&#xff08;其实这个本来准备和鼠标消息函数放在一起的&#xff0c;但是上一篇三个放在一起&#xff0c;内容就有点多了&#xff0c;只写一个又太单调了&#xff0c;所以键盘消息函数的内容就放在这一篇了 (^&#xff…

大语言模型中文本分割策略的综合指南

整理 本文整理了一些简单的文本切分方式&#xff0c;适用于大语言模型经典应用RAG或相似场景。 一般切分 如果不借助任何包&#xff0c;很容易想到如下切分方案&#xff1a; text "我是一个名为 ChatGLM3-6B 的人工智能助手&#xff0c;是基于清华大学 KEG 实验室和智…

模型 SECI(知识的创造)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。知识创造的螺旋转化模型。 1 SECI的应用 1.1 Tech Innovations移动应用创新 Tech Innovations是一家软件开发公司&#xff0c;致力于开发创新的移动应用程序。为了提升团队的知识共享和创新能力&…

力扣6~10题

题6&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 这个相较于前面只能是简单&#xff0c;个人认为&#xff0c;会print打印菱形都能搞这个&#xff0c;直接设置一个2阶数组就好了&#xff0c;只要注意位置变化就好了 python代码&#xff1a; def convert(self,…

感知机及其实践

说明 感知机是SVM(support vector machine,支持向量机)的基础&#xff0c;更是机器学习的基础。本文的目的在于把感知机的相关概念捋清楚&#xff0c;并基于感知机做最基本的线性可分的二分类实践。 有关机器学习的一些基础概念&#xff0c;读者可以参考本专栏的第一篇博文[4]&…

Oracle创建用户报错-ORA-65096: invalid common user or role name

问题描述 ORA-65096: invalid common user or role name 原因分析 这可能是创建角色的容器为cdb导致&#xff0c;当然如果想继续执行&#xff0c;可以在角色名前加C##或者c##&#xff0c;但是这样会导致用户名多了c##&#xff0c;我们不要这样的用户名 解决步骤 用sysdba 登录&…

SCUC博客摘录「 储能参与电能市场联合出清:SCUC和SCED模型应用于辅助服务调频市场(IEEE39节点系统)」2024年10月6日

2.1 SCUC模型在本方法中&#xff0c;首先利用SCUC模型确定机组出力计划和储能充放电计划。SCUC模型是电力系统经济调度的重要工具&#xff0c;通过优化发电机组出力计划和调度&#xff0c;实现电力系统的经济性和可靠性。在考虑储能的情况下&#xff0c;SCUC模型需要考虑储能的…

vue3常用组件通信方法

title: vue3常用组件通信方法 date: 2024-10-06 15:00:54 tags: vue3 组件通信 一、父传子—defineProps 1.父亲 通过属性传值 2.儿子 通过defineProps接收相关的数据 二、子传父 1&#xff09;使用defineExposeref 1.子组件 在子组件中使用defineExpose先暴露出来 2.父…

基础算法之滑动窗口--Java实现(上)--LeetCode题解:长度最小的子数组-无重复字符的子串-最大连续1的个数III-将x减到0的最小操作数

这里是Thembefue 今天讲解算法中较为经典的一个算法 > 滑动窗口 本讲解主要通过题目来讲解以理解算法 讲解分为三部分&#xff1a;题目解析 > 算法讲解 > 编写代码 滑动窗口 在正式进入题目的讲解之前&#xff0c;得先了解一下什么是滑动窗口&#xff0c;以及应该在什…