[置顶] 关于中文编程的一些思考

0. 为什么写这篇文章 笔者曾写过一篇《我眼中的C语言及其起源》(在其他地方叫《C语言发展史的点点滴滴》)的文章,文中从历史角度结合Unix系统源码来追溯了C语言的起源以及发展史(C语言的伟大毋庸置疑,但是其他语言带来的多样化也是十分重要),至于文章内容这里就不做过多赘述,感兴趣的读者可以查看原文。 本文则缘起于,在头条转载的本文评论中一位读者提到的一句话:"国产易语言在角落瑟瑟发抖"。看到这句话之后,顿时就对中文编程语言的原理产生了兴趣。由于平时业务开发过程中使用的主要语言是PHP/Golang,所以就从某种角度出发,并结合PHP、编译原理来分析一下中文编程语言的某些相似性原理。如果感...

PHP,Golang,编程原理 2021/11/16 881℃ 0条

[置顶] 初识Golang汇编

0. 为什么写本文 在分析go的某些特性底层功能实现时发现:很多跟runtime运行时有关,而要掌握这一部分的话,有一道坎是绕不过去的,那就是Go汇编。索性就查阅了一些资料,在阅读之余整理总结了一下,并分享给大家。 (本文使用Go版本为 go1.14.1) 1. 为什么需要汇编 众所周知,在计算机的世界里,只有2种类型。那就是:0和1。 计算机工作是由一系列的机器指令进行驱动的,这些指令又是一组二进制数字,其对应计算机的高低电平。而这些机器指令的集合就是机器语言,这些机器语言在最底层是与硬件一一对应的。 显而易见,这样的机器指令有一个致命的缺点:可阅读性太差(恐怕也只有天才和疯子才有能力...

Golang,编程原理 2021/11/17 942℃ 0条

Go中Protobuf Name Conflict冲突问题分析与解决

问题背景 最近,在对老项目进行重构工作。在重构过程中发现需要通过 grpc 调用若干远端微服务,远端微服务都有提前定义好的 proto,在运行时(编译通过,运行则panic)出现了 name conflict 冲突问题。也就是说,在运行时报错提示存在相同名称的 message 消息体。 具体报错信息,如下所示: ➜ app > go mod tidy ➜ app > go build main.go ➜ app > ./main api start panic: proto: file "usermgt.proto" has a name conf...

常见问题 2022/08/07 9℃ 0条

初识MQTT与mosquitto

最近,接手一个新的项目 —— 电子价签。对于电子价签的常见架构,阿里云有一篇文章描述的非常详细(网址见文章末尾),里面包含一个核心的概念 MQTT。由于第一次接触MQTT,特此整理相关知识点,以备后用。 MQTT是什么 MQTT (Message Queuing Telemetry Transport 消息队列遥测传输),是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。 mqtt官网 https://mqtt.org MQTT 是 IBM 推出的一种针对移动端设备的基于 TCP/IP 的发布、订阅...

物联网 2022/07/16 67℃ 0条

认识CDC工具go-mysql-transfer

1.认识CDC Change Data Capture(简称CDC):其主要作用是用来捕获数据的变更,在数据发生变化之后,把变更后的数据同步到其他异构数据服务中。例如:通过订阅MySQL中binlog日志,将MySQL中发生变化的数据同步到Redis、kafka、Es等存储服务中。 在现实开发中有一些场景会用到CDC工具,例如: 数据库数据发生变化,异步更新缓存 业务中同时更新DB、cache,需要考虑边缘问题(面试问题:数据库、缓存不一致时如何解决?) 数据存储到MySQL之后,需要同步到ES以便可以使用全文检索 MySQL对全文搜索支持的不是很好,通常全站搜索都会使用E...

中间件 2022/07/06 66℃ 0条

etcd与分布式锁的实现及原理

1.关于etcd 官方文档永远是最好的学习资料,官方介绍etcd如是说。 分布式系统使用etcd作为配置管理、服务发现和协调分布式工作的一致键值存储。许多组织使用etcd来实现生产系统,如容器调度器、服务发现服务和分布式数据存储。使用etcd的常见分布式模式包括leader选举、分布式锁和监视机器活动。 Distributed systems use etcd as a consistent key-value store for configuration management, service discovery, and coordinating distributed w...

中间件 2022/07/06 62℃ 0条

docker desktop 安装 K8s 时遇到的一些问题

使用 docker desktop 在 Mac OS 上搭建 Kubernetes 环境比较简单,但是搭建过程中可能会遇到一些问题,问题解决起来就没有那么简单,特此整理相关内容以备后续之需。 笔者第一次在Mac上搭建花了一天时间 1.下载/安装 docker desktop ① 下载 docker desktop # 地址1 https://hub.docker.com/search?type=edition&offering=community&q= # 地址2 https://www.docker.com/get-started/ ② 安装成功之后,查看版本信息...

容器,常见问题,Kubernetes 2022/06/29 85℃ 0条

gitlab+reviewdog+golangci-lint实现提交MR时进行代码检测

本文使用 shell 作为 gitlab-runner 执行器 (executor) 演示提交 MR 时执行代码检查。 gitlab搭建参考文章:<基于docker搭建的gitlab实现CI/CD>,本文只是把文章中 runner 执行器由 docker 变成了 shell。 1.准备工作 安装gitlab-runner、reviewdog、golangci-lint #安装 gitlab-runner curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/scrip...

CI/CD 2022/06/22 186℃ 0条

golangci-lint配置与使用

1.golangci-lint是什么 golangci-lint按照官方的说法是用于go语言的代码静态检查工具集(因为包含它多种 Go 代码检查工具)。 官网 https://golangci-lint.run/ 特性: 1.快速:并行非执行 linters,可以复用 Go构建cache和caches分析结果 2.配置文件基于yaml语法进行配置 3.可以与常见开发工具集成,例如:VS Code、Sublime、Goland、Emacs、Vim、Atom、Github Actions 4.包含了很多 linters,不需要安装 5.执行结果输出带有美观,不仅带有颜色,还有源码行号和标...

Golang,编程工具 2022/06/22 212℃ 0条