【Go编程基础】03-类型与变量
Go基本类型布尔型:bool 长度:1字节 取值范围:true,...
使用 MySQL ST_Distance_Sphere 计算两个经纬度点的距离
MySQL 的 ST_Distance() 适合计算同一平面坐标系下两个 geometry 的距离,返回单位取决于坐标系。经纬度是球面坐标,直接用 ST_Distance() 再除以固定系数(例如 0.0111)只是粗略近似,纬度越高误差越明显。 如果要计算两组经纬度之间的近似地球表面距离,更建议使用 ST_Distance_Sphere()。它返回单位为米的距离。注意 POINT(x, y) 中 x 是经度(longitude),y 是纬度(latitude),不要写反。 下面示例没有强制设置 SRID。如果你的 MySQL 8 表字段使用了 SRID 4326 约束,查询中的目标点也要使用相同 SRID,例如 ST_GeomFromText('POINT(103.0 31.0)', 4326),避免不同 SRID 的 geometry 混用。 情况一:数据库中已有 POINT 类型的 location 字段 数据库:有 POINT 类型的 location 字段实体类:有经纬度字段(double) 1234567891011SELECT ...
Cloudflare Workers更换(workers.dev)默认域名的解决方案
最近由于 Cloudflare Workers 的默认域名(workers.dev)不能访问,给依赖该默认域名的应用带来了不便。本文记录一种通过自定义域名访问 Worker 的处理方式。 准备材料 一个域名(可不用备案) 一个已经部署并可正常运行的 Worker 配置步骤1、登录 Cloudflare,点击右上角的添加站点,获取域名托管在 Cloudflare 上的名字服务器。 2、登录域名服务商控制台。不同服务商的配置入口可能不同,这里以 Dynadot 为例:在控制台配置域名名字服务器,指向上一步 Cloudflare 提供的名字服务器。配置完成后需要等待一段时间才能生效,生效后通常会收到 Cloudflare 发送的通知邮件。 3、进入刚才添加的站点,添加一条 A 记录。IP 可以使用占位地址,但代理状态一定要开启(橙色云朵)。 4、点击左侧菜单下的 Workers,添加路由,输入自己的域名路由(例如 *.example.com/*),再选择对应的 Worker 服务和环境。 5、自此就完成了添加自定义域名。
【Go编程基础】02-Go基础知识
Go内置关键字(25个均为小写) break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var Go注释方法 // 单行注释 /* */ 多行注释 代码组织结构 Go程序是通过 package 来组织的(与python类似) 只有 package 名称为 main 的包可以包含 main 函数 一个可执行程序 有且仅有 一个 main 包 通过 import 关键字来导入其它非 main 包 通过 const 关键字来进行常量的定义 通过在函数体外部使用 var 关键字来进行全局变量的声明与赋值 通过 type 关键字来进行结构( struct )或接口( interface )的声明 通过 **func 关键字来进行函数的声明 Go导入...
【Go编程基础】01-Go开发环境搭建
什么是 Go?Go 是一门支持并发和垃圾回收的编译型系统编程语言,目标是在静态编译语言的高性能和动态语言的高效开发之间取得平衡。 Go的主要特点有哪些? 类型安全和内存安全 以非常直观和极低代价的方案实现高并发 高效的垃圾回收机制 快速编译(同时解决C语言中头文件太多的问题) 为多核计算机提供性能提升的方案 UTF-8编码支持 Go存在的价值是什么?Go在谷歌:以软件工程为目的的语言设计 Go是记事本编程吗?包括GoLand,VSCode,LiteIDE等众多知名IDE均已支持 Go 有哪些实际应用和资源? 全球最大视频网站 YouTube(谷歌) 七牛云储存以及旗下网盘服务(Q盘) 爱好者开发的Go论坛及博客 已用Go开发服务端的著名企业:谷歌、盛大、七牛、360 Go 发展成熟了吗?Go 于 2009 年正式发布,已经被广泛用于云原生、后端服务、命令行工具和基础设施开发。它的标准库、工具链和生态都比较稳定,适合作为工程语言长期使用。 Go 的社区活跃吗?Go 拥有活跃的国际社区和较完整的中文资料。学习时可以优先查看官方文档、标准库文档、Go Blog...
Spring Cloud Gateway实现指定路由跳过全局过滤器
在 Spring Cloud Gateway 中,GlobalFilter 可以方便地实现全局拦截或统计。有时候我们希望某些路由跳过 GlobalFilter,可以通过 GatewayFilter 与 GlobalFilter 组合来实现。 1、全局过滤器GlobalFilter详细代码如下: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182package com.chanjet.dsf.web.filter;import com.alibaba.fastjson.JSON;import com.chanjet.dsf.cache.RedisUtil;import com.chanjet.dsf.constant.AttributeConstant;import...
Spring Boot集成MyBatis实现多数据源支持
1、背景在实际项目开发过程中,时不时会遇到多数据源的情况。本文介绍 Spring Boot 集成 MyBatis 实现多数据源支持的基本方式。 2、集成过程工程结构示例工程结构如下。org.spring.springboot.config.datasource 包含多数据源配置;如果需要第三个数据源,可以按已有配置扩展。resources/mapper 目录下有两个模块,分别对应 MyBatis 不同数据源需要扫描的 mapper.xml 目录。 1234567891011121314151617181920212223242526272829303132├── pom.xml└── src └── main ├── java │ └── com │ └── clang │ ├── Application.java │ ├── config │ │ └── datasource │...
解决Spring Cloud Gateway网关跨域问题
今天前端突然说接口不支持跨域了,马上排查了一番,原因是之前接口一直提供给 App 使用,所以没有遇到浏览器跨域限制。解决方案就是在网关处新增配置类: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.reactive.CorsWebFilter;import org.springframework.web.util.pattern.PathPatternParser;@Configurationpublic class CorsConfig { ...
多租户SaaS数据库租户模式
本文介绍可用于多租户 SaaS 应用程序的各种租户模型。 在设计多租户 SaaS 应用程序时,必须慎重选择最符合应用程序需要的租户模型。 租户模型确定如何将每个租户的数据映射到存储。 所选的租户模型会影响应用程序设计和管理。 今后改用不同的模型可能需要付出一定的代价。 A. SaaS 概念和术语在软件即服务 (SaaS) 模型中,贵公司不会销售软件的 许可证。 而是,每个客户都会向贵公司支付租金,使每个客户成为贵公司的 租户。 作为支付租金的回报,每个租户都可以访问 SaaS 应用程序组件,并将数据存储在 SaaS 系统中。 术语 租户模型 是指租户存储数据的组织方式: 单租户: 每个数据库仅存储来自一个租户的数据。 多租户: 每个数据库都存储来自多个独立租户的数据(使用保护数据隐私的机制)。 混合租户模式也可用。 B. 如何选择适当的租户模型一般情况下,租户模型不会影响应用程序的功能,但可能会影响总体解决方案的其他方面。...
Go实现文件接收
前段时间遇到一个问题:在只有 Nginx 的情况下,需要实现文件上传。这个场景可以用 Go 快速补一个轻量 HTTP 服务,示例分为服务端和客户端两部分。 服务端12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package mainimport ( "fmt" "io" "net/http" "os")const ( upload_path string = "/Users/chenhu/Desktop/upload/")func helloHandle(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "hello world!")}//上传func uploadHandle(w...




