中山大學服務計算第四次作業

2021-10-25 02:05:59 字數 2956 閱讀 6142

在 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...