超实用教程!一探Golang怎样践行Clean Architecture?

Posted 云加社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超实用教程!一探Golang怎样践行Clean Architecture?相关的知识,希望对你有一定的参考价值。


Article ID Title Content UpdatedAt time.Time CreatedAt time.Time repo( IArticleRepo Fetch(ctx context.Context, createdDate time.Time, num mysqlArticleRepository DB *gorm.DB &mysqlArticleRepositoryDB num err = m.DB.WithContext(ctx).Model(&models.Article). Select( Where( articleService articleRepo repo.IArticleRepo &articleService articleRepo: a, num == num = res, err = a.articleRepo.Fetch(ctx, createdDate, num) err != main( db := app.InitDB() repository := repo.NewMysqlArticleRepository(db) articleService := service.NewArticleService(repository) handler := handlers.NewArticleHandler(articleService) router := api.NewRouter(handler) engine := app.NewGinEngine() server := app.NewServer(engine, router) server.Start()( *app. wire. app. repo. service. handlers. api. app. app. &app.main( * engine := app.NewGinEngine() db := app.InitDB() iArticleRepo := repo.NewMysqlArticleRepository(db) iArticleService := service.NewArticleService(iArticleRepo) articleHandler := handlers.NewArticleHandler(iArticleService) router := api.NewRouter(articleHandler) server := app.NewServer(engine, router) server server.-source .\\repo\\repo.-mock-source .\\service\\service.-mock


err error db *sql.DB db, mock, err = sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual)) err != gormDB, err = gorm.Open(mysql.New(mysql.Config SkipInitializeWithVersion: Conn: db, ), &gorm.Config) != err log.Fatalf( createAt := time.Now() updateAt := time.Now() articles = []models.Article limit := mock, db := getSqlMock() mock.ExpectQuery( WithArgs(createAt). WillReturnRows(sqlmock.NewRows([] AddRow(articles[ AddRow(articles[ repository := NewMysqlArticleRepository(db) result, err := repository.Fetch(context.TODO(), createAt, limit) assert.Nil(t, err) assert.Equal(t, articles, result)* defer ctl. now := time. mockRepo := mock. gomock. mockRepo.EXPECT(). ) service := fetch, _ := service. fmt. ctl := gomock.NewController(t) ctl.Finish() createAt, _ := time.Parse( mockService := mock.NewMockIArticleService(ctl) gomock.InOrder( mockService.EXPECT().Fetch(gomock.Any(), createAt, ) article := NewArticleHandler(mockService) gin.SetMode(gin.TestMode) r := gin.Default() r.GET( req, err := http.NewRequest(http.MethodGet, err != t.Fatalf( w := httptest.NewRecorder() r.ServeHTTP(w, req) w.Code != http.StatusOK t.Fatalf(



五、总结


以上就是我对golang的项目中发现问题的一点点总结与思考,思考的先不管对不对,总归是解决了我们当下的一些问题。不过,项目总归是需要不断重构完善的,所以下次有问题的时候下次再改呗。


对于我上面的总结和描述感觉有不对的地方,请随时指出来一起讨论。


项目代码位置:https://github.com/devYun/go-clean-architecture


参考资料:

1.The Clean Architecture

2.bxcodec/go-clean-arch

3.Trying Clean Architecture on Golang

4.理解一下依赖注入,以及如何用wire



 作者简介


罗志赟

腾讯后台开发工程师

腾讯后台开发工程师,负责IEG游戏推荐相关后端业务,深入研究过Go runtime相关代码,喜欢专研技术细节,探索技术中有趣的实践分享给大家。



 推荐阅读


高并发场景下,6种方案,保证缓存和数据库的最终一致性!

颠覆Kafka的统治,新一代云原生消息系统Pulsar震撼来袭!

七年激荡!Serverless的下一站将去往何方?

基于流计算Oceanus和Elasticsearch Service构建百亿级实时监控系统



局域网映射外网教程(超实用)

废话不多说,直接上步骤

第一步

    打开网址:http://natapp.cn/ 

第二步

   下载客户端 如下图所示:

  技术分享

第三步

     解压出来  技术分享

第四步 

   cmd命令进入此目录技术分享,回车即可得到映射出来的访问地址 !

 

            End!

以上是关于超实用教程!一探Golang怎样践行Clean Architecture?的主要内容,如果未能解决你的问题,请参考以下文章

Python篇---Python3.5在Centoos的安装教程--超实用

超详细教程!Golang实现一个微信抽奖小程序后台

iOS锁屏超实用功能化!设置教程

Vue.js超实用干货教程免费领

开发工具使用技巧视频教程(超实用)

超实用教程,教你用墨刀做出小红书app原型