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

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

相关推荐
WZGL123017 小时前
七彩喜智慧养老:心中有“数”,服务有“智”,让老年人生活乐无忧
生活
郑州光合科技余经理17 小时前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
WZGL123021 小时前
数字化模式全面赋能,“智能+养老”破题养老痛点
大数据·人工智能·科技·生活·智能家居
xz54180470521 小时前
极限骑行,萌化超级压力的邪修之路。
arcgis·生活
码银21 小时前
【数据分析】基于工作与生活平衡及寿命数据集的数据分析与可视化
数据挖掘·数据分析·生活
WLJT1231231231 天前
深耕种养殖:在乡土间孕育丰收与希望
科技·生活
黑客思维者1 天前
机器学习001:从“让机器学会思考”到生活中的智能魔法
人工智能·机器学习·生活
金士镧(厦门)新材料有限公司1 天前
稀土化合物:推动科技发展的“隐形力量”
人工智能·科技·安全·全文检索·生活·能源
科技观察2 天前
e签宝成首家获颁《电子政务电子认证服务机构资质证书》的浙江民营企业
生活
CIb0la2 天前
如何维持精力旺盛
运维·生活