




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章
源代碼組織與管理Go語言的包01包的概念包的概念Go語言的包采用目錄樹的組織形式,一般包的名稱就是其源文件所在的目錄名,雖然Go并不強(qiáng)制包名必須與其所在的目錄同名,但還是建議讀者在開發(fā)項(xiàng)目時(shí)取相同的名字,這樣可使項(xiàng)目結(jié)構(gòu)更清晰。此外,在給包取名時(shí)還應(yīng)遵守下面兩個(gè)習(xí)慣:(1)包名一般全是小寫,并盡可能地用一個(gè)有意義的簡(jiǎn)短命名。(2)實(shí)際工作中,包一般放到公司的域名目錄下,這樣既能保證包名的唯一性,又便于代碼共享,比如一家名為easybooks公司所開發(fā)項(xiàng)目的包一般放到“src\\項(xiàng)目名”目錄下。02包的工作目錄1.Go環(huán)境變量2.目錄結(jié)構(gòu)包的工作目錄1.Go環(huán)境變量在Go編程環(huán)境中,包的工作目錄與幾個(gè)重要的環(huán)境變量息息相關(guān),先介紹一下。(1)$GOROOT這是Go語言安裝的根目錄。在Windows下安裝包會(huì)自動(dòng)設(shè)置,默認(rèn)是C:\ProgramFiles\Go,如果不是安裝在這個(gè)默認(rèn)目錄,則必須顯式地設(shè)置$GOROOT環(huán)境變量。(2)$GOPATH這是Go程序開發(fā)的工作目錄,類似于Java語言的工作區(qū)(Workspace)。Windows下默認(rèn)是C:\Users\<用戶名>\go,其中“用戶名”為操作系統(tǒng)當(dāng)前的登錄用戶名。(3)$GOBIN這是帶有main函數(shù)的源程序執(zhí)行g(shù)oinstall命令時(shí)生成的可執(zhí)行程序安裝目錄,默認(rèn)是$GOPATH\bin。如果想在任何路徑執(zhí)行安裝的程序,可以將$GOBIN添加到Windows系統(tǒng)環(huán)境變量Path中。包的工作目錄(4)$GOOS與$GOARCH$GOOS用來設(shè)置目標(biāo)操作系統(tǒng),$GOARCH用來設(shè)置目標(biāo)平臺(tái)的CPU體系結(jié)構(gòu)。這兩個(gè)變量主要用在Go程序跨平臺(tái)的交叉編譯中,一般不用設(shè)置。以管理員身份打開Windows命令行,用goenv命令可查看Go編程環(huán)境當(dāng)前各變量的值,如圖。包的工作目錄2.目錄結(jié)構(gòu)$GOPATH環(huán)境變量所指定的目錄就是Go程序包默認(rèn)的工作目錄。在用傳統(tǒng)方式開發(fā)Go項(xiàng)目時(shí),會(huì)在工作目錄下創(chuàng)建3個(gè)子目錄,如圖。包的工作目錄(1)src目錄包含了組成各種包的源代碼。通常在src下的第一層是根目錄(一般是公司域名),根目錄下才是各個(gè)項(xiàng)目的目錄,項(xiàng)目目錄下可以是其源代碼文件及各種包,這是一種推薦的代碼組織結(jié)構(gòu),例如:$GOPATH\src\\grpc其中,“$GOPATH\src\”就是根目錄,“grpc”則是具體的項(xiàng)目目錄,而grpc內(nèi)則是該項(xiàng)目的源代碼文件和包。(2)pkg目錄用于存放各包編譯生成的類庫。(3)bin目錄用于存放包編譯或安裝后生成的可執(zhí)行(.exe)文件。其中,src目錄必須由用戶自己建立用于包含所有的源代碼,這是Go的強(qiáng)制規(guī)定,而另兩個(gè)(pkg和bin)目錄則無須手動(dòng)創(chuàng)建,必要時(shí)Go命令行工具在構(gòu)建項(xiàng)目的過程中會(huì)自動(dòng)創(chuàng)建它們。03包的使用1.導(dǎo)入包2.引用路徑3.包的加載4.包的作用域包的使用1.導(dǎo)入包用import語句導(dǎo)入包,有4種引用方式,這里以Go的fmt標(biāo)準(zhǔn)庫(包)為例說明如下。(1)標(biāo)準(zhǔn)方式import"fmt"這是最常用的一種方式,導(dǎo)入后可以用“fmt.”作為前綴引用包內(nèi)的可導(dǎo)出元素,如:fmt.Println("Hello,我愛Go語言!@easybooks")(2)別名方式importsay"fmt"相當(dāng)于給包fmt起了個(gè)別名say,用“say.”代替標(biāo)準(zhǔn)的“fmt.”作為前綴引用包內(nèi)元素,語句寫成:say.Println("Hello,我愛Go語言!@easybooks")(3)省略方式import."fmt"這相當(dāng)于把包fmt的命名空間與當(dāng)前程序的命名空間直接合并,合并后就可不用前綴直接引用fmt包內(nèi)元素,簡(jiǎn)寫成:Println("Hello,我愛Go語言!@easybooks")包的使用(4)僅執(zhí)行包初始化函數(shù)當(dāng)使用標(biāo)準(zhǔn)方式導(dǎo)入了包但是代碼中卻沒有使用此包,編譯器會(huì)報(bào)錯(cuò),可改用“import_"包名"”這種方式導(dǎo)入包,它僅執(zhí)行包的init初始化函數(shù),即使包沒有初始化函數(shù)也不會(huì)引發(fā)編譯器報(bào)錯(cuò),如:packagemainimport_"fmt"funcmain(){ //無代碼}包的使用2.引用路徑Go語言所有內(nèi)置標(biāo)準(zhǔn)包的源碼都位于$GOROOT\src下,可以直接引用。而自定義或第三方包的源碼則必須放到$GOPATH\src目錄下才能被引用。引用一個(gè)包可以用全路徑或相對(duì)路徑,寫法如下。(1)全路徑全路徑就是包的根路徑($GOROOT\src或$GOPATH\src)后面包源碼的完整路徑,例如,下面這幾個(gè)包的引用路徑:import"/MyBmi/bmi"import"/grpc/peer"import"database/sql/driver"其中,bmi是自定義的包,其源碼保存在$GOPATH\src\\MyBmi\bmi目錄下;peer是第三方(谷歌開發(fā)的gRPC框架)的包,從網(wǎng)絡(luò)下載的源碼位于$GOPATH\src\\grpc\peer下;driver是Go語言內(nèi)置的包,源碼在$GOROOT\src\database\sql\driver下。(2)相對(duì)路徑比如有兩個(gè)包:包a的路徑是$GOPATH\src\\a,包b的路徑是$GOPATH\src\\b,現(xiàn)假設(shè)b要引用a包,則可以使用相對(duì)路徑引用方式,如下:import"../a"相對(duì)路徑只能用于引用$GOPATH下的包,而標(biāo)準(zhǔn)包的引用只能使用全路徑。包的使用3.包的加載程序啟動(dòng)時(shí),在執(zhí)行入口(main)函數(shù)之前,Go的引導(dǎo)程序會(huì)先對(duì)整個(gè)程序中的包進(jìn)行初始化并逐個(gè)加載包,流程如下。(1)引導(dǎo)程序從入口函數(shù)導(dǎo)入的包開始,逐級(jí)查找包的引用,直到找到?jīng)]有引用其他包的包,最終生成一個(gè)包引用的有向無環(huán)圖。(2)然后,編譯器將有向無環(huán)圖轉(zhuǎn)換為一棵樹,從樹的葉子節(jié)點(diǎn)開始逐層向上對(duì)包進(jìn)行初始化。(3)對(duì)單個(gè)包,先初始化其常量,然后是全局變量,最后才執(zhí)行包的init函數(shù)(如果有)。一個(gè)包可以有多個(gè)init函數(shù),初始化時(shí)會(huì)執(zhí)行全部的init函數(shù),但并不能保證執(zhí)行順序,所以不建議在一個(gè)包中放入多個(gè)init函數(shù),而是將需要初始化的邏輯寫在一個(gè)init函數(shù)里。包的使用4.包的作用域作用域(scope)是指程序代碼中標(biāo)識(shí)符的名字與實(shí)例(內(nèi)存地址)的綁定保持對(duì)應(yīng)有效的邏輯區(qū)間,簡(jiǎn)言之,就是在多大的范圍內(nèi)可見(能夠訪問)這個(gè)標(biāo)識(shí)符。Go語言是靜態(tài)作用域語言,其標(biāo)識(shí)符的可見范圍不依賴程序運(yùn)行時(shí)的因素,在編譯期就能完全確定。Go語言用命名空間(Namespace)來表示標(biāo)識(shí)符的可見范圍,一個(gè)標(biāo)識(shí)符可在多個(gè)命名空間中定義,它在不同命名空間中的含義是互不相干的。這意味著在一個(gè)新的命名空間中可定義任意名字的標(biāo)識(shí)符,而不會(huì)與其他命名空間的同名標(biāo)識(shí)符發(fā)生沖突。包名構(gòu)成了Go命名空間的一部分,不同的包可看作是一個(gè)獨(dú)立的命名空間,因此在不同包內(nèi)可以聲明相同的標(biāo)識(shí)符。Go語言包內(nèi)以大寫字母開頭的標(biāo)識(shí)符(包括變量、常量、函數(shù)和方法名、自定義類型、類的屬性等),它們具有全局作用域,在任意命名空間內(nèi)都可見;而包內(nèi)定義的以小寫字母開頭的標(biāo)識(shí)符卻僅在本包可見,在其他包都是不可見的,這些標(biāo)識(shí)符只具有包內(nèi)作用域。包的使用【實(shí)例5.1】主程序訪問同一包內(nèi)的另一源文件。在$GOPATH\src(筆者的為C:\Users\Administrator\go\src)下建立根目錄“”,其下再建一個(gè)項(xiàng)目目錄“MyBmi”。然后用Windows記事本在項(xiàng)目目錄中創(chuàng)建兩個(gè)Go源文件:human.go與main.go。(1)human.go中定義Human類及其屬性和方法(首字母全為小寫),代碼。(2)main.go作為主程序使用Human類,代碼如下:packagemainimport"fmt"funcmain(){ man:=Human{} man.setName("周何駿") man.setHeight(1.73) man.setWeight(60) man.setAge(19) fmt.Println(man.getName(),"BMI指數(shù)是",man.bmiCal())}包的使用(3)運(yùn)行以管理員身份打開Windows命令行,先后執(zhí)行如下命令:cdC:\Users\Administrator\go\src\\MyBmigorunmain.gohuman.go運(yùn)行過程如圖。包的使用【實(shí)例5.2】主程序訪問不同包下的另一源文件。(1)在上例所建的項(xiàng)目目錄MyBmi下新建一個(gè)目錄bmi作為包,將源文件human.go放到包中,代碼改為。(2)將主程序main.go的代碼寫成如下:packagemainimport( "fmt" "/MyBmi/bmi" //全路徑引用包)funcmain(){ man:=bmi.Human{} man.Name="周何駿" //直接訪問Name屬性 man.SetHeight(1.73) man.SetWeight(60) man.SetAge(19) fmt.Println(man.Name,"BMI指數(shù)是",man.BmiCal())}包的使用(3)運(yùn)行在Windows命令行下執(zhí)行:cdC:\Users\Administrator\go\src\\MyBmigorunmain.go運(yùn)行過程如圖。包的使用若將main.go中的語句“man.SetHeight(1.73)”改成“man.height=1.73”,由于height(身高)屬性首字母是小寫,包外部的程序無法直接訪問,運(yùn)行出錯(cuò),如圖。第5章
源代碼組織與管理第三方包01安裝第三方包1.獲取安裝2.編譯安裝安裝第三方包1.獲取安裝使用goget命令可以通過網(wǎng)絡(luò)遠(yuǎn)程獲?。ɑ蚋拢┑谌桨捌湟蕾嚢?,自動(dòng)完成編譯和安裝,命令格式為:goget-參數(shù)帶全路徑的包名這里的“全路徑”指的是包的完整網(wǎng)絡(luò)訪問路徑,goget命令據(jù)此動(dòng)態(tài)獲取遠(yuǎn)程代碼托管平臺(tái)倉庫中的包,目前支持的主要托管平臺(tái)有Github、Gitee(碼云)等。例如:goget-u/golang/protobuf/protoc-gen-go這個(gè)命令會(huì)自動(dòng)到Github上去獲取一個(gè)名為protoc-gen-go的插件,-u參數(shù)表示讓命令通過網(wǎng)絡(luò)來動(dòng)態(tài)地更新已有的包及其依賴包,一般都要帶這個(gè)參數(shù),除此之外,goget命令還有一些其他參數(shù),功能見表。參
數(shù)功
能
描
述-d只下載包而不安裝-f忽略對(duì)已下載包導(dǎo)入路徑的檢查-fix在下載包后先進(jìn)行修正,然后再編譯和安裝-insecure允許使用非安全通道(如HTTP而非HTTPS)去下載包-t同時(shí)下載并安裝指定包測(cè)試文件中的依賴包安裝第三方包2.編譯安裝有時(shí)候,所需的第三方包沒有現(xiàn)成的可安裝版本,可先下載其源代碼,然后再編譯安裝。1)下載源代碼下載源代碼需要借助與遠(yuǎn)程包相匹配的代碼管理工具,如Git、SVN、HG等,下面以Git為例介紹基本的操作方法。(1)安裝Git訪問/downloads,下載Git,得到可執(zhí)行文件Git-2.41.0-64-bit.exe,雙擊啟動(dòng)安裝向?qū)?,如圖。安裝第三方包(2)啟動(dòng)GitBash安裝Git后可在開始菜單左上的“最近添加”中看到3個(gè)啟動(dòng)圖標(biāo),如圖。安裝第三方包其中,第3個(gè)“GitBash”是Git配套的控制臺(tái),下載源代碼的命令就通過它來執(zhí)行,雙擊啟動(dòng)控制臺(tái),出現(xiàn)窗口如圖5.8所示,在“$”提示符后輸入命令。安裝第三方包(3)克隆下載使用gitclone命令以“克隆”方式下載源代碼,該命令可以復(fù)制遠(yuǎn)程倉庫的所有代碼和歷史記錄,并在本地創(chuàng)建一個(gè)與遠(yuǎn)程倉庫完全相同的倉庫的副本。通常將遠(yuǎn)程倉庫中包(及其依賴組件)的源碼克隆到本地的$GOPATH\src目錄下,命令格式為:gitclonehttps://遠(yuǎn)程倉庫路徑/文件名.git$GOPATH/src/本地路徑其中,“本地路徑”是下載到本地的包的源代碼存放路徑,不一定要與遠(yuǎn)程倉庫路徑相同。例如:gitclone/grpc/grpc-go.git$GOPATH/src//grpc將Github遠(yuǎn)程倉庫中g(shù)rpc-go包的源代碼下載到本地$GOPATH\src目錄中的\grpc路徑下,Git會(huì)自動(dòng)創(chuàng)建存放源碼路徑上的各級(jí)文件夾目錄。2)編譯安裝有了源代碼,就可以將其編譯成可運(yùn)行的包并安裝到Go環(huán)境中,使用goinstall命令進(jìn)行編譯安裝。首先由GitBash控制臺(tái)進(jìn)入到$GOPATH\src目錄,執(zhí)行命令:cd$GOPATH/src/然后執(zhí)行g(shù)oinstall命令,格式為:goinstall本地路徑(即源代碼存放路徑)@latest最后加“@latest”是為了將安裝的包與其在網(wǎng)絡(luò)上能夠找到的最新版本同步。02包的管理1.包管理概述2.gomodule工具包的管理1.包管理概述1)vendor機(jī)制在很長一段時(shí)間內(nèi),Go官方并沒有第三方包管理的解決方案,直到Go1.5引入了vendor機(jī)制,才為Go外部包的管理提供了有限的支持。該機(jī)制是在當(dāng)前包中引入一個(gè)vendor目錄,將該包所依賴的外部包復(fù)制到這個(gè)目錄下,編譯器在查找所需的第三方包時(shí),也優(yōu)先在該目錄下找,流程如下。(1)如果當(dāng)前包下有vendor目錄,先從其下查找第三方的包,若找到就使用;若沒找到或者當(dāng)前包下根本就沒有vendor目錄,繼續(xù)第(2)步。(2)沿當(dāng)前包目錄向上逐級(jí)查找直到$GOPATH\src,其間只要發(fā)現(xiàn)一個(gè)vendor目錄就去里面查找,使用找到的第一個(gè)符合要求的包。(3)到$GOPATH下查找。(4)最終去到$GOROOT下查找。包的管理2)版本管理如果第三方包更新了,新版本與舊版本又不兼容怎么辦?廣大Go程序員迫切需要對(duì)第三方包進(jìn)行更精細(xì)的管理,尤其對(duì)包的版本做精確的管控。起初,在Go社區(qū)出現(xiàn)了很多包管理工具,如godep、govendor、glide等,但是由于不同管理工具采用的是不同的元信息格式(如godep用Godeps.json、glide用glide.yaml),不利于社區(qū)發(fā)展,也嚴(yán)重違背了Go語言所追求的開箱即用、簡(jiǎn)單快速的設(shè)計(jì)理念。為了避免語言和工具的分裂,維護(hù)Go的設(shè)計(jì)理念,官方先是提供了一個(gè)叫作dep的工具,但并未馬上集成到Go工具鏈,Go核心團(tuán)隊(duì)通過它來吸取實(shí)際使用經(jīng)驗(yàn)并收集社區(qū)的反饋,不斷實(shí)驗(yàn)、探索如何有效管理包版本,在此基礎(chǔ)上終于開發(fā)出一個(gè)統(tǒng)一、強(qiáng)大的包管理工具gomodule,并于2019年9月3日發(fā)布的Go1.13中開始正式支持。包的管理2.gomodule工具gomodule以“模塊(Module)”為基本單元來管理包,一個(gè)任意名稱的目錄(包括空目錄)都可以作為模塊,只要其中包含go.mod文件。通常開發(fā)中將項(xiàng)目整體作為一個(gè)模塊,程序中引用包都是基于當(dāng)前模塊(項(xiàng)目)的相對(duì)路徑,簡(jiǎn)化了編程。使用gomodule管理一個(gè)項(xiàng)目包的步驟如下。(1)將Go的環(huán)境變量GO111MODULE設(shè)置為on,開啟gomodule功能。(2)創(chuàng)建模塊通過以下命令創(chuàng)建一個(gè)新的模塊:gomodinit模塊名創(chuàng)建后會(huì)在當(dāng)前包目錄下生成一個(gè)go.mod文件,內(nèi)容為:module模塊名go1.xx包的管理(3)管理第三方包有了go.mod文件后,項(xiàng)目開發(fā)過程中g(shù)omodule就會(huì)自動(dòng)地為用戶進(jìn)行包管理,如果用戶想在項(xiàng)目中引入一個(gè)第三方包,比如要使用當(dāng)前流行的Go-kit框架(用于微服務(wù)開發(fā)),就可以在go.mod文件中添加一句:require/go-kit/kitv0.12.0用require關(guān)鍵字引入該框架的0.12.0版本,然后就可以通過執(zhí)行以下命令來手動(dòng)下載這個(gè)框架及其依賴的所有第三方包:gomoddownload用戶可以通過執(zhí)行g(shù)omodvendor命令生成vendor目錄,在其中集中放置go.mod文件描述的所有第三方包,還可以使用gomodtidy命令更新依賴關(guān)系,拉取缺少的包和移除不用的包。包的管理【實(shí)例5.3】將【實(shí)例5.2】的項(xiàng)目納入gomodule管理。操作步驟如下。(1)在本地計(jì)算機(jī)的任一位置(如筆者是在C:\Users\Administrator)新建一個(gè)文件夾,其中創(chuàng)建項(xiàng)目目錄MyBmi。(2)以管理員身份打開Windows命令行,執(zhí)行如下命令打開gomodule功能:goenv-wGO111MODULE=on可運(yùn)行g(shù)oenv命令查看是否開啟成功,如圖。包的管理(3)將【實(shí)例5.2】項(xiàng)目MyBmi中的bmi包目錄(內(nèi)含human.go)及主程序main.go一起復(fù)制到本例項(xiàng)目目錄MyBmi中,然后通過命令行進(jìn)入其中執(zhí)行創(chuàng)建模塊的命令:cdC:\Users\Administrator\\MyBmigomodinitMyBmi過程如圖。包的管理命令執(zhí)行后在MyBmi目錄中可見已經(jīng)生成了go.mod文件,如圖。用Windows記事本打開go.mod文件,可見其內(nèi)容如下:moduleMyBmigo1.20這表示gomodule已將MyBmi項(xiàng)目視為一個(gè)模塊加以管理了。包的管理(4)啟動(dòng)GoLand,選擇“File”→“Open...”,彈出“OpenFileorProject”對(duì)話框,展開目錄樹進(jìn)入到C:\Users\Administrator下的文件夾,選中MyBmi目錄,單擊“OK”按鈕,如圖,可在GoLand集成開發(fā)環(huán)境中打開此項(xiàng)目。包的管理(5)打開main.go,將導(dǎo)入bmi包的路徑由全路徑改為模塊相對(duì)路徑,如下:packagemainimport( "MyBmi/bmi" //用模塊相對(duì)路徑引用包 "fmt")funcmain(){ ...//主程序代碼,略。}(6)用GoLand運(yùn)行main.go,結(jié)果如圖。包的管理事實(shí)上,GoLand就是通過gomodule工具來管理其Go項(xiàng)目的,在用戶創(chuàng)建項(xiàng)目的時(shí)候就會(huì)自動(dòng)在所建的項(xiàng)目目錄中生成go.mod文件,大家可以打開之前用GoLand創(chuàng)建的項(xiàng)目自己去看一下,也只有包含go.mod文件的目錄才會(huì)被GoLand識(shí)別為是一個(gè)Go項(xiàng)目,故本例若沒有事先用gomodinit命令生成go.mod文件,而試圖直接用GoLand打開項(xiàng)目目錄就會(huì)出現(xiàn)如圖所示的錯(cuò)誤。第5章
源代碼組織與管理Go語言與C語言Go語言與C語言在Go語言工具包中有一個(gè)Cgo命令,專用來處理Go調(diào)用C相關(guān)的操作,用戶可以直接使用該命令,也可以在運(yùn)行或構(gòu)建Go程序時(shí)自動(dòng)調(diào)用它。Cgo對(duì)于C代碼的處理要依賴系統(tǒng)中C語言相關(guān)的編譯工具,如gcc,在Go環(huán)境變量中默認(rèn)已開啟了對(duì)Cgo的支持,如圖。Go語言與C語言【實(shí)例5.4】用Go語言調(diào)用C代碼實(shí)現(xiàn)圓面積和周長的計(jì)算。(1)編寫C代碼在GoLand的默認(rèn)項(xiàng)目awesomeProject目錄下用Windows記事本創(chuàng)建一個(gè)C語言源文件circle.c,代碼如下:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國組織提取袋行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國線材彎折試驗(yàn)機(jī)行業(yè)市場(chǎng)深度研究及發(fā)展前景投資可行性分析報(bào)告
- 中醫(yī)院麻醉藥品臨床使用與規(guī)范管理試題(含答案)
- 房地產(chǎn)估價(jià)理論與方法《房地產(chǎn)價(jià)格影響因素測(cè)試題》考試題含答案
- 2025至2030鋯英砂行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資報(bào)告
- 2025至2030腹主動(dòng)脈瘤(AAA)修復(fù)裝置行業(yè)市場(chǎng)深度研究與戰(zhàn)略咨詢分析報(bào)告
- 2025至2030服裝市場(chǎng)行業(yè)市場(chǎng)深度研究與戰(zhàn)略咨詢分析報(bào)告
- 框架式薄板型聲學(xué)超材料的設(shè)計(jì)及低頻隔聲性能研究
- 超越自我班會(huì)課件
- 中國傳統(tǒng)節(jié)日600字作文(9篇)
- 天津市和平區(qū)二十一中2025年英語七年級(jí)第二學(xué)期期末考試試題含答案
- 2025-2030中國轉(zhuǎn)輪除濕機(jī)行業(yè)前景動(dòng)態(tài)及投資規(guī)劃分析報(bào)告
- 八年級(jí)上冊(cè)語文必背課文資料合集
- 針灸醫(yī)學(xué)的歷史回顧之古代名醫(yī)的針灸先例
- 【艾瑞咨詢】2024年中國健康管理行業(yè)研究報(bào)告494mb
- 年產(chǎn)xxx千件自行車配件項(xiàng)目可行性研究報(bào)告
- DZ/T 0261-2014滑坡崩塌泥石流災(zāi)害調(diào)查規(guī)范(1∶50 000)
- T/CQAP 3014-2024研究者發(fā)起的抗腫瘤體細(xì)胞臨床研究細(xì)胞制劑制備和質(zhì)量控制規(guī)范
- 初中體育教學(xué)中德育教育的現(xiàn)狀、問題與突破路徑探究
- 基層供銷社管理制度
- 農(nóng)業(yè)供應(yīng)鏈管理考試試題及答案
評(píng)論
0/150
提交評(píng)論