Dig101-Go之如何在函数内修改指针

Dig101: dig more, simplified more and know more

今天来看一个小问题:如何在函数内部修改一个指针(参数或接收者),使其值的改变能反映在函数外部

直接上代码,这样可以么?

1
2
3
4
5
6
7
8
9
type ArgType struct {
A string
b int
}

func modifyPointerArg1(arg *ArgType) {
arg = &ArgType{"arg1", 1}
fmt.Println("inside modifyPointerArg1:", arg)
}

Read More

OPA进阶-分布式利器Bundle

BundleOPA管理policydata的一种方式。

OPA实现的轻量级策略引擎,一开始就是为了云原生环境的service提供解耦的策略服务,分布式是必然要考虑的问题。

Bundle api的设计中,其实就全面考虑并体现了在分布式应用中如何更好的解耦策略引擎的管理。

比如:

  • 如何做集中配置管理
  • 如何动态更新策略
  • 如何监控策略引擎节点的状态以及决策日志收集

有了这些功能,再加上其高效的策略描述语言RegoOPA才真正称得上是云原生时代的通用策略引擎

本文将带大家简单梳理一遍Bundle的组织方式、管理api、及监控方式。

考虑到一次性过完不易消化,文末会提供一个直接可实操的docker-compose版本的demo,将全面覆盖本文细节

建议大家看完本文,本机运行去体验一下,会有更直观的理解。

Read More

OPA-重新定义规则引擎-入门篇

OPA,全称OpenPolicyAgent, 底层用Go实现,它灵活而强大的声明式语言全面支持通用策略定义。

而且,2019年4月2号OPA正式进入了CNCF,作为孵化级托管项目,详见声明

目前国内资料还比较少。

个人因为工作接触比较多,打算陆续分享些教程介绍下。

私以为策略引擎的技术选型完全可以多这个选择~~

什么是OPA

具体看官方文档 OPA philosophy docs

主要关键词是:

  • 轻量级的通用策略引擎
  • 可与服务共存
  • 集成方式可以是sidecar、主机级守护进程或库引入

opa

Read More

Dig101-Go之读懂interface的底层设计

Dig101: dig more, simplified more and know more

今天我们聊聊万物皆可为的接口(interface)的底层设计。

interface被定义为一组方法的签名。

有了它,我们可以订立方法契约,去抽象和约束实现。

而Go的基础类型,可以认为是没有实现任何方法的空interface,也就是万物皆为的interface。

(Go语言没有泛型,接口可以作为一种替代实现)

接口也被寄予厚望,主力开发Russ Cox曾说过:

从语言设计的角度来看,Go的接口是静态的,在编译时检查过的,在需要时是动态的。如果我可以将Go的一个特性导出到其他语言中,那就是接口。
Go Data Structures: Interfaces

那到底interface是怎么设计的底层结构呢?

又怎么支持的duck typing

在类型断言时又发生了什么?

带着这些问题,我们往下看

Read More