// InitDbConn 数据库连接 func InitDbConn(){ dbUrl := global.ServerConfig.HisInfo.DBUrl dbUrl = fmt.Sprintf("%s?%s", dbUrl,"charset=utf8&parseTime=true") MysqlDB, err := sql.Open("mysql", dbUrl) if err !=nil{ panic(err) } err = MysqlDB.Ping() if err!=nil{ panic(err) } global.MysqlDB = MysqlDB } // 服务启动方式 func main() { global.BasePath = utils.ProjectPath() defer initialize.InitClose() initialize.InitConfig() // 初始化配置 initialize.InitLogger() // 初始化日志 initialize.InitDbConn() // 数据库连接 initialize.InitDb() // 数据库连接 fmt.Println(" gorm 连接成功...") initialize.InitSrvConn() // grpc 连接 fmt.Println(" grpc 连接成功...") global.Logger.Info("数据库连接成功...") fmt.Println(" 数据库连接成功...") global.Logger.Info(fmt.Sprintf("启动服务器,端口:%d", global.Port)) // 注册 interceptor var opts []grpc.ServerOption opts = append(opts, grpc.UnaryInterceptor(middleware.Interceptor)) g := grpc.NewServer(opts...) fee.RegisterGreeterServer(g, &Server{}) grpcDns := fmt.Sprintf("0.0.0.0:%v", global.GrpcPort) lis, err := net.Listen("tcp", grpcDns) if err != nil { panic("failed to listen:" + err.Error()) } err = g.Serve(lis) if err != nil { panic("failed to start grpc:" + err.Error()) } // 接收终止信号 quit := make(chan os.Signal) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit }
之前 python 就是单线程 初始化了一个 mysql 连接,每个请求都会排队使用 mysql 连接。 问一下 go 是不是也这种情况?各位大佬有没有遇到这种情况,多核的情况下是怎么个使用的。
![]() | 1 keepeye 2022-09-29 12:23:31 +08:00 多虑了,有连接池. 参见 *sql.DB.SetMaxOpenConns |
2 kidtest 2022-09-29 12:24:39 +08:00 |
![]() | 3 someonedeng 2022-09-29 18:41:38 +08:00 其实是个连接池 |
4 securityCoding 2022-09-30 11:50:17 +08:00 底层帮你做好了 |