在 gitee 或 github 上發布乙個讀配置檔案程式包,第一版僅需要讀 ini 配置;
1. 核心任務:包必須提供乙個函式 watch(filename,listener) (configuration, error)
優點
2. 包必須包括以下內容:
由於本次實驗要求自定義錯誤,因此,在readconfigutil包實現的時候,我給出了自己的error型別:myconfigerror
myconfigerror實現error介面
在go中,所有的錯誤,包括自定義錯誤都實現了error介面,也必須實現error介面才能將自己的定義的error型別的變數傳值給error型別的引數。否則,如果不使用go的error介面來接收錯誤,那麼**的相容性極差,而且程式設計過程中會多次遇到型別轉換的問題,十分麻煩,因此,自己定義的錯誤型別必須實現error介面;
error介面定義:
type
error
inte***ce
為了實現error介面,我們必須為自定義的錯誤型別:myconfigerror
實現error介面中的error方法:
func
(e *myconfigerror)
error()
string
當myconfigerror.error()
執行後將返回myconfigerror
中的錯誤資訊,為string型別;
myconfigerror使用
下面給出myconfigerror的乙個簡單使用的例子:
package main
import
("fmt"
"user/readconfigutil"
)func
main()
將不輸出任何東西。因為myconfigerror為它內部的message變數用空字串進行初始化,所以err.error()只會返回乙個空字串,所以輸出空。而因為這裡是在另乙個包中import了readconfigutil包,而myconfigerror中的變數名不是以大寫字母開頭,所以我們不能在這個main函式中進行如:
var err = readconfigutil.myconfigerror
這樣的賦值語句來為乙個myconfigerror變數進行賦值或初始化,但是在readconfigutil包中,我們可以利用以下語句對myconfigerror進行初始化:
var err = myconfigerror
之所以這樣,是因為在go語言中,乙個包中對外可見的函式,型別定義,變數都必須以大寫字母開頭,否則就不允許在包外進行訪問。因為myconfigerror的成員變數的名稱均以小寫字母開頭,所以,不能在包外對這兩個變數進行直接訪問,否則將報錯。上方的初始化是對兩個變數的直接賦值,在包內可行,在包外被禁止。雖然在包外不能直接訪問myconfigerror的兩個變數,但是這兩個變數的值可以通過myconfigerror的方法得到。
ps:由於listener中原有的listen方法不以大寫字母開頭,因此,我們在readconfigutil包外的main包中不能直接使用t.listen(filename, c)
來使用listen函式,為了在main包中使用,我們臨時在readconfig中將listen函式的名字改為listen。當然,這裡是為了給出乙個示例供讀者熟悉listener的使用,因此臨時改變listener介面中listen方法的名字的首字母為大寫,實際使用時還是以原來的定義為準
listentest:
func
listentest
(filename string
, c chan
error
)var check bool
var exist [
]bool
=make([
]bool
,len
(origin_file.key)
)for i, v :=
range temp.key
break}}
if check ==
false
}for i,_:=
range exist
}if change_message !=""}
c <- synaxerror
close
(c)}
listentest為我定義的乙個***函式,具體的使用方法可以參照上方的listener部分。listentest函式將不斷地利用loadresource函式載入檔案,並將載入的新內容和原有的內容進行比較。當改動發生後,輸出所有的改動資訊並返回。如果在loadresource部分發生錯誤,那麼直接返回。
watch:
func
watch
(filename string
, t listener)
(config,
error
) c :=
make
(chan
error
)go t.
listen
(filename, c)
anerror :=
<-c
return origin_file, anerror
}
本次實驗的watch函式內容如上:watch函式先使用loadresource函式讀取輸入檔案原有的配置,然後利用go t.listen(filename, c)
啟動***,watch被阻塞,直到***結束監聽。watch將返回監聽後的結果。 中山大學服務計算第二次作業
sort 自己寫的快速排序 func sort arr int start,end int go test的結果如下,因為sort函式沒有任何內容,因此不能通過測試 sort 自己寫的快速排序 func sort arr int low,high int 測試結果如下 luowle vm 0 4 c...
第四次作業
扎ogu 典型產品 最高傳輸速率 ieee 802.11a wi fi5 802.11a 43m 450 zyxel p334u 54mbps 1500 zyxel p335u 54mbps 1600 ieee 802.11b d link di 624 a 54mbps 215 linksys w...
第四次作業
作業題一 vs2012 rc在介面上,比beta版更容易使用,彩色的圖示和按照開發 執行 除錯等環境區分的顏色方案讓人愛不釋手。vs2012整合了asp.net mvc 4,全面支援移動和html5,wf 4.5相比wf 4,更加成熟,期待已久的狀態極工作流回來了,更棒的是,現在它的設計器已經支援c...