「反叛Go」如何在 Go 中使用 macro

本文介绍了如何在Go中利用C预处理器实现类似macro的功能,通过编写Filter和Map宏,展示了如何在Go项目中进行函数式编程操作。文章提供了一个包含makefile的项目实例,详细解释了每个步骤,包括预处理器的设置、宏定义、宏调用以及验证结果的过程。
摘要由CSDN通过智能技术生成

今天让我们在构建过程中使用一些真正的宏!这会把我们带回到90年代的命令行工具,以及那些精通C语言预处理器的人可能会记得的一些事情。

首先,让我们创造一个问题背景:

我们将重温函数式编程的最爱:MAP, FILTERFOLDL。我们将选择两个简单的操作: map/filter。我们将使用C语言预处理器,所以我们的宏看起来会像C的宏,当然,欢迎你使用 M4或其他更通用的预处理器,也许你可以自己写。编程学习资源点击免费领取

开始

本篇文章的准备很直接:启动一个go项目,然后写一个 makefile。下面将从这个目录结构开始。

.
├── app.cgo
├── go.mod
├── macros
│   └── functions.h
└─── makefile
复制代码

看看 app.cgo 的内容是啥:

package main

import (
    "fmt"
    "math/rand"
)

type Demo struct {
    A int
}

func main() {
    as := []Demo{}
    for i := 0; i < 1000; i++ {
        as = append(as, demo.Demo{A: rand.Intn(100)})
    }
}
复制代码

需要说明的是:通常我们会使用传统的 for i := range array ,上述我们没有这样做,是因为可以更好地测试我们的宏:

bs := []Demo{}
for i := range as {
  if as[i].A < 50 {
    bs = append(bs, as[i])
  }
}
fmt.Printf("bs=%d demos\n", len(bs))
复制代码

在我运行的机器上,最终向bs中插入了506个元素。你的结果可能不同,但是在多次运行中应该是一致的结果(rand并不是真正的随机)。

不过在开始实验前,还有一件事要做:把我们的makefile补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值