Golang ECHO處理請求結果【4】


處理完http請求后如何響應請求,echo框架支持以字符串、json、xml、文件等格式響應請求。

echo.Context 上下文對象支持多種返回處理結果,下面分別介紹不同的響應方式。

1.以字符串方式響應請求

函數定義:
String(code int, s string) error

參數說明:

參數 說明
code http狀態碼
s 返回結果

例子:

func(c echo.Context) error {
  //http.StatusOK == 200
  return c.String(http.StatusOK, "hello echo")
  //也可以直接設置http狀態碼
  //return c.String(200, "hello echo")
}

提示: net/http包定義了多種常用的狀態碼常量,例如:http.StatusOK == 200, http.StatusMovedPermanently == 301, http.StatusNotFound == 404等,具體可以參考net/http包

2.以json格式響應請求

函數定義:
JSON(code int, i interface{}) error

參數說明:

參數 說明
code http狀態碼
i 返回結果對象,通常傳入struct對象

例子:

// User 定義
type User struct {
  Name  string `json:"name"` // 通過json標簽定義struct字段轉換成json字段的名字。
  Email string `json:"email"`
}

// Handler 控制器
func(c echo.Context) error {
  //初始化user對象
  u := &User{
    Name:  "xjs",
    Email: "xxxx@163.com",
  }
  //返回json數據
  //返回結果:{"name":"xjs", "email":"xxxx@163.com"}
  return c.JSON(200, u)
}

3.以xml格式響應請求

函數定義:
XML(code int, i interface{}) error

參數說明:

參數 說明
code http狀態碼
i 返回結果對象,通常傳入struct對象

例子:

// User 定義, 默認struct的名字就是xml的根節點名字,這里轉換成xml后根節點的名字為User.
type User struct {
  Name  string `xml:"name"` // 通過xml標簽定義struct字段轉換成xml字段的名字。
  Email string `xml:"email"`
}

// Handler 控制器
func(c echo.Context) error {
  //初始化user對象
  u := &User{
    Name:  "xjs",
    Email: "xxxx@163.com",
  }
  //返回json數據
  //返回結果:
  //  <?xml version="1.0" encoding="UTF-8"?>
  //  <User><name>xjs</name><email>xxxx@163.com</email></User>
  return c.XML(200, u)
}

4.以文件格式響應請求

如果需要實現文件下載功能,可以直接返回文件。
echo支持多種方式返回文件:

例子1:
func(c echo.Context) error {
  //通過File函數,直接返回本地文件,參數為本地文件地址。
  //函數說明:c.File("文件路徑")
  return c.File("/var/www/1.jpg")
}

例子2:
func(c echo.Context) error {
  //通過Attachment函數,返回本地文件,類似File函數,區別是可以指定下載的文件名。
  //函數說明: c.Attachment("文件路徑", "下載的文件名")
  return c.Attachment("/var/www/1.jpg", "1.jpg")
}

例子3:
func(c echo.Context) (err error) {
    data := []byte(`0306703,0035866,NO_ACTION,06/19/2006
	  0086003,"0005866",UPDATED,06/19/2006`)
	//通過Blob函數,以二進制數據格式返回文件
	//函數說明:c.Blob(狀態碼, "contentType", byte數組)
    return c.Blob(http.StatusOK, "text/csv", data)
}

例子4:
func(c echo.Context) error {
  //打開文件
  f, err := os.Open("/var/www/1.jpg")
  if err != nil {
    return err
  }
  //通過Stream函數,以stream流的方式返回文件
  //函數說明:
  //Stream(code int, contentType string, r io.Reader) error
  //參數說明:
  //  code - 狀態碼
  //  contentType - html內容類型
  //  r   - 實現io.Reader接口的struct對象都可以直接輸出內容
  return c.Stream(http.StatusOK, "image/png", f)
}

5.設置http響應頭(設置Header)

func(c echo.Context) error {
  //設置http響應 header
  c.Response().Header().Add("name", "xjs")
  
  return c.String(200, "my blogs")
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM