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

一、准备工作

需求分析

1)用户注册

2)用户登录

3)显示在线用户列表

4)群聊(广播)

5)点对点聊天

6)离线留言

主界面

首先,在项目根目录下初始化mod,然后按照如下结构设计目录:

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

二、main

go 复制代码
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

go 复制代码
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目录的情况同理。

运行结果如下:

bash 复制代码
                    1 登录聊天室
                         1 登录聊天室  
                         2 注册用户    
                         3 退出系统    
                         请选择(1-3) :
1
登录聊天室
请输入用户的id号:111
请输入用户的密码:111
userId=111 pwd=111
登录成功!
相关推荐
ttwuai1 天前
AI 生成后台改数据后,操作日志别只记按钮:Go + MySQL 怎么验
数据库·人工智能·mysql·golang
Wang's Blog1 天前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
FfHUCisI1 天前
循环链表(Circular Linked List)
golang
Wang's Blog1 天前
Go-Zero项目开发30: 微服务配置中心的设计与实现
开发语言·微服务·golang·go-zero
名字还没想好☜1 天前
Go for-range 循环变量陷阱:goroutine 里全打印同一个值(Go 1.22 前后差异)
开发语言·后端·golang·go
会编程的土豆1 天前
功能详解 01 · 用户注册:从表单到数据库一行
开发语言·数据库·后端·mysql·golang
go不是csgo1 天前
从模板到五道 LeetCode:完全背包的 Golang 教学笔记
笔记·leetcode·golang
Wang's Blog1 天前
Go-Zero项目开发33: IM实时通信前后端对接与微服务基础设施实践
开发语言·微服务·golang·go-zero
Wang's Blog2 天前
Go-Zero 项目开发26: 实现用户在线离线状态维护
开发语言·后端·golang
Wang's Blog2 天前
Go-Zero 项目开发22:用户群聊功能的实现与完善
开发语言·golang