MCPcopy Index your code
hub / github.com/bxcodec/go-clean-arch

github.com/bxcodec/go-clean-arch @v2.0.1 sqlite

repository ↗ · DeepWiki ↗ · release v2.0.1 ↗
90 symbols 233 edges 20 files 37 documented · 41%
README

go-clean-arch

Looking for the old code ?

If you are looking for the old code, you can checkout to the v1 branch

Last Updated: May 12th 2018

Description

This is an example of implementation of Clean Architecture in Go (Golang) projects.

Rule of Clean Architecture by Uncle Bob * Independent of Frameworks. The architecture does not depend on the existence of some library of feature laden software. This allows you to use such frameworks as tools, rather than having to cram your system into their limited constraints. * Testable. The business rules can be tested without the UI, Database, Web Server, or any other external element. * Independent of UI. The UI can change easily, without changing the rest of the system. A Web UI could be replaced with a console UI, for example, without changing the business rules. * Independent of Database. You can swap out Oracle or SQL Server, for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database. * Independent of any external agency. In fact your business rules simply don’t know anything at all about the outside world.

More at https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

This project has 4 Domain layer : * Models Layer * Repository Layer * Usecase Layer
* Delivery Layer

The diagram:

golang clean architecture

The explanation about this project's structure can read from this medium's post : https://medium.com/@imantumorang/golang-clean-archithecture-efd6d7c43047

How To Run This Project

Make Sure you have run the article.sql in your mysql

#move to directory
cd $GOPATH/src/github.com/bxcodec

# Clone into YOUR $GOPATH/src
git clone https://github.com/bxcodec/go-clean-arch.git

#move to project
cd go-clean-arch

# Install Dependencies
dep ensure

# Test the code
make test

# Run Project
go run main.go

Or With go get

Make Sure you have run the article.sql in your mysql

# GET WITH GO GET
go get github.com/bxcodec/go-clean-arch

# Go to directory

cd $GOPATH/src/github.com/bxcodec/go-clean-arch

# Install Dependencies
dep ensure

# Test the code
make test

# Run Project
go run main.go

Or with docker-compose

#move to directory
cd $GOPATH/src/github.com/bxcodec

# Clone into YOUR $GOPATH/src
git clone https://github.com/bxcodec/go-clean-arch.git

#move to project
cd go-clean-arch

# Build the docker image first
make docker

# Run the application
make run

# check if the containers are running
docker ps

# Execute the call
curl localhost:9090/articles

# Stop
make stop

Tools Used:

In this project, I use some tools listed below. But you can use any simmilar library that have the same purposes. But, well, different library will have different implementation type. Just be creative and use anything that you really need.

Change log

Extension points exported contracts — how you extend this code

Repository (Interface)
Repository represent the author's repository contract [4 implementers]
author/repository.go
Repository (Interface)
Repository represent the article's repository contract [4 implementers]
article/repository.go
Usecase (Interface)
Usecase represent the article's usecases [4 implementers]
article/usecase.go

Core symbols most depended-on inside this repo

GetByID
called by 10
article/usecase.go
Delete
called by 6
article/usecase.go
Fetch
called by 5
article/usecase.go
Store
called by 5
article/usecase.go
getStatusCode
called by 4
article/delivery/http/article_handler.go
Update
called by 3
article/usecase.go
fetch
called by 3
article/repository/mysql_article.go
GetByTitle
called by 2
article/usecase.go

Shape

Method 47
Function 29
Struct 11
Interface 3

Languages

Go100%

Modules by API surface

article/repository/mysql_article.go11 symbols
article/usecase/article_ucase.go9 symbols
article/delivery/http/article_handler.go9 symbols
article/usecase.go7 symbols
article/repository.go7 symbols
article/mocks/Usecase.go7 symbols
article/mocks/Repository.go7 symbols
article/repository/mysqlarticle_test.go6 symbols
article/usecase/article_ucase_test.go5 symbols
article/delivery/http/article_test.go5 symbols
author/repository/mysql_repository.go4 symbols
middleware/middleware.go3 symbols

Datastores touched

(mysql)Database · 1 repos

For agents

$ claude mcp add go-clean-arch \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact