从 Elastic Search 向 postgreSQL 迁移的探索
背景原来的数据储存在 es,最近出现了连表查询的需求,因此考虑换成关系型数据库存储原来的数据. 之前使用的技术 golang + elastic, 存储其他数据时也引入过 mysql, 但为了兼容原来的使用需求考虑使用 postgreSQL 替换掉 elastic, 这样有以下几个问题需要考虑
主要问题:1. 数组能否实现 terms 查询
2. 能否对 json 数据局部更新
3. gorm 的支持
Array创建create table ware(spu text primary key, sku text[]);
看看 ware 表结构
postgres=# \d ware Table "public.ware" Column | Type | Collation | Nullable | Default --------+--------+-----------+----------+--------- spu | text | | not null | sku | text[] | ...
[踩坑日记] GO 交叉编译
错误提示% fyne package -name report-bot -os windows -icon samans_logo.png# runtime/cgogcc_libinit_windows.c:8:10: fatal error: 'windows.h' file not found
尝试用 gcc 编译一下,首先替换掉默认的 clang
mingwMinimalist GNU for Windows and GCC cross-compilers因为是 mac 系统所以要安装第三方修改的版本
安装 gccMac 系统直接食用 homebrew 安装
brew install mingw-w64
更改 golang 环境变量go env
basicGOVERSION="go1.17.7"GCCGO="gccgo"AR="ar"CC="clang"CXX="clang++"CGO_ENABLED="1"GOMOD="/Use ...
[踩坑日记] GO 交叉编译与 GUI 框架选择
Intro年前写了个脚本给别人实现自动化操作,最开始同事写用 JavaScript 实现,考虑时间紧迫就发给别人用了,但由于距离较远而且设备不固定,如何指挥没有经验的人安装 node 环境逐渐成了个问题,然后我就用 go 重构了脚本。
重构就是照着 js 写一遍,很快啊啪的一下交叉编译完成没啥问题
#!/bin/bashGOOS=windows GOARCH=amd64 go build -o extract-tel.exe *.go
TimezoneData几天后同事提了新需求:要选择日期;那简单啊给个 input 让他们给时间戳输进去不就得了
加了两个fmt.Scanln()分别输入月份和日期(年份默认今年),然后我加上转时间就好了嘛
month, day := 0, 0 fmt.Println("**需要输入报备的订单日期**") fmt.Println("输入月份:") _, err := fmt.Scanln(&month) if err != nil { return } fmt.Println(& ...
[力扣竞赛] 第 280 场周赛
6004. 得到 0 的操作数给你两个 非负 整数 num1 和 num2 。
每一步 操作 中,如果 num1 >= num2 ,你必须用 num1 减 num2 ;否则,你必须用 num2 减 num1 。
例如,num1 = 5 且 num2 = 4 ,应该用 num1 减 num2 ,因此,得到 num1 = 1 和 num2 = 4 。然而,如果 num1 = 4且 num2 = 5 ,一步操作后,得到 num1 = 4 和 num2 = 1 。返回使 num1 = 0 或 num2 = 0 的 操作数 。
func countOperations(num1 int, num2 int) int { count := 0 for num1 != 0 && num2 != 0 { count++ num1, num2 = minus(num1, num2) } return count}func minus(a, b int) (int, int) { if a >= b { retu ...
[踩坑日记] append 时 slice 的变化情况
Intro层次遍历的时候返现每次执行次数都不同,溯源发现问题出现在这一行代码:
for _, node := range currentNode.subCategory { queue = append(queue, append(currentPath, node))}
queue 的结果会影响遍历的内容以及结束条件
appendappend 是给 slice(切片) 追加内容的方法
// 添加单个append(a, b)// 添加多个append(a, b, c)append(a, [b,c]...)
slice 是在数组基础上生成的,有三个属性
[]Type:切片内容
length:切片内容的长度
capacity: 切片容量
capacity 表示当前分配给这个 slice 的内存大小,在 make slice 的时候可以指定它( 如果不指定 capacity 也会随着需要自动增长)
slice := make([]Type, 0, 0)// 一定有cap(slce) >= len(slice)
当 b被添加时,如果 a 的 capac ...
📝 KTV 点歌备忘录
周杰伦晴天花海七里香告五人披星戴月的想你海龟先生男孩别哭玛卡瑞纳盘尼西林Say It Again新裤子我爱你没有理想的人不伤心你要跳舞吗草东没有派对山海烂泥李志###天空之城
梵高先生
山阴路的夏天关于郑州的记忆郭顶水星记保留宋冬野郭源潮莉莉安安和桥董小姐陈鸿宇理想三旬
马頔傲寒
梁博男孩漠河舞厅林宥嘉你是我的眼陈势安天后薛之谦方圆几里绅士意外你还要我怎样刚刚好演员简弘亦你就不要想起我古巨基情歌王岛屿心情8+8=8玩具
[力扣竞赛] 第 274 场周赛
5967. 检查是否所有 A 都在 B 之前给你一个 仅 由字符 ‘a’ 和 ‘b’ 组成的字符串 s 。如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前,返回 true ;否则,返回 false 。
提示:
1 <= s.length <= 100
s[i] 为 'a' 或 'b'
解题字符串中只有a b两种字符,js 中 indexOf 可以找到字符的下标,寻找 a的下标,如果不存在,根据示例3可返回应直接返回 true。当a存在时,如果 index > 0,说明a必然在b的中间;如果 index = 0,那么去掉它继续判断a的下标,直到得到结果。
提交/** * @param {string} s * @return {boolean} */ var checkString = function(s) { let a_i = 0 const str = [...s] while (a_i===0 && a_i < s.length) ...
[力扣竞赛]第 273 场周赛
5963. 反转两次的数字反转 一个整数意味着倒置它的所有位。
例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。
给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。
示例 1:
输入:num = 526输出:true解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。
示例 2:
输入:num = 1800输出:false解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。
示例 3:
输入:num = 0输出:true解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。
提示:
0 <= num <= 106
提交AC
/** * @param {number} num * @return {boolean} */ var isSam ...
64. 最小路径和
题目给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例 1:
输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。
示例 2:
输入:grid = [[1,2,3],[4,5,6]]输出:12
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100
首次ACidea:记录到达每一个方格的 sum, 到达右下角时拿到最小最后两步中最小的 sum
func minPathSum(grid [][]int) int { rowLen := len(grid) columnLen := len(grid[0]) step := rowLen - 1 + columnLen // 第 n 步 所在方格的 sum // sub[step] // []{ row: ...
121.买卖股票的最佳时机
题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
失败经验1.这个写法感觉没有错误,但提交之后提示超出时间限制,发现测试用例中有一个长度 53347 的数组,在我的电脑上能跑完但浏览器受不 ...


![[踩坑日记] GO 交叉编译](https://s2.loli.net/2022/01/12/zr98QAhuTG5c4kJ.png)
![[踩坑日记] GO 交叉编译与 GUI 框架选择](https://s2.loli.net/2022/02/25/YZypf8JT6bxiao2.png)
![[力扣竞赛] 第 280 场周赛](https://s2.loli.net/2022/02/14/OkCztnsj9JlgrXL.png)

![[力扣竞赛]第 273 场周赛](https://s2.loli.net/2022/01/02/VIXldN5oxYcHvjm.png)

