Go语言
文章平均质量分 65
孤名为義
摸鱼!摸鱼!摸鱼!
展开
-
【Golang】做算法题可能会用到的知识
做算法题时可能遇到原创 2022-03-01 17:10:39 · 634 阅读 · 0 评论 -
【sduoj】记录访问日志
2021SC@SDUSC 在 sduoj 项目的开发中,日志是一个难以回避的存在。虽然就算没有日志的记录系统也能运行,但是当系统出现异常的时候,我们便可以通过查看日志来寻找异常出现的地点,以便于达到快读定位、快速解决异常的目的。我们需要对每个访问都进行记录,这时我们可以编写一个中间件,每个请求到来的时候,都会通过这个中间件。这样的话,我们便可比较容易的获取它的请求方法、响应码、方法调用开始时间、方法调用结束时间等信息。原创 2021-11-05 09:33:45 · 211 阅读 · 0 评论 -
【sduoj】导入 Excel
2021SC@SDUSC 学生管理是 sduoj 项目中不可或缺的一部分,系统中的许多功能都需要用户在完成学生认证后才能进行。学生认证就是建立虚拟账号与现实身份的一对一对应关系,创建账号的工作可以由学生自己完成,而现实身份的数据可能就需要教师或管理员来上传。为了尽可能简化管理员或教师的操作流程,在能够上传单个学生数据的同时,这些角色应该也能通过上传 Excel 文件的方式来实现快速批量上传。原创 2021-11-03 22:17:44 · 322 阅读 · 0 评论 -
【sduoj】RPC应用
2021SC@SDUSC 在 oj 项目中,服务端并不是一个不可分割的整体,而是可以根据职责划分为成多个子服务,比如能够处理前端请求的服务、能进行判题的服务等。那么这些服务之间要如何进行通信呢?这里我们选用 RPC。相比于 Restful,RPC 更加轻量级,也更加高效,适合系统内的服务通信。原创 2021-11-02 09:37:56 · 240 阅读 · 0 评论 -
【sduoj】用 validator 进行接口校验
2021SC@SDUSC 在 sduoj 项目中,服务端需要接收来自前端的请求,根据不同的请求来进行不同的业务处理。如果没有一个规范化的约束的话,服务端就有可能接收到不合理的请求。为了避免参数的错误导致业务逻辑的混乱,我们需要一种接口校验机制,来退回这些不合理的请求。原创 2021-10-26 15:29:24 · 312 阅读 · 0 评论 -
【sduoj】身份认证与获取令牌
2021SC@SDUSC 在上一篇文章中我们提到了如何生成和解析 JWT,接下来我们逐步分析如何去使用它。首先,在我们的系统中,对于每个用户来说,他们的账号和密码是不同的,我们要根据这些信息,来生成一个 Token 令牌,以后进行接口调用的时候,只需要出示令牌即可,不需要重新输入账号密码。原创 2021-10-25 21:04:57 · 278 阅读 · 0 评论 -
【sduoj】生成和解析 JWT
2021SC@SDUSC 在sduoj项目中,我们有四种角色:管理员、教师、学生、普通用户。如果仅仅是通过调用的接口路径的不同来区分这些角色的话,容易引发一些危险的行为。比如,当一个普通用户知道了该项目的管理员接口,那他的行为就有可能造成系统的混乱。因此,我们需要给项目加一点防御,对接口进行访问控制。原创 2021-10-20 11:01:44 · 726 阅读 · 0 评论 -
【sduoj】开启文件服务
2021SC@SDUSC引言上一期提到,我们可以向服务器发送文件,那我们怎么从服务器获取到这些文件呢?func NewRouter() *gin.Engine { r := gin.New() r.StaticFS("/static", http.Dir(global.AppSetting.UploadSavePath)) ...}源码分析r.StaticFS方法对relativePath禁用了:和*,使得该方法不能接收 URL 参数,然后它调用createStaticHandler获得原创 2021-10-17 16:36:31 · 238 阅读 · 0 评论 -
【sduoj】实现文件上传功能
2021SC@SDUSC 在sduoj项目中,文件上传是必不可少的,上传用户头像需要提交图片,上传测试点文件需要提交压缩文件,那么我们的服务器是如何接收来自用户的上传文件请求呢?原创 2021-10-16 22:38:23 · 196 阅读 · 0 评论 -
【sduoj】后端框架的引入
2021SC@SDUSC sduoj是一个web应用,为了提高该项目的开发效率,我们可以选用一个后端框架。这里选用的是gin框架,它具有高性能、小巧、易用的优点,并深受gopher的喜爱。原创 2021-10-11 21:09:14 · 339 阅读 · 0 评论 -
【sduoj】打造命令行应用
2021SC@SDUSC 作为一个oj系统,它往往不能只判断一种语言的提交结果,它甚至可能支持所有常见的语言类型。但是,不同的语言所需要的编译运行命令是不同的,如果把判断语言类型的工作交给判题机来完成的话,当新增一门新的支持语言或移除一门过时的语言时,我们可能需要修改判题机的源码,这无疑不利于系统的维护。 这时,我们需要一个能够连接判题机和不同语言的编译器的桥梁,来满足我们的需求。原创 2021-10-07 23:01:29 · 109 阅读 · 0 评论 -
【sduoj】让程序执行外部命令
2021SC@SDUSC 与选择题、填空题不同的是,编程题很难用比较字符串是否相同的方式来判断正误。对于某些稍微复杂点的题目,一千个人可能提交一千份不同的代码。评判某份代码是否是正确的,只要看它能不能跑出正确的结果就行了。 那么如何让计算机来执行判题操作呢?原创 2021-10-06 21:01:13 · 345 阅读 · 3 评论 -
【sduoj】深入理解缓冲区
2021SC@SDUSC 在一个oj系统中,最核心的内容是判题部分。无论是现实中的用户,还是一台判题机,要检测用户写出的代码是否是正确,只需要编译运行代码所在的源文件,然后比较程序输出结果与标准答案是否相同。 在不同的题目中,程序读取的值的数量不同,在某些比较复杂的题目中,程序读取的值可能多得难以想象。这时,我们需要一个存储这些数据的结构,这里选用的是缓冲区。原创 2021-10-04 22:11:46 · 270 阅读 · 1 评论 -
【Golang】使用Iris
官方文档:https://www.iris-go.com/docs安装Iris首先,创建一个项目文件夹——hello-server,在文件夹中输入以下命令。E:\hello-server>go mod init hello-serverE:\hello-server>go get github.com/kataras/iris/v12@master如果遇到网络错误,就输入以下命令。E:\hello-server>go env -w GOPROXY=https://gopr.原创 2021-07-28 11:25:14 · 727 阅读 · 0 评论 -
【Golang】函数
定义与调用我们以一个求两数之和的函数例子,比较一下Java和Go在函数定义方面的不同之处。Java代码:int add(int a, int b) { return a + b}Go代码:func add(a int, b int) int { return a + b}我们可以看到,Java把返回值的类型放在函数名前,而Go则将它放在了后面,除此之外,参数列表中形参名称和形参类型的前后顺序也不同。而在函数调用时,Go与Java的语法差不多。var sum = add(1, 2)原创 2021-07-27 22:32:44 · 106 阅读 · 0 评论 -
【Golang】变量
变量的声明在Java中我们声明变量的方式为:int a = 16;而在Go中,变量的数据类型在变量名后面。var a int = 16当然,变量定义和赋值可以放在不同的行。var a int // 相当于 var a int = 0a = 32在一行中,我们也可以声明多个变量。var a, b int = 3, 2如果不指定具体类型,系统会判断变量的值,从而给这个变量一个默认类型。var a = 3 // 相当于 var a int = 3var b = 0.1 // 相当于原创 2021-07-27 16:47:57 · 197 阅读 · 0 评论 -
【Golang】Hello World
第一个Go程序建一个main文件夹,在里面创建main.go文件,写入如下代码:package mainimport "fmt"func main() { fmt.Println("Hello World!")}然后我们需要在命令行窗口中对该文件进行编译(需要提前配置好环境变量)。E:\GoCode\main> go build .\main.go这时,在main目录下,系统会生成一个main.exe文件,然后我们运行它。E:\GoCode\main> .\main.原创 2021-07-26 17:29:12 · 304 阅读 · 0 评论