入门golang的基本设计

彭海阳
2023-12-01

你好,golang

func initLog() {
	logger.SetLogLevel(config.Config.LogLevel)
	if config.Config.SentryDsn != "" {
		hooks.SetEnableSentry()
		hooks.SetSentryDSN(config.Config.SentryDsn)
	}
	logger.SetAppName(config.Config.AppName)
	logger.SetLogPath(config.Config.LogPath)
	logger.InitLog()
}

func initTracer() {
	span, _, err := tracer.NewJaegerTracer(config.Config.AppName, config.Config.JaegerAgentUri)
	if err != nil || span == nil {
		logger.Error("Failed to init tracer: ", err)
	}
}

func initSecurity() {
	security.RegisterRedirectUrlVolidator(&security.DefaultRedirectUrlValidate{})
}

func main() {
	//初始化 tracer
	initLog()
	initTracer()

	// 初始化安全配置
	initSecurity()

	// 初始化队列
	mq.Init()
	logID := common.Uniqid()

	logger.Info(logID, config.Config.Env, "初始化数据库连接")
	db.Init()

	logger.Info(logID, config.Config.Env, "开始注册路由")

	redis.Redis.Cache = redishelper.MustNewClient(config.Config.Redis.Cache)
	logger.Info(logID, config.Config.Env, "redis start")

	engine := router.Init()

	logger.Info(logID, "开始初始化GRPC连接")
	if err := model.Init(logID); err != nil {
		logger.Error(logID, config.Config.Env, " GRPC相关服务初始化失败,请及时关注 ", err)
	}

	httpServer := &http.Server{
		Addr:         config.Config.Host + ":" + config.Config.Port,
		Handler:      engine,
		ReadTimeout:  5 * time.Second,
		WriteTimeout: 10 * time.Second,
	}

	listen, err := net.Listen("tcp", config.Config.Host+":"+config.Config.GrpcPort) // Address gRPC服务地址
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}

	// grpcServer := grpc.NewServer(grpc.UnaryInterceptor(otgrpc.OpenTracingServerInterceptor(tracer.GetTracer())))
	grpcServer := grpc.NewServer(tracer.GrpcServerOption())

	// 与http的注册路由类似,此处将所有服务注册到grpc服务器上,
	pb.RegisterUserInfoServer(grpcServer, gc.UserInfo{})
	g.Go(func() error {
		err := httpServer.ListenAndServe()
		if nil != err {
			logger.Error(config.Config.Env, " user-ctl http start err ", err)
			log.Fatal("user-ctl http start err", err)
		}
		return err
	})

	g.Go(func() error {
		err := grpcServer.Serve(listen)
		if nil != err {
			logger.Error(config.Config.Env, " user-ctl grpcservice start err ", err)
			log.Fatal("user-ctl grpcService start err", err)
		}
		return err
	})

	if err := g.Wait(); err != nil {
		logger.Error("g.Wait err", err)
		log.Fatal(err)
	}
}

// TestAes 本地调试测试用
func TestAes(txt string) {
	encrypt, err := lib.Aes{}.AesEncrypt(txt, []byte(config.Config.AccountLoginKey), []byte(config.Config.AccountLoginIv))
	if err != nil {
		fmt.Printf("[ERROR]TestAes: %s\n", err)
		return
	}
	fmt.Printf("[INFO]TestAes[aes:%s]\n", encrypt)
}

// TestSign 本地调试测试用
func TestSign(jsonBody string) {
	jsonBodyBytes := []byte(jsonBody)
	var amap = make(map[string]interface{})
	_ = json.Unmarshal(jsonBodyBytes, &amap)
	appid := lib.Tools{}.Strval(amap["appid"]) //appid强制转化为string类型
	amap["appid"] = appid
	amap["secret"] = config.Config.SignConf[appid]
	md5Str := lib.Tools{}.CreateSign(amap)

	fmt.Printf("[INFO]TestSign[md5:%s]\n", md5Str)
}
 类似资料: