GO网络编程(三):海量用户通信系统1:登录功能初步
一、准备工作
需求分析
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 .”(注意有一个点)来编译运行当前目录下所有文件。如果你用的是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
登录成功!
相关文章:

GO网络编程(三):海量用户通信系统1:登录功能初步
一、准备工作 需求分析 1)用户注册 2)用户登录 3)显示在线用户列表 4)群聊(广播) 5)点对点聊天 6)离线留言 主界面 首先,在项目根目录下初始化mod,然后按照如下结构设计目录: 海量用户通信系统/ ├── go.mod ├── client/ │ ├──…...

Windows安全加固详解
一、补丁管理 使用适当的命令或工具,检查系统中是否有未安装的更新补丁。 Systeminfo 尝试手动安装一个系统更新补丁。 • 下载适当的补丁文件。 • 打开命令提示符或PowerShell,并运行 wusa.exe <patch_file_name>.msu。 二、账号管…...

JavaScript函数基础(通俗易懂篇)
10.函数 10.1 函数的基础知识 为什么会有函数? 在写代码的时候,有一些常用的代码需要书写很多次,如果直接复制粘贴的话,会造成大量的代码冗余; 函数可以封装一段重复的javascript代码,它只需要声明一次&a…...
云RDS MySQL迁移至本地MySQL
本地准备工作 1.安装:percona-xtrabackup 上传percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz包到/usr/local tar -zxvf percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz mv percona-xtrabackup-2.3.9-Linux-x86_64 percona-xtrabackup 2.创建数据目录 cd /data/ mkdir rds-mys…...

【C++ 11】nullptr 空指针
文章目录 【 0. 问题背景 】0.1 野指针和悬空指针0.2 传统空指针 NULL0.3 传统空指针的局限性 【 1. 基本用法 】【 2. nullptr 的应用 】2.1 nullptr 解决 NULL 的遗留BUG2.2 简单实例 【 0. 问题背景 】 0.1 野指针和悬空指针 总结 野指针悬空指针产生原因指针变量未被初始…...

Flutter + Three.js (WebView)实现桌面端3d模型展示和交互
文章目录 flutter(桌面端)瓶颈一、Flutterthree.js二、Flutterthree.js 实现思路1.在Flutter 中使用webview 进行嵌套2.开启上面嵌套的页面地址2.在含有three.js 的html 中引入模型3.两个页面之间进行通信,如图: 总结 flutter(桌面端)瓶颈 Flutter 本身…...
学习日志35
拆卸线问题(Disassembly Line Balancing Problem, DLBP)是生产工程和运筹学中的一个特殊问题,它涉及到将废弃产品有效地拆解成可回收利用的部件和材料。随着环保意识的增强和资源回收技术的发展,DLBP逐渐成为研究的热点。这类问题…...
http cache-control
Cache-Control 是 HTTP 协议中用于控制缓存行为的重要头部字段。它定义了客户端和服务器端如何缓存资源,以及缓存的有效期。以下是关于 Cache-Control 的详细解释: 请求指令 max-age 指示客户端接受的响应最大年龄。如果缓存的响应超过这个年龄&#x…...

kubernetes 中的微服务
微服务:用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 - Service是一组提供相同服务的Pod对外开放的接口。 - 借助Service,应用可以实现服务发现和负载均衡。 - service默认只支持…...

电脑无法无线投屏的解决办法
在前司的时候经常遇到电脑无法使用无线投屏器的情况,今天就来聊聊如何解决。 1.不会连接。这种情况,经常发生在WIN10升级WIN11之后,一般是两种办法,一种是同时按键盘上的WINDOWS和K键,右下角就会出来连接的图标&#…...

【多重循环在Java中的应用】
多重循环在Java中的应用 介绍 多重循环是将一个循环嵌套在另一个循环体内的编程结构。Java中的 for、while 和 do...while 循环均可作为外层循环和内层循环。建议使用两层嵌套,最多不超过三层,以保持代码的可读性。 在多重循环中,外层循环执…...

JVM(Java Virtual Machine) 详解
1. JVM 内存区域划分 一个 Java 写的程序,跑起来就得到了一个 Java 进程(资源分配的基本单位) JVM 上面运行的字节码指令 1) 程序计数器(比较小的空间),保存了下一条要执行的指令的地址 这个不是 CPU 的…...

【进阶OpenCV】 (4)--图像拼接
文章目录 图像拼接1. 读取图片2. 计算图片特征点及描述符3. 建立暴力匹配器4. 特征匹配5. 透视变换6. 图像拼接 总结 图像拼接 图像拼接是一项将多张有重叠部分的图像(这些图像可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分…...

pg if条件语句
1.语法: 2.区别 IF 语句: 只能在 PL/pgSQL 中使用,不适合在直接的 SQL 查询中使用。没有返回值,仅仅是控制逻辑流程。适合用在存储过程、函数和触发器中。 CASE 语句(在 PL/pgSQL 中): 可以在 P…...

Pikachu-unsafe upfileupload-getimagesize
什么是getimagesize()? getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造,如果用这个函数来获取图片类型,从而判断是否时图片的话ÿ…...

SOA是什么
SOA SOA 即 Service-Oriented Architecture(面向服务的架构)。 一、定义 SOA 是一种软件设计方法和架构理念,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来。这些服务可以独立部署、独立运…...

构建高效团队,内部CRM系统的益处详解
内部CRM系统的最大优势之一是它能够集中并系统化客户信息,包括联系方式、购买历史、偏好设置、服务记录等。这种集中式的数据管理使企业能够快速响应客户需求,预测客户行为,提供个性化的服务或产品。更重要的是,它有助于建立一个统…...
Linux文件属性
Linux 文件基本属性 为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限: - chown (change owner) &#…...
什么是Anaconda
目录 1. [什么是Anaconda](#什么是Anaconda) 2. [安装Anaconda](#安装Anaconda) - [检查系统](#检查系统) - [下载Anaconda](#下载Anaconda) - [安装Anaconda](#安装Anaconda) 3. [启动Anaconda Navigator](#启动Anaconda-Navigator) 4. [创建与管理环境](#创建与管理环…...
ubuntu24开启启动脚本
因为我是在之前装的是windows和ubuntu双系统,所以想在ubuntu中自动挂载和开启时做些自己的脚本处理开发环境。 我的脚本如下: truedei@truedei-code:~$ cat mount.shsudo umount /media/truedei/*#sudo ntfsfix /dev/sda3 #sudo ntfsfix /dev/sda4 #sudo ntfsfix /dev/sda5…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...