Makefile 入门教程

Makefile 是一个非常强大的构建自动化工具,用于管理项目的编译、链接和其他构建任务。以下是一个详细的 Makefile 使用文档,包括基本概念、语法、示例和常见任务。 1. 基本概念 目标 (Targets):在 Makefile 中,目标是要生成的文件或执行的操作的名称。目标可以是文件名,也

Gossip in Hyperledger Fabric

1. Gossip协议基础 1.1 什么是分布式系统 分布式系统(Distributed System)是由多台计算机或计算节点组成的计算机系统,这些计算节点通过网络连接在一起,并协同工作以完成共同的任务或提供服务。与单一计算机系统不同,分布式系统中的计算节点可以分布在不同的地理位置。 以下是分布式

Go with Protobuf

原文在这里。 本教程为 Go 程序员提供了使用Protocol buffer的基本介绍。 本教程使用proto3向 Go 程序员介绍如何使用 protobuf。通过创建一个简单的示例应用程序,它向你展示了如何: 在.proto中定义消息格式 使用protocol buffer编译器 使用Go pro

设计模式之工厂模式

工厂模式是一种创建型设计模式,它提供了一个用于创建对象的接口,但允许子类决定实例化哪个类。工厂方法让一个类的实例化延迟到其子类。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在软件开发中,对象的创建和使用是常见的操作。然而,对象的创建过程常常会涉及到复杂的逻辑和多变的需求。为了

MySQL 的 InnoDB 存储引擎简介

MySQL 是世界上最流行的开源关系型数据库管理系统之一,而其中的存储引擎则是其关键组成部分之一。InnoDB 存储引擎在 MySQL 中扮演了重要角色,提供了许多高级功能和性能优化,适用于各种应用程序和工作负载。本文将深入介绍 InnoDB 存储引擎的各个方面,以帮助您更好地理解它的特性和优势。

解析类型参数

原文在这里。 由 Ian Lance Taylor 发布于2023年9月26日 slices 包函数签名 slices.Clone 函数很简单:它返回一个任意类型切片的副本: func Clone[S ~[]E, E any](s S) S { return append(s[:0:0], s...

在Go中如何实现并发

Go语言的并发机制是其强大和流行的一个关键特性之一。Go使用协程(goroutines)和通道(channels)来实现并发编程,这使得编写高效且可维护的并发代码变得相对容易。下面是Go的并发机制的详细介绍: 协程(Goroutines): 协程是Go中的轻量级线程,由Go运行时管理。与传统线程相比

Merkle Tree 简介

Merkle 树(Merkle Tree)是一种树状数据结构,通常用于验证大规模数据集的完整性和一致性。它的名字来源于其发明者 Ralph Merkle。Merkle 树在密码学、分布式系统和区块链等领域得到广泛应用,尤其在区块链中,它用于验证交易和区块的完整性,确保数据不被篡改。 下面是 Merk

使用 gopkg.in/yaml.v3 解析 YAML 数据

YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件和数据交换。在 Go 语言中,你可以使用 gopkg.in/yaml.v3 包来解析和生成 YAML 数据。本文将介绍如何使用 gopkg.in/yaml.v3 来处理 YAML 数据。 安

Go 1.22 中的 For 循环

原文在这里。 由 David Chase and Russ Cox 发布于2023年9月19日 Go 1.21 版本包含了对 for 循环作用域的预览更改,我们计划在 Go 1.22 中发布此更改,以消除其中一种最常见的 Go 错误。 问题 如果你写过一定量的 Go 代码,你可能犯过一个错误,即在迭

从源码中解析fabric区块数据结构(一)

从源码中解析fabric区块数据结构(一) 前言 最近打算基于fabric-sdk-go实现hyperledger fabric浏览器,其中最重要的一步就是解析fabric的上链区块。虽说fabric是Golang实现的,但直到2021年2月1号才发布了第一个稳定版fabric-sdk-go,而且官

跟着文档学Fabric:获取通道配置

原文在这里。 1. 获取通道配置 peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c $CH_NAME --tls --cafile $TLS_ROOT_CA 上述命令需要在peer容器中执行 这一步得到对应通道的pr

Linux下rz命令上传文件失败处理

在Linux服务器上使用rz命令上传文件时,有时候会遇到文件上传失败,此时会在当前目录下生成一堆大小为0的乱码文件,如下图所示: 这些文件有时候rm命令也无法删除,下面提供两种通过find命令删除的方法。 方法一 find . -maxdapth 1 -size 0 | xargs rm -rf 方

年会抽奖实现

最近接手的项目中要新增一个抽奖功能,场景类似年会上的抽奖,触发抽奖的只有一个动作,不存在多线程操作导致所抽奖品已经被抽完的情况。简单来说,就是不存在需要锁的场景,也不存在数据同步的情况。 这种场景的抽奖是最容易实现的,我这里的实现思路就是首先获取参与抽奖的总数,然后根据奖品数量生成几个随机数来确定中

gin启动https支持

gin是一个使用Go语言开发的Web框架,具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,支持中间件等。 在工作中有时候需要支持https服务,gin可以通过中间件的方式来提供对https的支持,这里使用的是secure来提供https服务支持。这里给出一个简单的使用示例: 示例代码 pac

验证来自微信服务器的消息

内容来自微信官方文档。 接入微信公众平台开发,开发者需要按照如下步骤完成: 填写服务器配置 验证服务器地址的有效性 依据接口文档实现业务逻辑 微信官方的文档已经写得很详细,官方给出的例子是基于php的,这里给出go实现的消息验证,http框架使用的是gin。 type WeChatVerify st

处理来自微信的文本消息

官方文档在这里。 我们的公众号服务器可以接收来自微信服务器的普通消息,包括: 文本消息 图片消息 语音消息 小视频消息 地理位置消息 链接消息 这里以文本消息为例,介绍如何处理微信服务器转发给我们的用户消息。 当普通微信用户向公众账号发消息时,微信服务器将向我们填写写的URL上发送一条包含XML数据

Jekyll安装

本文来自Jekyll官方文档。 简介 Jekyll是一个静态网站生成器,它可以把Markdown写就的文本根据指定的布局生成静态网站。你可以调整网站的外观、URL、页面展示数据等信息。 准备工作 Jekyll的安装需要以下几个软件: Ruby v2.5.0或更高版本 RubyGems gcc和mak

Nginx使用

docker部署Nginx服务 Nginx服务docker部署时,可以使用一下compose文件进行简单部署: version: '3.7' services: nginx: image: nginx:1.23.3-alpine volumes: - ./default.conf:/etc/ngin

Gorm日志设置

Logger Gorm提供了一个默认的logger实现,默认情况下日志数据级别为warn,同时输出慢SQL: Default = New(log.New(os.Stdout, "\r\n", log.LstdFlags), Config{ SlowThreshold: 200 * time.Mill