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日起,成人医保账户将无法直接支付儿童专用药品费用。

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

相关推荐
WLJT1231231231 小时前
洗漱台上的日常,藏着生活的温度
生活
qq_200465052 小时前
数字文明与农耕文明的交响:2025世界金猪日重构产业文化新范式
人工智能·重构·生活·旅游·业界资讯
湘-枫叶情缘2 小时前
虚拟妻子项目可行性方案:以LLM与多模态AI构建下一代情感陪伴系统
人工智能·生活
毕设源码柳学姐11 小时前
计算机毕设 java 智慧社区服务系统 SSM 框架社区生活平台 Java 开发的便民服务与互动系统
java·开发语言·生活
微语早读3 天前
19句今天最新早上好问候语精选大全,每天问候,相互牵挂,彼此祝福
生活
ECT-OS-JiuHuaShan3 天前
否定之否定的辩证法,谁会不承认?但又有多少人说的透?
开发语言·人工智能·数学建模·生活·学习方法·量子计算·拓扑学
ヽ格式化3 天前
一文读懂栈与堆:从生活例子到Golang/PHP内存管理实践
golang·php·生活
第***月3 天前
烟台开海后海鲜便宜到不敢信
生活·旅游·风景
WLJT1231231234 天前
藏在细节里的生活答案
大数据·生活