国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GO學(xué)習(xí)之 網(wǎng)絡(luò)通信(Net/Http)

這篇具有很好參考價(jià)值的文章主要介紹了GO學(xué)習(xí)之 網(wǎng)絡(luò)通信(Net/Http)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

GO系列

1、GO學(xué)習(xí)之Hello World
2、GO學(xué)習(xí)之入門(mén)語(yǔ)法
3、GO學(xué)習(xí)之切片操作
4、GO學(xué)習(xí)之 Map 操作
5、GO學(xué)習(xí)之 結(jié)構(gòu)體 操作
6、GO學(xué)習(xí)之 通道(Channel)
7、GO學(xué)習(xí)之 多線程(goroutine)
8、GO學(xué)習(xí)之 函數(shù)(Function)
9、GO學(xué)習(xí)之 接口(Interface)
10、GO學(xué)習(xí)之 網(wǎng)絡(luò)通信(Net/Http)
11、GO學(xué)習(xí)之 微框架(Gin)
12、GO學(xué)習(xí)之 數(shù)據(jù)庫(kù)(mysql)
13、GO學(xué)習(xí)之 數(shù)據(jù)庫(kù)(Redis)
14、GO學(xué)習(xí)之 搜索引擎(ElasticSearch)
15、GO學(xué)習(xí)之 消息隊(duì)列(Kafka)
16、GO學(xué)習(xí)之 遠(yuǎn)程過(guò)程調(diào)用(RPC)
17、GO學(xué)習(xí)之 goroutine的調(diào)度原理

前言

按照公司目前的任務(wù),go 學(xué)習(xí)是必經(jīng)之路了,雖然行業(yè)卷,不過(guò)技多不壓身,依舊努力!?。?br> 在JAVA中我們可以使用 HttpClient來(lái)發(fā)起一個(gè) Http 連接通過(guò)Tcp/Ip協(xié)議來(lái)獲取數(shù)據(jù),不過(guò)在Spring等框架中做了各種封裝,例如RestTemplateOpenFeign的組件,可以很方便的發(fā)起一個(gè)網(wǎng)絡(luò)請(qǐng)求,也有SpringMVC等框架供我們提供一個(gè)對(duì)外的接口。
那在 Go 語(yǔ)言中的網(wǎng)絡(luò)編程非常簡(jiǎn)單和強(qiáng)大,內(nèi)置了標(biāo)準(zhǔn)庫(kù)net/http,提供了豐富的函數(shù)和類(lèi)型,用于發(fā)起Http請(qǐng)求和 Http服務(wù)器。

一、HTTP服務(wù)端

下面示例實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的API接口訪問(wèn),首先定義一個(gè)函數(shù)(apiHandler)來(lái)處理請(qǐng)求,就類(lèi)似于SpringMVC中的 handler 請(qǐng)求處理器。
然后通過(guò)Go語(yǔ)言提供的標(biāo)準(zhǔn)庫(kù)中的net/http包中的 http定義一個(gè)接口,配置接口名為 /go,配置接口監(jiān)聽(tīng)地址為 127.0.0.1:8080 端口。

package main

import (
	"fmt"
	"net/http"
)

// 請(qǐng)求處理器函數(shù)
func apiHandler(response http.ResponseWriter, request *http.Request) {
	fmt.Println(request.RemoteAddr, "連接成功!")
	// 請(qǐng)求方式
	fmt.Println("method:", request.Method)
	// 請(qǐng)求路徑和參數(shù)
	fmt.Println("url:", request.URL.Path)
	fmt.Println("header:", request.Header)
	fmt.Println("body", request.Body)
	// 相應(yīng)
	response.Write([]byte("Hello, 你好,歡迎訪問(wèn)?。。?))
}

func main() {
	// 通過(guò) http 定義一個(gè)接口 http://127.0.0.1:8080/go
	http.HandleFunc("/go", apiHandler)
	// 監(jiān)聽(tīng)地址和端口
	http.ListenAndServe("127.0.0.1:8080", nil)
}

運(yùn)行結(jié)果:
GO學(xué)習(xí)之 網(wǎng)絡(luò)通信(Net/Http),golang學(xué)習(xí),golang
會(huì)發(fā)現(xiàn),get 和 post 兩種請(qǐng)求方式都支持。

二、HTTP客戶端

下面的示例中,用 net/http 包中的 http 通過(guò) Get() 方法發(fā)起請(qǐng)求,返回結(jié)果賦值給 resp,并用 defer 來(lái)延遲關(guān)閉連接。
定義一個(gè) byte 類(lèi)型數(shù)字,固定長(zhǎng)度 1024,從返回體中循環(huán)讀取數(shù)據(jù)給 buf,用 string 函數(shù)包裝成字符串輸出。

package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	resp, _ := http.Get("http://127.0.0.1:8080/go")
	// 關(guān)閉連接, defer 延遲關(guān)閉
	defer resp.Body.Close()

	fmt.Println("請(qǐng)求狀態(tài):", resp.Status)
	fmt.Println("請(qǐng)求頭:", resp.Header)

	buf := make([]byte, 1024)
	for {
		// 接受服務(wù)器信息
		n, err := resp.Body.Read(buf)
		if err != nil && err != io.EOF {
			fmt.Println("請(qǐng)求出錯(cuò):", err)
		} else {
			fmt.Println("請(qǐng)求成功!")
			result := string(buf[:n])
			fmt.Println("請(qǐng)求結(jié)果:", result)
			break
		}

	}
}

運(yùn)行結(jié)果:

PS D:\workspaceGo\src\http> go run .\httpClient.go
請(qǐng)求狀態(tài): 200 OK
請(qǐng)求頭: map[Content-Length:[37] Content-Type:[text/plain; charset=utf-8] Date:[Sun, 06 Aug 2023 15:47:04 GMT]]
請(qǐng)求成功!
請(qǐng)求結(jié)果: Hello, 你好,歡迎訪問(wèn)?。?!

三、第三方的 HTTP 包

Go 語(yǔ)言還有許多第三方的 HTTP 客戶端和服務(wù)器庫(kù),可以幫助我們更方便地實(shí)現(xiàn) HTTP 請(qǐng)求和服務(wù)。一些常用的 HTTP 客戶端庫(kù)有 github.com/go-resty/resty、github.com/parnurzeal/gorequest 等;HTTP 服務(wù)器庫(kù)有 github.com/gin-gonic/gingithub.com/gorilla/mux 等。
這些庫(kù)提供了更多的功能和便利性,可以根據(jù)項(xiàng)目需求選擇適合的庫(kù)來(lái)使用。

我們首先創(chuàng)建了一個(gè) resty 客戶端,然后使用 R() 函數(shù)創(chuàng)建一個(gè)請(qǐng)求。接著使用 Get 方法發(fā)起一個(gè) GET 請(qǐng)求,并將響應(yīng)保存在 response 變量中。我們檢查了響應(yīng)的狀態(tài)碼,如果狀態(tài)碼不是 200,表示請(qǐng)求失敗,我們就輸出相應(yīng)的提示信息。最后,我們獲取了響應(yīng)的內(nèi)容并輸出。

package main

import (
	"fmt"

	"gopkg.in/resty.v1"
)

func main() {
	// 創(chuàng)建一個(gè)客戶端
	client := resty.New()

	// 發(fā)送 Get 請(qǐng)求
	response, err := client.R().Get("http://127.0.0.1:8080/go")
	if err != nil {
		fmt.Println("請(qǐng)求失?。?, err)
		return
	}

	// 請(qǐng)求響應(yīng)
	if response.StatusCode() != 200 {
		fmt.Println("請(qǐng)求失敗,狀態(tài)碼:", response.StatusCode())
		return
	}

	// 獲取響應(yīng)內(nèi)容
	body := response.Body()
	fmt.Println("響應(yīng)結(jié)果:", string(body))
}

運(yùn)行結(jié)果:

PS D:\workspaceGo\src\http> go run .\httpResty.go
響應(yīng)結(jié)果: Hello, 你好,歡迎訪問(wèn)?。?!

四、總結(jié)

go-resty/resty 包提供了豐富的功能,包括發(fā)送 GET、POST、PUT、DELETE 等請(qǐng)求,處理請(qǐng)求和響應(yīng)的頭部、查詢參數(shù)、表單數(shù)據(jù)、JSON 數(shù)據(jù)等。它還支持連接池、超時(shí)設(shè)置、重試機(jī)制等功能,是一個(gè)非常強(qiáng)大和方便的 HTTP 請(qǐng)求庫(kù),特別適合在實(shí)際開(kāi)發(fā)中使用。

現(xiàn)階段還是對(duì) Go 語(yǔ)言的學(xué)習(xí)階段,想必有一些地方考慮的不全面,本文示例全部是親自手敲代碼并且執(zhí)行通過(guò)。
如有問(wèn)題,還請(qǐng)指教。
評(píng)論去告訴我哦?。。∫黄饘W(xué)習(xí)一起進(jìn)步?。?!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-645988.html

到了這里,關(guān)于GO學(xué)習(xí)之 網(wǎng)絡(luò)通信(Net/Http)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 通過(guò)redis學(xué)網(wǎng)絡(luò)(1)-用go基于epoll實(shí)現(xiàn)最簡(jiǎn)單網(wǎng)絡(luò)通信框架

    通過(guò)redis學(xué)網(wǎng)絡(luò)(1)-用go基于epoll實(shí)現(xiàn)最簡(jiǎn)單網(wǎng)絡(luò)通信框架

    本系列主要是為了對(duì)redis的網(wǎng)絡(luò)模型進(jìn)行學(xué)習(xí),我會(huì)用golang實(shí)現(xiàn)一個(gè)reactor網(wǎng)絡(luò)模型,并實(shí)現(xiàn)對(duì)redis協(xié)議的解析。 系列源碼已經(jīng)上傳github redis的網(wǎng)絡(luò)模型是基于epoll實(shí)現(xiàn)的,所以這一節(jié)讓我們先基于epoll,實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的服務(wù)端客戶端通信模型。在實(shí)現(xiàn)前,先來(lái)簡(jiǎn)單的了解下

    2024年02月08日
    瀏覽(16)
  • HTTP與HTTPS:網(wǎng)絡(luò)通信的安全衛(wèi)士

    目錄 引言 1. HTTP(Hypertext Transfer Protocol) 1.1HTTP的基本概念 1.2?HTTP的工作原理 1.3 HTTP請(qǐng)求與響應(yīng) 1.4HTTP特點(diǎn) 1.4.1 無(wú)狀態(tài)性 1.4.2 明文傳輸 1.4.3 簡(jiǎn)單快速 1.5 HTTP的安全性 2. HTTPS(Hypertext Transfer Protocol Secure) 2.1HTTPS:為網(wǎng)絡(luò)通信加上安全鎖 2.2HTTPS相較于HTTP有以下顯著特點(diǎn) 2.2.1 數(shù)

    2024年01月20日
    瀏覽(63)
  • python基于http的網(wǎng)絡(luò)通信和網(wǎng)站端口暴露;Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用

    HTTP(Hypertext Transfer Protocol)即超文本傳輸協(xié)議,是Web應(yīng)用程序使用的協(xié)議,在Web瀏覽器和Web服務(wù)器之間傳遞HTML頁(yè)面和數(shù)據(jù)。HTTP是基于TCP/IP協(xié)議來(lái)傳輸數(shù)據(jù)的,是一種無(wú)狀態(tài)的協(xié)議。 關(guān)鍵特點(diǎn): 支持客戶/服務(wù)器模式:Web瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)器發(fā)送HTTP請(qǐng)求,

    2024年02月04日
    瀏覽(29)
  • 網(wǎng)絡(luò)通信協(xié)議-HTTP、WebSocket、MQTT的比較與應(yīng)用

    網(wǎng)絡(luò)通信協(xié)議-HTTP、WebSocket、MQTT的比較與應(yīng)用

    在今天的數(shù)字化世界中,各種通信協(xié)議起著關(guān)鍵的作用,以確保信息的傳遞和交換。HTTP、WebSocket?和?MQTT?是三種常用的網(wǎng)絡(luò)通信協(xié)議,它們各自適用于不同的應(yīng)用場(chǎng)景。本文將比較這三種協(xié)議,并探討它們的主要應(yīng)用領(lǐng)域。 HTTP (超文本傳輸協(xié)議) HTTP ?是最常見(jiàn)的協(xié)議之一

    2024年02月05日
    瀏覽(40)
  • VS2019利用Curl庫(kù)實(shí)現(xiàn)HTTP網(wǎng)絡(luò)通信(C++)

    VS2019利用Curl庫(kù)實(shí)現(xiàn)HTTP網(wǎng)絡(luò)通信(C++)

    ????????C++實(shí)現(xiàn)HTTP網(wǎng)絡(luò)通信,一般采用兩種方式,熟悉TCP協(xié)議的大哥可能不需要查這方面的知識(shí);還有一種方式就是使用第三方庫(kù),Qt環(huán)境下可以用QNetworkRequest實(shí)現(xiàn)很方便,再就是Curl了,Curl是個(gè)獨(dú)立的第三方庫(kù),不依賴于qt環(huán)境,可以實(shí)現(xiàn)GET和POST方式通信。 ? ??????

    2024年02月16日
    瀏覽(24)
  • 網(wǎng)絡(luò)通信學(xué)習(xí)筆記之 ———Socket網(wǎng)絡(luò)通信

    網(wǎng)絡(luò)通信學(xué)習(xí)筆記之 ———Socket網(wǎng)絡(luò)通信

    一、套接字 1、什么是套接字 ? 套接字(socket)是一種通信機(jī)制,是通信的兩方的一種約定,socket屏蔽了各個(gè)協(xié)議的通信細(xì)節(jié), 對(duì)用戶進(jìn)程提供了一套可以統(tǒng)一、方便的使用TCP/IP協(xié)議的接口。這使得程序員無(wú)需關(guān)注協(xié)議本身,直 接使用socket提供的接口與不同主機(jī)間的進(jìn)程互

    2024年02月08日
    瀏覽(26)
  • 探究代理技術(shù)在網(wǎng)絡(luò)安全、爬蟲(chóng)與HTTP通信中的多重應(yīng)用

    在當(dāng)今高度互聯(lián)的世界中,代理技術(shù)在網(wǎng)絡(luò)安全、爬蟲(chóng)開(kāi)發(fā)以及HTTP通信中扮演著舉足輕重的角色。本文將深入探討Socks5代理、IP代理以及HTTP代理在這些領(lǐng)域中的多重應(yīng)用,探索其如何為我們創(chuàng)造更安全、高效的網(wǎng)絡(luò)環(huán)境。 1. Socks5代理:構(gòu)建安全通道與繞過(guò)限制 Socks5代理作為

    2024年02月11日
    瀏覽(15)
  • 常見(jiàn)網(wǎng)絡(luò)通信協(xié)議(http、https、ws)及安全協(xié)議(SSL、TLS、XTLS)

    常見(jiàn)網(wǎng)絡(luò)通信協(xié)議(http、https、ws)及安全協(xié)議(SSL、TLS、XTLS)

    文章內(nèi)容刪除了一大半不合適的內(nèi)容,發(fā)不出來(lái),你懂得。?? HTTP和HTTPS都屬于 應(yīng)用層協(xié)議 ,它們都是用于從萬(wàn)維網(wǎng)(WWW)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它們都是 基于 TCP/IP 協(xié)議 來(lái)傳遞數(shù)據(jù)的,支持 客戶端-服務(wù)器模式 的通信。 HTTP和HTTPS的區(qū)別主要在于HTT

    2024年02月10日
    瀏覽(39)
  • Android Studio App開(kāi)發(fā)之網(wǎng)絡(luò)通信中使用GET方式調(diào)用HTTP接口的講解及實(shí)戰(zhàn)(附源碼 超詳細(xì)必看)

    Android Studio App開(kāi)發(fā)之網(wǎng)絡(luò)通信中使用GET方式調(diào)用HTTP接口的講解及實(shí)戰(zhàn)(附源碼 超詳細(xì)必看)

    運(yùn)行有問(wèn)題或需要源碼請(qǐng)點(diǎn)贊關(guān)注收藏后評(píng)論區(qū)留言~~~ Android開(kāi)發(fā)采用Java作為編程語(yǔ)言,也就沿用了Java的HTTP連接工具HttpURLConnection,不管是訪問(wèn)HTTP接口還是上傳或下載文件都是用它來(lái)實(shí)現(xiàn)。它有幾個(gè)關(guān)鍵點(diǎn) 1:HttpURLConnection默認(rèn)采取國(guó)際通行的UTF-8編碼,中文用GBK編碼 2:多數(shù)

    2024年02月05日
    瀏覽(22)
  • libcurl是一個(gè)用于進(jìn)行網(wǎng)絡(luò)通信的開(kāi)源庫(kù),提供了各種功能和選項(xiàng),可以用于發(fā)送和接收HTTP請(qǐng)求、FTP操作等

    libcurl是一個(gè)用于進(jìn)行網(wǎng)絡(luò)通信的開(kāi)源庫(kù),提供了各種功能和選項(xiàng),可以用于發(fā)送和接收HTTP請(qǐng)求、FTP操作、SMTP郵件等。它支持多種協(xié)議,包括HTTP、HTTPS、FTP、FTPS、SMTP、POP3、IMAP等。 以下是libcurl庫(kù)的一些特點(diǎn)和功能: 跨平臺(tái):libcurl可在多個(gè)操作系統(tǒng)上使用,包括Windows、Lin

    2024年01月19日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包