欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

創(chuàng)建Go工程化項目布局詳解

 更新時間:2022年09月26日 14:26:49   作者:范閑  
這篇文章主要介紹了創(chuàng)建Go工程化項目布局詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

如果你嘗試學習Go,或者你正在為自己建立一個Poc或者一個玩具項目,這個項目布局是沒有啥必要的,從一些簡單的事情開始(一個main文件綽綽有余)。當有更多的人參與這個項目的時候,你講需要更多的結構,包括需要一個tookit來方便生成項目的模板,盡可能大家統(tǒng)一的工程目錄布局

本文章圍繞github.com/golang-stan… 進行說明

/cmd

本項目的主干。 每個應用程序的目錄名應該與你想要的可執(zhí)行文件的名稱相匹配(例如:/cmd/myapp)

不要在這個項目中放置太多的代碼,如果你認為代碼導入并在其他項目中使用,那么他應該位于/pkg目錄中,如果代碼不是可重用的,或者你不希望其他人重用他,請將該代碼放到/internal目錄中。

/internal

不希望對外進行共享的代碼,internal目錄中也可以放置一些子包結構,已做到更加細化的切分,如:

|--internal
|   |
|   |--demo
|       |--biz
|       |--data
|       |--service

/pkg

外部應用程序可以使用的代碼庫,(例如:/pkg/publiclib)其他項目會導入這些代碼庫,所以放入到該目錄下的代碼要三思~注意:/internal目錄是確保私有包不可導入的私有方法,因為他是由Go在編譯時強制執(zhí)行的。/pkg 仍然是一種更好的方式,可以顯示的表示目錄中的代碼對于其他人來說是安全使用的好方法。

/pkg目錄內可以參考GO標準庫的組織形式,按照功能分類,/internal/pkg一般用于項目內的,跨多個應用的公共共享代碼,但是其作用域僅在單個工程內。

|--pkg
|  |
|  |--cache
|  |   |--memcache
|  |   |--redis
|  |
|  |--conf
|      |--dsn
|      |--env
|      |--flagvar
|      |--paladin

/docs,/example,/pkg,/third_parth,/tools

這些跟上文說的/pkg/internal都同屬根目錄下的目錄結構

  • /docs 放置一些項目說明文檔
  • /example 放置一些項目的使用示例
  • /thrid_parth 三方的一些依賴文件,如:idl文件
  • /tools 放置一些項目的腳手架工具,代碼生成工具等

基礎庫項目布局

每個公司都應該為不同的微服務建立一個統(tǒng)一的kit基礎包工具集。 基礎庫tookit為一個獨立的項目,公司級建議只有一個,按照功能來拆分會帶來不少的管理工作,因此建議并整合

kit包應該具備的特點

  • 統(tǒng)一
  • 標準庫方式布局
  • 高度抽象
  • 支持插件

例如下面的布局

|--cache
|    |--memcache
|         |--test
|    |--redis
|         |--test
|--conf
|    |--dsn
|    |--env 
|    |--flagvar
|    |--paladin
|          |--apollo
|               |--internal
|                     |--mockserver
|--container
|    |--group
|    |--pool
|    |--queue
|         |--aqm
|--database
|    |--hbase
|    |--sql
|    |--tidb
|--echo
|    |--types
|--log
|    |--internal
|         |--core
|         |--filewriter
|

應用程序項目布局

/api

API協(xié)議定義目錄, xxapi.proto protobuf文件以及生成go的文件,我們通常把api文檔定義在proto 文件中描述

/configs

配置文件模板或者默認配置

/test

額外的外部測試應用程序和測試數(shù)據(jù),你可以隨時根據(jù)需求構造測試目錄,對于較大的項目,有一個數(shù)據(jù)子目錄是有意義的,例如你可以使用/test/testdata(如果你需要忽略目錄中的內容)請注意,Go還會以“.”或者“_”開頭的目錄或者文件,因此在如何命名測試數(shù)據(jù)目錄方便,有著很大的靈活性。

不應該包含/src目錄

有些Go項目確實有src目錄,這是因為開發(fā)人員通常有Java的開發(fā)背景。

/internal

/biz

業(yè)務邏輯的組裝層,類似DDD中的domain,

/data

業(yè)務數(shù)據(jù)訪問,包含cache和db等封裝,實現(xiàn)了biz的repo接口,我們可能會把data和dao混合在一起,data偏重業(yè)務的含義,他所做的是將領域對象重新拿出來,我們去掉了DDD的infra層,

/service

實現(xiàn)了api定義的服務層,類似DDD的applocation層,處理DTO到biz領域實體的轉換,(DTO->DO)同事協(xié)同個類biz交互,但是不應該處理復雜邏輯

布局示意圖

|--api
|--configs
|--test
|--internal
|       |--biz
|       |--data
|       |--service

數(shù)據(jù)流向

以上就是創(chuàng)建Go工程化項目布局詳解的詳細內容,更多關于Go工程化項目布局的資料請關注腳本之家其它相關文章!

相關文章

  • Go語言reflect.TypeOf()和reflect.Type通過反射獲取類型信息

    Go語言reflect.TypeOf()和reflect.Type通過反射獲取類型信息

    這篇文章主要介紹了Go語言reflect.TypeOf()和reflect.Type通過反射獲取類型信息,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • GoLang使goroutine停止的五種方法實例

    GoLang使goroutine停止的五種方法實例

    goroutine是Go并行設計的核心,下面這篇文章主要給大家介紹了關于GoLang使goroutine停止的五種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Go語言學習之結構體和方法使用詳解

    Go語言學習之結構體和方法使用詳解

    這篇文章主要為大家詳細介紹了Go語言中結構體和方法的使用,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2022-04-04
  • golang框架gin的日志處理和zap lumberjack日志使用方式

    golang框架gin的日志處理和zap lumberjack日志使用方式

    這篇文章主要介紹了golang框架gin的日志處理和zap lumberjack日志使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • golang開發(fā)中channel使用

    golang開發(fā)中channel使用

    channel[通道]是golang的一種重要特性,正是因為channel的存在才使得golang不同于其它語言。這篇文章主要介紹了golang開發(fā)中channel使用,需要的朋友可以參考下
    2020-09-09
  • golang 并發(fā)安全Map以及分段鎖的實現(xiàn)方法

    golang 并發(fā)安全Map以及分段鎖的實現(xiàn)方法

    這篇文章主要介紹了golang 并發(fā)安全Map以及分段鎖的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Go語言操作Excel利器之excelize類庫詳解

    Go語言操作Excel利器之excelize類庫詳解

    Excelize是Go語言編寫的用于操作Office Excel文檔基礎庫,基于ECMA-376,ISO/IEC 29500國際標準,可以使用它來讀取、寫入由Excel 2007及以上版本創(chuàng)建的電子表格文檔,下面這篇文章主要給大家介紹了關于Go語言操作Excel利器之excelize類庫的相關資料,需要的朋友可以參考下
    2022-10-10
  • 詳解Go語言實現(xiàn)線性查找算法和二分查找算法

    詳解Go語言實現(xiàn)線性查找算法和二分查找算法

    線性查找又稱順序查找,它是查找算法中最簡單的一種。二分查找,也稱折半查找,相比于線性查找,它是一種效率較高的算法。本文將用Go語言實現(xiàn)這兩個查找算法,需要的可以了解一下
    2022-12-12
  • Go語言學習之context包的用法詳解

    Go語言學習之context包的用法詳解

    日常Go開發(fā)中,Context包是用的最多的一個了,幾乎所有函數(shù)的第一個參數(shù)都是ctx,那么我們?yōu)槭裁匆獋鬟fContext呢,Context又有哪些用法,底層實現(xiàn)是如何呢?相信你也一定會有探索的欲望,那么就跟著本篇文章,一起來學習吧
    2022-10-10
  • Go語言結構體Go range的學習教程

    Go語言結構體Go range的學習教程

    這篇文章主要為大家介紹了Go語言結構體Go range的學習教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07

最新評論