Go語言程式設計第五章網路程式設計

2021-08-21 04:36:30 字數 3014 閱讀 5283

第五章  網路程式設計

1 以前其他的socket程式設計步驟

2 無論使用什麼協議建立什麼形式的連線,都只需要呼叫net.dial( )函式,函式原型如下

func  dial( net , addr  string ) ( conn , error )

net引數是網路協議的名字,addr引數是ip位址或網域名稱,而埠號以「:」的形式跟隨在位址或網域名稱的後面

3 dial( )函式支援如下幾種網路協議:tcp,tcp4(僅限ipv4),tcp6(僅限ipv6),udp,udp4(僅限ipv4),udp6(僅限ipv6),ip,ip4(僅限ipv4),ip6(僅限ipv6)。

4 其實dial( )函式是對dialtcp( ),dialudp( ),dialip( )和dialunix( )的封裝。這些函式原型如下

5 例子

tcpaddr,err := net.resolvetcpaddr("tcp4",service)   // 解析位址和埠號

conn2,err := net.dialtcp("tcp",nil,tcpaddr) // 建立鏈結

6 net還包含了一系列的工具函式,如下

建立子網掩碼:func ipv4mask(a , b , c , d byte) ipmask

獲取預設子網掩碼: func (ip ip) defaultmask( ) ipmask

根據網域名稱查詢ip:

func   resolveipaddr(net , addr string)  (*ipaddr , error)

func   lookuphost(name string)  (cname string , addrs  string , err error)

7 go語言提供了net/http包,涵蓋了http客戶端和服務端的具體實現。如下幾個基本方法

8 要請求乙個資源,只需要呼叫http.get( ),如下

12 在go語言標準庫中,http.client型別有3個公開資料成員:

transport   roundtripper

checkredirect  func(req *request , via *request)   error   // 指定處理重定向的策略,如果http請求響應為30x,http client會在遵循跳轉規則前先呼叫這個checkredirect函式

jar  cookiejar

13 http.transport型別,如下

type transport struct )  (byte , error)

20 使用json.unmarshal( )函式將json格式的文字解碼為go裡邊預期的資料結構,函式原型如下

func unmarshal( data byte , v inte***ce )   error

補充:json.unmarshal( )函式會根據乙個約定的順序查詢目標結構中的字段,如乙個json物件有個名為"foo"的索引,會按如下順序查詢匹配

這些欄位在型別宣告中必須都是以大寫字母開頭,可被匯出的字段。

type book struct 

func main()`)

var gobook book

err := json.unmarshal(b,&gobook)

if err == nil

}

21 go語言允許使用map[string]inte***ce和inte***ce型別的值來分別存放未知結構的json物件或陣列,**如下  

b := byte(``)

var r inte***ce{}

json.unmarshal(b,&r)

fmt.printf("r: %v\n",r)

gobook,_ := r.(map[string]inte***ce{})

fmt.printf("gobook: %v\n",gobook)

// 輸出

r: map[authors:[tom jim kily] ispublished:true price:9.99 publisher:baidu.com sales:1000 title:go語言程式設計12]

gobook: map[authors:[tom jim kily] ispublished:true price:9.99 publisher:baidu.com sales:1000 title:go語言程式設計12]

22 例子

}23 頁面跳轉

http.redirect(w,r,"/view?id="+filename,http.statusfound)
24 渲染頁面,可以使用io.writestring( )函式,也可以採用html/template包的parsefiles( )函式

t.execute(w,nil)25 template.must( )可以確保如果模板不能解析成功時一定會觸發錯誤處理流程

t := template.must(template.parsefiles("./src/upload.html"))

《Go程式語言》第五章總結

第五章 函式 當函式存在返回值的時候必須顯式地以return語句結束,除非函式明確不會走完整個流程 比如乙個for死迴圈 函式的型別 稱為函式簽名,當乙個函式擁有相同的形參列表和返回列表時,認為這兩個函式的型別或簽名是相同的。形參和返回引數的名稱不會影響函式的型別 實參是按值傳遞的,所以函式接收到的...

unix 網路程式設計 第五章

個人對unix 網路程式設計中的 進行了精簡,保留了主要和關鍵部分。1 tcpserve01 程式見 沒有使用readn 和writen,直接使用read和write,能夠work。2 tcpserve02,程式見 加入了訊號機制,如果不在sig chld 中呼叫wait,就會出現殭屍程式 如下圖所...

Python語言程式設計第五章

def 函式名 引數列表 函式體 return 返回值列表 沒有引數時也要保留圓括號 函式可以沒有return語句,在函式體結束位置將控制權返回給呼叫者 匿名函式 函式名 lambda 引數列表 表示式 f lambda x,y x y相當於 def 函式名 引數列表 函式體 return 返回值列...