最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

如何開(kāi)發(fā)一個(gè)易于擴(kuò)展、易于維護(hù)的go應(yīng)

2023-04-18 10:13 作者:郭宏志-老郭  | 我要投稿

開(kāi)發(fā)一個(gè)易于擴(kuò)展和易于維護(hù)的 Go 應(yīng)用需要注意以下幾個(gè)方面:

  1. 使用清晰的代碼結(jié)構(gòu)和命名約定。代碼應(yīng)該易于理解和修改,遵循一致的命名約定有助于提高代碼可讀性。

  2. 編寫(xiě)文檔和注釋。編寫(xiě)文檔和注釋有助于其他開(kāi)發(fā)人員了解代碼的作用和用法,也有助于以后維護(hù)和擴(kuò)展代碼。

  3. 使用接口和抽象。使用接口和抽象可以讓代碼更加靈活和可擴(kuò)展。這樣可以使得代碼的不同部分之間解耦,也更容易進(jìn)行單元測(cè)試。

  4. 使用測(cè)試。編寫(xiě)單元測(cè)試、集成測(cè)試和端到端測(cè)試有助于確保代碼的正確性和穩(wěn)定性。這樣可以避免意外的錯(cuò)誤和不良行為。

  5. 使用依賴(lài)管理工具。使用依賴(lài)管理工具可以讓代碼更易于維護(hù)和升級(jí)。常見(jiàn)的依賴(lài)管理工具包括 Go Modules、Glide 和 Dep。

  6. 使用代碼分析和性能測(cè)試工具。代碼分析和性能測(cè)試工具可以幫助發(fā)現(xiàn)潛在的問(wèn)題和瓶頸,從而優(yōu)化代碼的性能和可靠性。

  7. 使用日志記錄和錯(cuò)誤處理機(jī)制。使用日志記錄可以幫助跟蹤代碼的運(yùn)行情況和問(wèn)題,錯(cuò)誤處理機(jī)制可以讓代碼更加健壯和穩(wěn)定。

  8. 遵循 Go 的最佳實(shí)踐。Go 有很多最佳實(shí)踐,比如使用 defer 關(guān)鍵字、避免使用全局變量等。遵循這些最佳實(shí)踐可以使代碼更加清晰和高效。

go代碼結(jié)構(gòu)如何設(shè)計(jì)

在 Go 中,常見(jiàn)的代碼結(jié)構(gòu)設(shè)計(jì)是基于包的。包是一個(gè)命名空間,它包含了一組相關(guān)的函數(shù)、變量和類(lèi)型定義。一個(gè)包通常對(duì)應(yīng)一個(gè)目錄,該目錄中包含一個(gè)名為?main?的文件或者多個(gè)名為?xxx_test?的測(cè)試文件以及其他 Go 源代碼文件。

以下是一個(gè)常見(jiàn)的 Go 代碼結(jié)構(gòu)示例:

在這個(gè)示例中,cmd?目錄包含了兩個(gè)可執(zhí)行程序?myapp?和?myappctl,每個(gè)程序都有自己的?main?函數(shù)。internal?目錄包含了應(yīng)用程序的內(nèi)部實(shí)現(xiàn),其中?config?包提供了應(yīng)用程序的配置讀取和驗(yàn)證功能,db?包提供了數(shù)據(jù)庫(kù)連接和操作功能,http?包提供了 HTTP 請(qǐng)求的處理功能。vendor?目錄包含了應(yīng)用程序依賴(lài)的第三方包。

在設(shè)計(jì) Go 代碼結(jié)構(gòu)時(shí),可以遵循以下幾個(gè)原則:

  1. 遵循單一職責(zé)原則(SRP)。每個(gè)包應(yīng)該只關(guān)注一個(gè)方面的功能,如配置、數(shù)據(jù)庫(kù)操作、HTTP 請(qǐng)求處理等。

  2. 遵循依賴(lài)反轉(zhuǎn)原則(DIP)。高層次的包應(yīng)該依賴(lài)于低層次的包,而不是反過(guò)來(lái)。例如,應(yīng)用程序的業(yè)務(wù)邏輯層應(yīng)該依賴(lài)于數(shù)據(jù)庫(kù)訪問(wèn)層而不是反過(guò)來(lái)。

  3. 遵循接口隔離原則(ISP)。盡量定義小而專(zhuān)一的接口,而不是大而全的接口。這樣可以使得包之間的依賴(lài)更加清晰,也更容易進(jìn)行單元測(cè)試和模擬。

  4. 遵循開(kāi)閉原則(OCP)。應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。即,當(dāng)需要添加新的功能時(shí),應(yīng)該盡量通過(guò)擴(kuò)展現(xiàn)有代碼而不是修改現(xiàn)有代碼來(lái)實(shí)現(xiàn)。

  5. 使用包來(lái)組織代碼。包是 Go 中組織代碼的基本單位,應(yīng)該根據(jù)功能、職責(zé)或領(lǐng)域?qū)⒋a分組為不同的包。

  6. 使用常見(jiàn)的命名約定。按照約定來(lái)命名變量、函數(shù)、結(jié)構(gòu)體和接口等,可以提高代碼的可讀性和可維護(hù)性。

go的命名約定

Go 的命名約定基本上遵循了駱駝命名法(camelCase)的規(guī)則,即第一個(gè)單詞小寫(xiě),后續(xù)單詞首字母大寫(xiě),例如?myVariableName。以下是一些常見(jiàn)的命名約定:

  1. 包名應(yīng)該使用短小的、有意義的名稱(chēng),例如?http、jsonos?等。

  2. 變量和函數(shù)名應(yīng)該使用有意義的名詞或動(dòng)詞短語(yǔ),例如?messageCount、addUser

  3. 常量名應(yīng)該使用大寫(xiě)字母和下劃線分隔的形式,例如?MAX_RETRIES

  4. 結(jié)構(gòu)體類(lèi)型的名稱(chēng)應(yīng)該使用名詞,第一個(gè)單詞大寫(xiě),例如?Person。

  5. 接口類(lèi)型的名稱(chēng)應(yīng)該使用名詞,以?er?結(jié)尾,例如?Reader、Writer

  6. 方法名應(yīng)該使用名詞或動(dòng)詞短語(yǔ),第一個(gè)單詞大寫(xiě),例如?GetMessage、SendMessage

  7. 私有成員或私有函數(shù)應(yīng)該以小寫(xiě)字母開(kāi)頭,使用下劃線分隔單詞,例如?my_private_field。

  8. 公有成員或公有函數(shù)應(yīng)該以大寫(xiě)字母開(kāi)頭,使用駝峰命名法,例如?MyPublicMethod

  9. 接口實(shí)現(xiàn)應(yīng)該使用實(shí)現(xiàn)的接口類(lèi)型名稱(chēng)作為前綴,例如?type MyReader struct{} func (r *MyReader) Read() {...}。

go如何編寫(xiě)文檔和注釋

在 Go 中,可以通過(guò)注釋來(lái)為代碼添加文檔。注釋可以分為兩種:行注釋和塊注釋。

行注釋以?//?開(kāi)頭,可以用于單行注釋?zhuān)?/p>

塊注釋以?/*?開(kāi)頭,以?*/?結(jié)尾,可以用于多行注釋?zhuān)?/p>

在注釋中,可以使用特定格式的標(biāo)記來(lái)生成文檔。標(biāo)記以?//?或?/*?開(kāi)頭,后面跟著一個(gè)空格和標(biāo)記名稱(chēng),例如:

常用的標(biāo)記包括:

  • Package: 用于包注釋?zhuān)枋稣麄€(gè)包的功能和用法。

  • Import: 用于導(dǎo)入的注釋?zhuān)枋鰧?dǎo)入的包的作用和用法。

  • Func: 用于函數(shù)或方法注釋?zhuān)枋龊瘮?shù)或方法的功能、參數(shù)和返回值。

  • Type: 用于類(lèi)型注釋?zhuān)枋鼋Y(jié)構(gòu)體、接口或其他自定義類(lèi)型的功能和用法。

  • Var: 用于變量注釋?zhuān)枋鲎兞康淖饔煤陀梅ā?/p>

在標(biāo)記后面可以跟著具體的文本描述,可以使用 Markdown 格式來(lái)增強(qiáng)文本的可讀性,例如:

在代碼中添加注釋和標(biāo)記可以幫助其他開(kāi)發(fā)者更好地理解代碼的功能和用法,同時(shí)也可以使用工具自動(dòng)生成文檔,提高代碼的可維護(hù)性。

go如何生成文檔

Go 有一個(gè)內(nèi)置的工具?go doc,可以用于生成文檔。go doc?工具可以查看代碼中的注釋?zhuān)⒏鶕?jù)注釋生成相應(yīng)的文檔。

要使用?go doc?工具生成文檔,可以在終端中輸入以下命令:

其中?<package>?是要查看的包名,<symbol>?是要查看的符號(hào)名稱(chēng),可以是函數(shù)、類(lèi)型、變量等。如果只指定?<package>,則?go doc?會(huì)顯示整個(gè)包的文檔。

例如,要查看標(biāo)準(zhǔn)庫(kù)中?strings?包的文檔,可以輸入以下命令:

如果要查看?strings?包中的?Replace?函數(shù)的文檔,可以輸入以下命令:

除了在終端中使用?go doc?工具,還可以在代碼中使用?godoc?命令來(lái)生成文檔網(wǎng)站。godoc?命令會(huì)啟動(dòng)一個(gè)本地的 HTTP 服務(wù)器,并在瀏覽器中打開(kāi)文檔網(wǎng)站。要使用?godoc?命令生成文檔網(wǎng)站,可以在終端中輸入以下命令:

這將啟動(dòng)一個(gè) HTTP 服務(wù)器,監(jiān)聽(tīng)本地的?6060?端口。然后在瀏覽器中訪問(wèn)?http://localhost:6060,即可查看本地的文檔網(wǎng)站。

在代碼中添加注釋和標(biāo)記可以幫助生成更完整、更有用的文檔,同時(shí)也可以使用工具自動(dòng)生成文檔,提高代碼的可維護(hù)性。

go如何使用接口和抽象

Go 語(yǔ)言中的接口是一種類(lèi)型,用于描述一組方法的集合,而不關(guān)心這些方法的具體實(shí)現(xiàn)。接口提供了一種約束,使得不同類(lèi)型的對(duì)象可以實(shí)現(xiàn)相同的方法集合,從而實(shí)現(xiàn)多態(tài)。

要使用接口,首先需要定義接口類(lèi)型。接口類(lèi)型由一組方法簽名組成,每個(gè)方法簽名定義了一個(gè)方法的名稱(chēng)、參數(shù)列表和返回值列表。例如:

上面的代碼定義了一個(gè)?Animal?接口,它包含兩個(gè)方法?Speak()?和?Move(),它們都返回一個(gè)字符串。

接口的實(shí)現(xiàn)是隱式的,只要一個(gè)類(lèi)型實(shí)現(xiàn)了接口定義的所有方法,就可以認(rèn)為這個(gè)類(lèi)型實(shí)現(xiàn)了該接口。例如,下面的代碼定義了一個(gè)?Dog?類(lèi)型,它實(shí)現(xiàn)了?Animal?接口:

在上面的代碼中,Dog?類(lèi)型實(shí)現(xiàn)了?Animal?接口的?Speak()?和?Move()?方法,因此可以將?Dog?類(lèi)型的對(duì)象賦值給?Animal?類(lèi)型的變量。

使用接口可以實(shí)現(xiàn)抽象,將實(shí)現(xiàn)細(xì)節(jié)和使用細(xì)節(jié)分離開(kāi)來(lái)。通過(guò)定義接口,我們可以將代碼中的具體實(shí)現(xiàn)和使用接口的代碼解耦,從而提高代碼的靈活性和可維護(hù)性。

go如何使用測(cè)試

在 Go 語(yǔ)言中,測(cè)試是一個(gè)非常重要的部分,Go 提供了一個(gè)內(nèi)置的測(cè)試框架?testing,開(kāi)發(fā)者可以使用這個(gè)框架進(jìn)行單元測(cè)試、集成測(cè)試和性能測(cè)試等。

在 Go 語(yǔ)言中,每個(gè)測(cè)試文件都需要以?_test.go?結(jié)尾,這是為了告訴 Go 編譯器這個(gè)文件包含測(cè)試代碼。在測(cè)試文件中,我們可以使用?testing?框架提供的函數(shù)進(jìn)行測(cè)試。

下面是一個(gè)簡(jiǎn)單的示例:

在上面的代碼中,我們定義了兩個(gè)測(cè)試函數(shù)?TestAdd()?和?TestSubtract()。這兩個(gè)函數(shù)都接收一個(gè)?*testing.T?類(lèi)型的參數(shù),用于報(bào)告測(cè)試失敗的情況。

在每個(gè)測(cè)試函數(shù)中,我們可以調(diào)用需要測(cè)試的函數(shù),并使用?if?語(yǔ)句進(jìn)行斷言,如果斷言失敗,我們可以使用?t.Errorf()?函數(shù)輸出錯(cuò)誤信息。在輸出錯(cuò)誤信息時(shí),我們可以使用類(lèi)似?printf?的格式化字符串,從而輸出更有意義的信息。

在測(cè)試文件中,我們還可以使用?testing?框架提供的其他函數(shù),例如?t.Helper()?函數(shù)可以標(biāo)記某個(gè)函數(shù)為測(cè)試輔助函數(shù),從而在輸出錯(cuò)誤信息時(shí)可以提供更多的信息。

為了運(yùn)行測(cè)試,我們可以使用?go test?命令,在測(cè)試文件所在的目錄中執(zhí)行該命令即可。go test?命令會(huì)自動(dòng)查找測(cè)試文件,并運(yùn)行其中所有以?Test?開(kāi)頭的測(cè)試函數(shù)。

除了單元測(cè)試之外,Go 還支持性能測(cè)試,可以使用?testing?框架中的?Benchmark?函數(shù)進(jìn)行性能測(cè)試。例如:

在上面的代碼中,我們定義了兩個(gè)性能測(cè)試函數(shù)?BenchmarkAdd()?和?BenchmarkSubtract(),這兩個(gè)函數(shù)也接收一個(gè)?*testing.B?類(lèi)型的參數(shù),用于測(cè)試性能。在性能測(cè)試函數(shù)中,我們可以使用?b.N?表示測(cè)試的次數(shù),并使用循環(huán)來(lái)多次運(yùn)行需要測(cè)試的函數(shù)。

go使用依賴(lài)管理工具

在 Go 語(yǔ)言中,常用的依賴(lài)管理工具有三種:go mod、dep?和?glide。下面分別介紹這三種工具的使用方法。

go mod

go mod?是 Go 語(yǔ)言自帶的依賴(lài)管理工具,可以在 Go 1.11 及以上版本中使用。go mod?可以自動(dòng)識(shí)別代碼中使用的依賴(lài)庫(kù),并自動(dòng)下載和管理這些依賴(lài)庫(kù)。使用?go mod?的步驟如下:

  1. 在項(xiàng)目根目錄下執(zhí)行?go mod init?命令,創(chuàng)建一個(gè)新的模塊。

  2. 在代碼中使用第三方依賴(lài)庫(kù)時(shí),直接使用?import?語(yǔ)句導(dǎo)入即可。

  3. 在項(xiàng)目根目錄下執(zhí)行?go build?或?go run?命令,go mod?會(huì)自動(dòng)檢查并下載缺少的依賴(lài)庫(kù)。

  4. 如果需要手動(dòng)添加或刪除依賴(lài)庫(kù),可以使用?go get、go mod tidygo mod vendor?等命令。

例如,在項(xiàng)目根目錄下執(zhí)行以下命令:

這將會(huì)創(chuàng)建一個(gè)新的模塊,并在根目錄下生成一個(gè)?go.mod?文件,記錄項(xiàng)目的依賴(lài)信息。接下來(lái),在代碼中使用第三方依賴(lài)庫(kù)時(shí),例如:

當(dāng)執(zhí)行?go build?或?go run?命令時(shí),go mod?會(huì)自動(dòng)下載并管理?gin?庫(kù)的依賴(lài)。

dep

dep?是一個(gè)官方推薦的依賴(lài)管理工具,適用于 Go 1.6 及以上版本。使用?dep?的步驟如下:

  1. 在項(xiàng)目根目錄下執(zhí)行?dep init?命令,創(chuàng)建一個(gè)新的項(xiàng)目。

  2. 在代碼中使用第三方依賴(lài)庫(kù)時(shí),需要在?Gopkg.toml?文件中添加相應(yīng)的依賴(lài)信息。

  3. 在項(xiàng)目根目錄下執(zhí)行?dep ensure?命令,下載和安裝所有依賴(lài)庫(kù)。

例如,在項(xiàng)目根目錄下執(zhí)行以下命令:

這將會(huì)創(chuàng)建一個(gè)新的項(xiàng)目,并在根目錄下生成一個(gè)?Gopkg.toml?文件,記錄項(xiàng)目的依賴(lài)信息。接下來(lái),在代碼中使用第三方依賴(lài)庫(kù)時(shí),需要手動(dòng)在?Gopkg.toml?文件中添加相應(yīng)的依賴(lài)信息。

然后,在項(xiàng)目根目錄下執(zhí)行以下命令:

這將會(huì)下載和安裝所有依賴(lài)庫(kù),并將它們保存在?vendor?目錄下。


go使用代碼分析和性能測(cè)試工具

Go語(yǔ)言提供了豐富的代碼分析和性能測(cè)試工具,這些工具可以幫助開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)代碼中的潛在問(wèn)題,并優(yōu)化代碼性能。

下面是 Go 中常用的代碼分析和性能測(cè)試工具:

  1. go vet:是 Go 語(yǔ)言官方提供的一個(gè)靜態(tài)代碼分析工具,用于檢測(cè)代碼中的常見(jiàn)錯(cuò)誤和潛在問(wèn)題。

  2. go fmt:是 Go 語(yǔ)言官方提供的一個(gè)代碼格式化工具,用于格式化 Go 代碼,使其符合 Go 語(yǔ)言規(guī)范。

  3. goimports:是 Go 語(yǔ)言官方提供的一個(gè)代碼導(dǎo)入工具,用于自動(dòng)添加或刪除 Go 代碼中的導(dǎo)入語(yǔ)句。

  4. golint:是 Go 語(yǔ)言官方提供的一個(gè)代碼靜態(tài)分析工具,用于檢查代碼中的一些常見(jiàn)問(wèn)題和潛在問(wèn)題,例如不規(guī)范的命名、不必要的轉(zhuǎn)換和錯(cuò)誤的語(yǔ)法使用等。

  5. go test:是 Go 語(yǔ)言官方提供的一個(gè)單元測(cè)試工具,用于編寫(xiě)和運(yùn)行單元測(cè)試。

  6. pprof:是 Go 語(yǔ)言官方提供的一個(gè)性能分析工具,用于分析 Go 代碼的 CPU 和內(nèi)存使用情況。

使用這些工具可以幫助開(kāi)發(fā)者提高代碼的質(zhì)量和性能,同時(shí)也可以幫助開(kāi)發(fā)者發(fā)現(xiàn)代碼中的潛在問(wèn)題,從而提高代碼的可維護(hù)性和可擴(kuò)展性。

go使用日志記錄和錯(cuò)誤處理機(jī)制

在 Go 語(yǔ)言中,常用的日志記錄和錯(cuò)誤處理機(jī)制如下:

1、日志記錄:

Go 語(yǔ)言官方提供了標(biāo)準(zhǔn)庫(kù)?log,可以用于記錄日志信息。同時(shí),也有很多第三方庫(kù)可以使用,例如?logrus?和?zap?等。

使用日志記錄需要注意以下幾點(diǎn):

  • 日志記錄應(yīng)該包含足夠的信息,例如時(shí)間、文件名、行號(hào)、錯(cuò)誤信息等。

  • 日志記錄應(yīng)該按照級(jí)別進(jìn)行劃分,例如 DEBUG、INFO、WARNING、ERROR 和 CRITICAL 等。

  • 日志記錄應(yīng)該支持輸出到控制臺(tái)和文件等不同的目標(biāo)。

2、錯(cuò)誤處理:

在 Go 語(yǔ)言中,錯(cuò)誤是一種普通的值類(lèi)型。Go 語(yǔ)言提供了?error?接口類(lèi)型,用于表示錯(cuò)誤信息。當(dāng)函數(shù)返回錯(cuò)誤時(shí),通常會(huì)返回一個(gè)?error?類(lèi)型的值,開(kāi)發(fā)者可以根據(jù)這個(gè)值來(lái)判斷函數(shù)是否執(zhí)行成功。

通常,開(kāi)發(fā)者需要做以下幾個(gè)方面的處理:

  • 在函數(shù)中捕獲錯(cuò)誤,并返回?error?類(lèi)型的值。

  • 在調(diào)用函數(shù)時(shí),檢查函數(shù)返回的?error?類(lèi)型的值,判斷函數(shù)是否執(zhí)行成功。

  • 在處理錯(cuò)誤時(shí),應(yīng)該輸出足夠的信息,例如錯(cuò)誤的原因、文件名、行號(hào)等。

  • 在處理錯(cuò)誤時(shí),應(yīng)該采取適當(dāng)?shù)拇胧?,例如重試、返回錯(cuò)誤信息等。

總之,在開(kāi)發(fā)過(guò)程中,日志記錄和錯(cuò)誤處理是非常重要的,它們可以幫助開(kāi)發(fā)者更好地理解代碼的執(zhí)行情況,同時(shí)也可以幫助開(kāi)發(fā)者及時(shí)發(fā)現(xiàn)和解決代碼中的問(wèn)題。

遵循 Go 的最佳實(shí)踐

Go 語(yǔ)言是一門(mén)非常強(qiáng)調(diào)最佳實(shí)踐的語(yǔ)言,因?yàn)樗脑O(shè)計(jì)目標(biāo)之一是提高代碼的可維護(hù)性和可讀性。以下是一些遵循 Go 最佳實(shí)踐的建議:

  1. 使用有意義的變量名和函數(shù)名。變量名和函數(shù)名應(yīng)該簡(jiǎn)潔明了,盡量避免縮寫(xiě)和縮略語(yǔ),同時(shí)也要遵循 Go 語(yǔ)言的命名規(guī)范。

  2. 使用有意義的注釋。注釋?xiě)?yīng)該解釋代碼的意圖和功能,而不是重復(fù)代碼本身。注釋?xiě)?yīng)該寫(xiě)在代碼上方,并使用完整的句子和正確的語(yǔ)法。

  3. 編寫(xiě)簡(jiǎn)短而有效的函數(shù)。函數(shù)應(yīng)該盡可能地短小精悍,每個(gè)函數(shù)應(yīng)該只做一件事情,并且不要使用過(guò)多的參數(shù)。

  4. 盡可能地使用結(jié)構(gòu)體。結(jié)構(gòu)體可以將相關(guān)的數(shù)據(jù)和方法組合在一起,使代碼更易于閱讀和維護(hù)。

  5. 避免全局變量。全局變量可以增加代碼的復(fù)雜性,因?yàn)樗鼈兛赡鼙欢鄠€(gè)函數(shù)修改,從而難以追蹤代碼的執(zhí)行流程。

  6. 使用 panic 和 recover 來(lái)處理異常。Go 語(yǔ)言沒(méi)有 try/catch 語(yǔ)句,而是使用 panic 和 recover 來(lái)處理異常。但是,這兩個(gè)語(yǔ)句應(yīng)該謹(jǐn)慎使用,只在必要的時(shí)候使用。

  7. 使用 defer 來(lái)確保資源被釋放。defer 語(yǔ)句可以確保在函數(shù)退出時(shí)執(zhí)行一些必要的清理工作,例如關(guān)閉文件或釋放鎖。

  8. 使用 gofmt 來(lái)格式化代碼。gofmt 是 Go 語(yǔ)言官方提供的代碼格式化工具,可以確保代碼的格式符合 Go 語(yǔ)言規(guī)范。

  9. 使用 go vet 和 golint 來(lái)檢查代碼。這兩個(gè)工具可以檢查代碼中的潛在問(wèn)題和不規(guī)范的代碼,可以幫助開(kāi)發(fā)者發(fā)現(xiàn)和解決代碼中的問(wèn)題。

總之,遵循 Go 的最佳實(shí)踐可以幫助開(kāi)發(fā)者編寫(xiě)出更加清晰、易于閱讀和維護(hù)的代碼。


原文鏈接:https://duoke360.com/post/5802



如何開(kāi)發(fā)一個(gè)易于擴(kuò)展、易于維護(hù)的go應(yīng)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南岸区| 株洲县| 外汇| 财经| 重庆市| 临朐县| 海丰县| 威信县| 安阳市| 揭东县| 长寿区| 深水埗区| 景洪市| 巴中市| 砀山县| 连江县| 凤阳县| 马鞍山市| 龙南县| 石台县| 江阴市| 原平市| 西青区| 华池县| 建宁县| 康平县| 巴马| 霍山县| 额尔古纳市| 云林县| 济南市| 东光县| 汉源县| 屏东市| 宁波市| 维西| 乌海市| 兴文县| 江达县| 图木舒克市| 积石山|