實戰Go web Hello world項目

實戰Go web Hello world項目

該項目有什麼特性

  • 規範了http響應
  • 每層都有標準的接口
  • 路由與控制分離
  • 提供簡潔的啓動方法

技術棧

  • go環境
  • mysql
  • gin 提供web化服務
  • go mod 提供包管理

工程結構

在這裏插入圖片描述

響應輸出

在這裏插入圖片描述

代碼結構分析

  • 包結構分析

    • com.cn
      dao : 提供數據庫層操作
      model: 提示實體類
      service: 業務處理類
      web: 提供web服務類
      router: 提供路由服務
      GoWebApplication: 該類爲服務啓動類
  • 業務層分析

web 層處理:

該層主要是對響應做統一處理.
BaseResponse
// TODO 這個地方後期需要調整爲類似於java中的泛型

      type BaseResponse struct {
        	Code int `json:"code"`
        	Message string `json:"message"`
        	Data []User `json:"data"`
        }
  • 定義標準模板
   type BaseApi interface {
   	/**
   	  添加接口Add
   	 */
   	Add(user com_cn_model.User) com_cn_model.BaseResponse
   	/**
   	  刪除接口Delete
   	*/
   	Delete(id int) com_cn_model.BaseResponse
   	/**
   	  更新接口Update
   	*/
   	Update(user com_cn_model.User) com_cn_model.BaseResponse
   	/**
   	  更新接口Update
   	*/
   	Get(user com_cn_model.User) com_cn_model.BaseResponse
   	/**
   	分頁接口List
   	*/
   	List(user com_cn_model.User , pageSize int, pageNum int) com_cn_model.BaseResponse
   }   

如果添加也是只需要實現該接口就行

  • service層
    該層主要是對業務進行處理對邏輯做判斷

  • model 定義實體類對象

     type User struct {
      Id int  `json:"id"`// 用戶的唯一標識
      Name string  `json:"name"`// 用戶的名字
      Age string  `json:"age"`// 用戶年齡
     }
    
  • dao層 對數據庫層操作
    1、獲取鏈接啊
    2、 操作數據庫等操作

  • router 提供http服務 使用的gin

    • 定義標準接口
    • 對路由接口進行分組
    • 對外提供http服務
type AppRouter struct {
	AppRouterRun
}

type AppRouterRun interface {

	/**
	 	定義啓動接口
	 */
	Run()
}

func (c AppRouter) Run(){
	r := gin.Default()
	// 
	group := r.Group("/user")
	group.GET("/get", UserRouterImpl{}.Get)
	r.Run("127.0.0.1:8080")
}

在spring中你可以理解衝RequestMapping用於窄化請求,r.Group("/user") 跟他的意思類似。

  • GoWebApplication
    該類爲總個服務的入口
import (
	router "goweb/com.cn.router"
)

/**
   應用的入口函數
*/
func  main()  {
	router.AppRouter{}.Run()
}

爲什麼我要提供一個類做爲主要啓動的類呢,因爲springboot也是提供一個main啓動,雖然沒有springboot的一些特性自動裝配等等。但是提供一個main啓動類,這樣看上去代碼整潔。

後期改進的地方

  • 提供類似於spring容器一樣的工具,這樣就不需要複雜的操作,同時也會提供代碼的可擴展性
  • 提供類似mybatis數據庫表自動轉換爲實體類對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章