golang,使用型別斷言的乙個例子

2021-08-09 20:08:44 字數 959 閱讀 5913

type spotprice struct ..

.var pricei inte***ce{}

var err error

pricei, err = db.getspotprice(realprice.productid,"","",1,1)

if err != nil

value := pricei.(price.spotprice)

realprice.high = value[0].high

realprice.low = value[0].low

realprice.renewdate = value[0].renewdate

go的介面功能特別強大,空介面可以接受任何型別的變數,這不就有點類似c++的多型嘛,執行時確定,dynamic,哈哈哈

言歸正傳,pricei是乙個空介面,db.getspothistoryprice(conf.productid,"","",1,1)返回的型別是spotprice,動態傳給了priceivalue := pricei.(price.spotprice)這句是進行型別斷言,是go語言裡面的乙個語法特性。這時候value就是乙個真真正正的price.spotprice

引申一下,comma-ok斷言:

value, ok = element.(t),這裡value就是變數的值,ok是乙個bool型別,element是inte***ce變數,t是斷言的型別。

拿到了value,我就可以做任何想做的事情了,比如上述**接下來的取值賦值。

這樣用的好處,就是可以**復用,當我接收到乙個函式返回的型別是多種的,不確定的,就可以這麼寫,然後進行型別斷言,動態繫結資料。

golang 型別斷言的學習

在php中有乙個 serialize 函式 可以把陣列序列化成字串進行儲存和傳輸 如果想反序列化這種字串,在php中只需要乙個簡單的unserialize 函式就可以完成了.但是在golang中可就沒有這麼容易了,非得費個九牛二虎之力,寫上不少 才行。這時候只想感嘆一下,php真的是世界上最好的語言...

golang中的型別斷言

golang有型別轉換,型別斷言,型別切換 1.介面型別斷言 型別斷言就是將介面型別的值 x 裝換成型別 t 成功則返回 t 的例項。格式為 x.t 不安全,會造成panic,程式中斷 v x.t 不安全,會造成panic,程式中斷 v,ok x.t 推薦寫法型別斷言的必要條件就是x是介面型別,非介...

斷言assert是乙個巨集

斷言assert是乙個巨集,該巨集在 assert 中,當使用assert時候,給他個引數,即乙個判讀為真的表示式。預處理器產生測試該斷言的 如果斷言不為真,則發出乙個錯誤資訊告訴斷言是什麼以及它失敗一會,程式會終止。我們一般可以用在判斷某件操作是否成功上。以下是乙個記憶體複製程式,在執行過程中,如...