2025年11月个人工作生活总结

本文为 2025年11月工作生活总结。

研发编码

一次解决前端跨域问题的记录

背景:某带有网页的服务程序,前端使用了iframe技术,部署时使用nginx转发。iframe区域访问出错,同一页面其它内容正常。

信息:Refused to frame 'https://10.20.30.40:9000/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors https://10.20.30.40:8888 https://10.20.30.40:8889".Failed to execute 'sendmsg' on 'DOMWindow': The target origin provided ('https://10.20.30.40:9000/') does not match the recipient window's origin ('null').

解决:提示信息有几个IP地址,经核实是干扰项,与本服务无关。经过调研,发现需要在nginx配置文件添加如下几行配置项:

复制代码
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE';
add_header 'Access-Control-Allow-Header' 'Content-Type,*';

含sqlite3的go程序的编译

因工作需要,在go工程里使用了go-sqlite3实现对sqlite3数据库文件的读写。在引入该库之前,该工程是纯go代码,因此可以在windows上交叉编译linux平台的运行文件。也因此不需要开虚拟机开发。引入该库后,进行交叉编译时出错。编译命令如下:

复制代码
time CGO_ENABLED=1 GO111MODULE=on GOOS=$TARGET_OS GOARCH=$TARGET_ARCH go build -mod vendor \
  -ldflags "-s -w -X '$proname/cmd.BuildTime=${BuildTime}' -X '$proname/cmd.Version=${Version}' -X '$proname/cmd.AutoRelease=${AutoRelease}'" \
  -o $target main.go || exit 1

其中TARGET_OSlinuxTARGET_ARCHamd64,可以看到,编译命令用CGO_ENABLED=1使能了CGO,出错具体信息如下:

复制代码
# runtime/cgo
gcc_linux_amd64.c: In function '_cgo_sys_thread_start':
gcc_linux_amd64.c:57:2: error: unknown type name 'sigset_t'; did you mean '_sigset_t'?
  sigset_t ign, oset;
  ^~~~~~~~
  _sigset_t
gcc_linux_amd64.c:62:2: error: implicit declaration of function 'sigfillset' [-Werror=implicit-function-declaration]
  sigfillset(&ign);
  ^~~~~~~~~~
gcc_linux_amd64.c:57:16: error: unused variable 'oset' [-Werror=unused-variable]
  sigset_t ign, oset;
                ^~~~
cc1.exe: all warnings being treated as errors

从信息上看就是不同平台的某些函数和结构体不同而导致的,而我又不想大动干戈改造mingw环境。但不使能CGO也可通过编译,只是运行时出错,提示如下:

复制代码
 Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub

看来注定要开虚拟机编译,由于事情紧急,因此临时使用这种方法------虽然有服务器,但CICD还没时间搞。

后来找到了modernc.org/sqlite库,这个库是不依赖CGO,可以实现跨平台编译了。

C++字符串分割

问题:之前在C++工程里使用vector和string实现了一个字符串分隔的函数,在代码中主要用于解析csv文件(每行以逗号','隔开),为方便起见,还过滤了字段左右的空格。具体实现如下:

复制代码
// 去掉前后空格------中间的不去掉
std::string& trim(std::string &str)
{
	if (str.empty())
	{
		return str;
	}
	str.erase(0, str.find_first_not_of(" ")); //去除左边空格
	str.erase(str.find_last_not_of(" ") + 1);//去除右边空格
	return str;
}

std::vector <std::string> splitString(const char *s1, const std::string & delim)
{
    std::string s = s1;
    return splitString(s, delim);
}

// 分割string
std::vector <std::string> splitString(const std::string & s, const std::string & delim)
{
    std::vector < std::string > elems;
    std::string tmp;
    size_t pos = 0;
    size_t len = s.length();
    size_t delim_len = delim.length();
    if (delim_len == 0)
        return elems;
    while (pos < len)
    {
        int find_pos = s.find(delim, pos);
        if (find_pos < 0)
        {
            tmp = s.substr(pos, len - pos);
            elems.push_back(trim(tmp));
            break;
        }
        tmp = s.substr(pos, find_pos - pos);
        elems.push_back(trim(tmp));
        pos = find_pos + delim_len;
    }
    return elems;
}

最近使用到了一个CSV文件,最后一项是备注字段,目前没有内容,字符内容为空。上述函数就无法正常读取了。由于该函数已被大量使用,为不扩大影响范围,再单独封装一个解析函数,具体如下:

复制代码
std::vector<std::string> splitStringEmpty(const std::string& str, const std::string& delimiter) {
    std::vector<std::string> tokens;
    if (str.empty()) return tokens;
    
    std::string::size_type start = 0;
    std::string::size_type end = str.find(delimiter);
    
    while (end != std::string::npos) {
        tokens.push_back(str.substr(start, end - start));
        start = end + delimiter.length();
        end = str.find(delimiter, start);
    }
    
    // 添加最后一个token
    tokens.push_back(str.substr(start));
    return tokens;
}

使用上述函数分隔CSV文件每行字符串,不会去掉空的字段,比如",",其返回的长度为6,只是所有内容均为空。

紧急任务

本月被安排一个紧急的开发任务,加班加点赶工,月底正式上线试运行,截至今天,运行良好。

这个月中旬请了今年第一次的3天年假,在假期最后一天晚上去图书馆还书路上,领导来电,有个新的任务,优先级高,需尽快完成。后来了解一下,是因其他组的人员没时间,因此本是其他组的事派到我身上。我想我平时也没少加班,早到晚退都没落下,领导怎么还认为我能再抽时间完成其它组的事。经过一些评估后,决定使用自己熟悉的技术路线,并将其定性为demo等级。因为急有急的做法,什么文档方案什么需求评审,先不管。其它的事也暂时放后,按部分同事说的,事情都紧急,看哪个更紧急。

生活记录

感冒发烧买药

这个月下旬伊始,天气突然转凉,大睡发烧了,请假3天。后来发现又是秋季流感高发时期。只要天气突变,大锤就发烧,转而咳嗽。大妞还好一些,只是偶尔咳嗽。后来拿社保卡去买药,花了一些时间。先是听人说要绑定卡,于是我在某宝上搜索社保卡,刷脸认证,输入小孩身份信息进行绑定。结果药店不认,说要绑定医保卡。

我拿着手上写着"社会保障卡"几个大字的卡发了几分钟呆,终于明白是因为程序员思维作怪。这张卡实际是医保卡,于是继续在某宝上搜索医保卡,再次进行绑定。药店先是扫了小孩的二维码,再扫大人的二维码,一次不成功,再重复一次,最终买了小孩的药了。

在刷卡过程中咨询了工作人员,得到明确的答复,大人卡不能买小孩的药。后来我搜索了一些资料,资料表明,根据国家医保局2024年11月发布的《关于调整基本医疗保险用药管理有关事项的通知》,自2025年1月1日起,成人医保账户将无法直接支付儿童专用药品费用。

于是又学习并巩固了一些知识。

相关推荐
娱乐我有3 小时前
杨洋出席青岛啤酒白啤线下活动 于海风暖阳间演绎惬意生活方式
生活
雪兽软件4 小时前
科技让我们的生活变得更好还是更糟?
科技·生活
怪兽软家8 小时前
EndNote 2025 (2025.3)中文版安装教程及下载
经验分享·生活
好奇龙猫8 小时前
【大学院-新的可能-新的挑战-新的机缘:生活-搬家细节】
生活
生活观察站14 小时前
从“功能容器”到“生活艺术”,格力明珠冰箱如何重构厨房美学?
大数据·重构·生活
summer__777714 小时前
作业3:基于单片机的智能生活系统设计与未来应用设想——让生活更便捷与智慧
单片机·嵌入式硬件·生活
workflower1 天前
具身智能行业应用-生活服务业
大数据·人工智能·机器人·动态规划·生活
星幻元宇VR1 天前
VR航空航天科普设备【VR时空直升机】
科技·学习·安全·生活·vr
海边的Kurisu1 天前
从零开始的Git生活 | 刚实习同学的噩梦 And 参与开源不可缺的一环
git·生活
南国微雪1 天前
记一次神奇的光猫改桥接经历
生活