当前位置: 首页 > article >正文

使用 GoZero 实现读取绩效表格 Excel 并打分

以下是一个使用GoZero框架读取Excel并进行打分的简化示例。假设我们有一个Excel文件,其中第一列包含绩效数据,我们将根据这些数据给出打分。

首先,需要安装GoZero依赖:

go get -u github.com/tal-tech/go-zero/tools/goctl

然后,使用goctl生成代码:

goctl rpc proto -dir ./excelrpc -pkg excelrpc

接下来,编写服务逻辑:

package excelrpc

import (

    "context"

    "fmt"

    "github.com/tal-tech/go-zero/core/logx"

    "github.com/xuri/excelize/v2"

)

type ExcelRpcServer struct {}

func NewExcelRpcServer() *ExcelRpcServer {

    return &ExcelRpcServer{}

}

func (s *ExcelRpcServer) ScoreExcel(ctx context.Context, in *ScoreExcelRequest) (*ScoreExcelResponse, error) {

    // 打开Excel文件

    f, err := excelize.OpenFile(in.GetExcelFile())

    if err != nil {

        logx.Errorf("open excel error: %v", err)

        return nil, err

    }

    // 读取第一个工作表

    sheet := f.GetSheetName(0)

    rows, err := f.GetRows(sheet)

    if err != nil {

        logx.Errorf("get rows error: %v", err)

        return nil, err

    }

    // 假设第一行是标题行,从第二行开始读取数据并打分

    scores := make([]int32, 0)

    for _, row := range rows[1:] {

        // 假设第一列是绩效数据

        performance := row[0]

        score := s.score(performance)

        scores = append(scores, score)

    }

    return &ScoreExcelResponse{Scores: scores}, nil

}

func (s *ExcelRpcServer) score(performance string) int32 {

    // 这里是一个简化的打分逻辑,实际情况需要根据业务规则来定

    if performance == "优秀" {

        return 90

    } else if performance == "合格" {

        return 60

    }

    return 0

}

最后,定义RPC请求和响应的protobuf模型:

syntax = "proto3";

package excelrpc;

service ExcelRpc {

  rpc ScoreExcel (ScoreExcelRequest) returns (ScoreExcelResponse);

}

message ScoreExcelRequest {

  string excelFile = 1;

}

message ScoreExcelResponse {

  repeated int32 scores = 1;

}

这个示例展示了如何使用GoZero框架和excelize库来读取Excel文件并进行简单的分数打分。在实际应用中,你需要根据自己的需求来调整打分逻辑和Excel文件的读取方式。


http://www.kler.cn/a/400711.html

相关文章:

  • 高效工具推荐:基于WebGPU的Whisper Web结合内网穿透远程使用指南
  • 【经验分享】2024年11月下半年软件设计师考试选择题估分(持续更新~~)
  • AWD脚本编写_1
  • 手搓神经网络(MLP)解决MNIST手写数字识别问题 | 数学推导+代码实现 | 仅用numpy,tensor和torch基本计算 | 含正反向传播数学推导
  • Windows环境GeoServer打包Docker极速入门
  • 蜀道山CTF<最高的山最长的河>出题记录
  • Linux网络:守护进程
  • 路由器基本原理与配置
  • easyExcel - 导出合并单元格
  • 深入理解VUE对象生命周期——从创建到销毁的完整流程
  • leetcode面试 150题之 三数之和 复刷日记
  • android 如何获取当前 Activity 的类名和包名
  • 论文阅读《Neural Map Prior for Autonomous Driving》
  • 【深度学习目标检测|YOLO算法6-27】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析...
  • 基于yolov8、yolov5的植物类别识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 2024 CCF中国开源大会“开源科学计算与系统建模openSCS”分论坛成功举办
  • 跨平台WPF框架Avalonia教程 八
  • 如何在项目中用elementui实现分页器功能
  • OceanBase 分区表详解
  • Vue监视属性变化watch
  • 25-Elasticsearch 数据建模实例
  • 模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC
  • C++设计模式:抽象工厂模式(风格切换案例)
  • IDEA如何设置编码格式,字符编码,全局编码和项目编码格式
  • 静默绑定推广人方法修复
  • 微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation无法打开页面问题