golang fx 依赖注入包学习笔记

这篇文章介绍一下go.uber.org/fx 包的使用,也是自己的学习笔记

下面代码是分析官方示例程序写的,包地址见godoc

package main

import (
	"context"
	"fmt"
	"log"
	"net/http"
	"os"
	"time"

	"go.uber.org/fx"
)

// 这里把main函数放到最前面,可以清晰的先了解代码调用方法,具体函数定义,自行跳跃过去查看
func main() {
   
   

	// 整个fx包执行的顺序是
	// 1. 先执行fx.Invoke中的函数列表,按顺序一个一个执行
	// 2. fx.Provide中构造函数,在Invoke需要的时候,再去执行
	// 执行Invoke中的函数时,当前执行的函数传入参数如果用到的变量,则先调用其构造函数

	// 这里构造函数构造出来的变量不需要明显的进行定义,会自动传给invoke函数

	// 比如nothingUserInvoke 这里没有任何传入参数,则在它之前不执行任何构造函数
	//
	// Register执行时,需要mux *http.ServeMux, h http.Handler, logger *log.Logger 三个传入参数,则执行对应的三个构造函数
	// 但是在执行 NewHandler构造函数时,需要logger,则在其之前执行NewLogger
	//
	// invokeUseMyconstruct 执行时,需要先执行 NewMyConstruct

	// 至于在fx.Lifecycle 中注册的Onstart OnStop 函数,是在app start 之后,按构造函数的顺序来执行,stop时,按相反顺序执行
	app := fx.New(

		// 一系列构造函数
		fx.Provide(
			NewMyConstruct,
			NewHandler,
			NewMux,
			NewLogger,
		),

		// 构造函数执行完后,执行初始化函数
		fx.Invoke(invokeNothingUse, invokeRegister, invokeAnotherFunc, invokeUseMyconstruct),
	)

	startCtx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
	defer cancel()
	if err := app.Start(startCtx); err 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值