美文网首页
golang uber fx 在 ipfs 中使用的学习笔记

golang uber fx 在 ipfs 中使用的学习笔记

作者: 一眼万年04 | 来源:发表于2020-07-20 17:05 被阅读0次

    fx是 go.uber.org/fx 依赖注入包,目前ipfs的启动过程采用了fx的方式

    附上学习总结:

    1.fx.New(...)是fx初始化的地方,启动时主要里面包含[]Option,启动后生成根对象app

    2.Option的设计思路是让参数传递更加优雅,libp2p也是采用这种方式,原作者文章:https://commandcenter.blogspot.com/2014/01/self-referential-functions-and-design.html

    3.目前的Option主要包含:provide start/stopTimeout supply validate invoke annotated等, ipfs只使用了provide和invoke

    4.provide是将多个构造函数放到fx中,支持组合放入,放入之后fx会对每个option展开,然后一一放入fx中,效果和单个放入每个option一样,但是方便了option过多时的管理,如:

    ```

    app :=fx.New(

    node.IPFS(ctx,cfg),

    //fx.NopLogger,

      fx.Extract(n),

    )

    ```

    5.invoke是触发调用option中构造函数的地方,只有invoke中依赖的provide才会执行,完成这个依赖才执行效果的是uber的另外一个库:go.uber.org/dig, fx像是dig的一个壳,(时间关系,未能再去研究)

    6.fx中还有一个lifecycle的概念,直接隶属于根对象app,用于完成对象启动和停止时的Hook(钩子)操作,主要包含OnStart和OnStop两个方法,用户可以在要初始化的对象中定义自己的OnStart/OnStop方法,然后append到app.lifecycle.Hooks中

    7.app的启动主要包含start stop run,其中run就是将start和stop组合起来,调用一次相当于两个都调用了,ipfs是直接用的start/stop

    8.fx.New步骤:

      1.按添加顺序加载provide

      2.加载lifecycle

      3.加载dotGraph,用于构建对象引用图,在dig中实现

      4.按照添加顺序加载invoke中的方法,都加载之后,再执行invoke中的方法

    9.app.start:按照hook append的顺序依次执行每个对象初始化时添加进lifecycle的Onstart,默认若15s内未执行完,视为出错,app.start失败,程序退出。所以不要在hook中做监听类的事情

    10.app.stop:按照hook append的相反顺序依次执行每个对象初始化时添加进lifecycle的Onstop,默认若15s内未执行完,视为出错,app.stop失败,程序退出。所以不要在hook中做监听类的事情

    11.总流程:

    相关文章

      网友评论

          本文标题:golang uber fx 在 ipfs 中使用的学习笔记

          本文链接:https://www.haomeiwen.com/subject/wbsykktx.html