超实用教程!一探Golang怎样践行Clean Architecture?
Posted 云加社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超实用教程!一探Golang怎样践行Clean Architecture?相关的知识,希望对你有一定的参考价值。
五、总结 以上就是我对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?的主要内容,如果未能解决你的问题,请参考以下文章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(
局域网映射外网教程(超实用)