對比于其他語言的程序,Go語言的跨平臺(tái)能力是真的強(qiáng),拿.Net和JAVA來說吧,.Net在.Net core出現(xiàn)之前是不能跨平臺(tái)的,只能在windows上編譯運(yùn)行,即使是.net core出現(xiàn)以后,跨平臺(tái)的程序也是相當(dāng)?shù)穆闊6鴍ava雖然一直都可以跨平臺(tái),但是運(yùn)行JAVA程序的機(jī)器上也必須要有JAVA程序運(yùn)行環(huán)境JRE。而相對于Go程序,跨平臺(tái)就簡單的多了,只需要在編譯指定目標(biāo)程序運(yùn)行的架構(gòu)和環(huán)境即可編譯出指定操作系統(tǒng)和架構(gòu)的程序。
敘永ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進(jìn)行目標(biāo)程序的構(gòu)建,這種方式會(huì)一直生效的,如果不讓他一直生效,可以在構(gòu)建的時(shí)候臨時(shí)指定環(huán)境變量,下面以window的環(huán)境為例,來介紹臨時(shí)指定環(huán)境變量的方式構(gòu)建可以在Linux環(huán)境下運(yùn)行的可執(zhí)行程序:
可以根據(jù)不同的架構(gòu)和操作系統(tǒng)將其編寫為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構(gòu)建的時(shí)候就不用再敲命令了,直接運(yùn)行腳本就可以了。
Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運(yùn)行tomcat程序。而Go語言編寫的程序最終為可執(zhí)行的文件(window下編譯出的是.exe的可執(zhí)行文件),只需要將其賦予可執(zhí)行的權(quán)限就可以直接運(yùn)行了。
構(gòu)建JAVA程序的鏡像需要指定java的基礎(chǔ)鏡像,否則就需要在鏡像中安裝java的運(yùn)行環(huán)境了,下面展示的是構(gòu)建的一個(gè)JAVA程序的鏡像,構(gòu)建出來鏡像的體積相對比較大
而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因?yàn)樗诖虬臅r(shí)候就已經(jīng)將依賴的包一塊打包到一起了
拿著這個(gè)鏡像就可以到處運(yùn)行了。
通過對比我們可以發(fā)現(xiàn),如果沒有之前的技術(shù)和業(yè)務(wù)的積累,重新開發(fā)一個(gè)新的項(xiàng)目,使用go去開發(fā)無疑是最容易上手的,所以現(xiàn)在很多公司都使用go進(jìn)行開發(fā),也逐漸將其他語言的項(xiàng)目逐步的用go語言進(jìn)行改造。其實(shí)用什么語言不重要,合適的才重要,開發(fā)項(xiàng)目在選擇語言的時(shí)候也會(huì)綜合多方面來考慮選擇合適的語言和架構(gòu),畢竟很多公司都不是搞研究的,都需要項(xiàng)目來賺錢,所以開發(fā)的速度、客戶的滿意度、項(xiàng)目交付的時(shí)間才是驅(qū)動(dòng)公司技術(shù)的主要因素。
我們個(gè)人也應(yīng)該不斷完善自己的技術(shù)棧,不應(yīng)該太依靠某種語言,最重要的還是自己的架構(gòu)思想和底層架構(gòu)知識(shí),只有掌握了這些才能夠不被 社會(huì) 和公司“優(yōu)化”。
一.語言遷移概述
遷移(transfer)原是一個(gè)心理學(xué)術(shù)語,是指一種學(xué)習(xí)對另一種學(xué)習(xí)的影響,即已獲得的知識(shí)、技能和態(tài)度等對學(xué)習(xí)新知識(shí)、新技能和解決新問題所產(chǎn)生的影響。隨后,在20世紀(jì)40~50年代,F(xiàn)ries和Lado將遷移這一術(shù)語應(yīng)用于語言學(xué)研究,用來指 “一種語言對學(xué)習(xí)另一種語言產(chǎn)生的影響” (即language transfer,語言遷移,又叫母語遷移)(Longman Dictionary of Language Teaching and Applied Linguistics:1992)。這種影響在二語習(xí)得中表現(xiàn)為:(1)正遷移(positive transfer),指母語(native language,)與目標(biāo)語(target language)的相同之處會(huì)促進(jìn)目標(biāo)語學(xué)習(xí); (2)負(fù)遷移(negative transfer),即母語干擾,“主要由于母語和目標(biāo)語的某些形式和規(guī)則系統(tǒng)不同而被學(xué)習(xí)者誤以為相同所致”(唐承賢:1997)。通俗的說,在第二語言習(xí)得中那些與母語有相似之處的知識(shí)比較容易學(xué)得,反之那些與母語有不同之處的知識(shí)則產(chǎn)生混淆難以學(xué)得(Lado:1957)。
中國學(xué)生學(xué)習(xí)英語是在基本掌握母語的基礎(chǔ)上進(jìn)行的,因而不可避免的受到母語及其他知識(shí)經(jīng)驗(yàn)的影響。要科學(xué)合理地解釋中國學(xué)生學(xué)習(xí)英語的認(rèn)知心理過程就必須考慮母語遷移這一關(guān)鍵問題(Gass Selinker:1992)。
二.英語語法教學(xué)中的母語遷移現(xiàn)象
對于母語在二語習(xí)得中所扮演的角色,德國英語教學(xué)法教授Butzkamm有一個(gè)十分恰當(dāng)?shù)谋扔鳎骸澳刚Z不是一件外衣,學(xué)習(xí)者在踏進(jìn)外語教室之前可以將其脫下,棄之門外”(轉(zhuǎn)引自郭銘華:2002)。這個(gè)比喻告誡我們:母語遷移是第二語言習(xí)得過程中不可避免的現(xiàn)象。對這種現(xiàn)象,我們不能簡單的對其進(jìn)行回避,要承認(rèn)它的存在。既要看到它阻礙干擾外語學(xué)習(xí)的一面,同時(shí)也要認(rèn)識(shí)它對外語學(xué)習(xí)的積極促進(jìn)作用。在母語已先入為主的前提下,外語學(xué)習(xí)不可避免地受到母語的影響。在外語學(xué)習(xí)的初始階段,人們總是借助于一定的漢語知識(shí)對所學(xué)習(xí)的外語進(jìn)行加工、處理,以便理解及儲(chǔ)存。毋庸置疑,在學(xué)習(xí)英語語法時(shí),漢語語法知識(shí)對學(xué)生理解掌握英語語法也存在著影響。
(一)正遷移——漢語語法知識(shí)促進(jìn)英語語法學(xué)習(xí)
奧蘇泊爾的同化理論指出:學(xué)習(xí)是在舊知識(shí)基礎(chǔ)上建構(gòu)新知識(shí)的過程,即利用原有認(rèn)知結(jié)構(gòu)中的知識(shí)理解、消化、吸收、掌握新知識(shí)的過程。[①]不言而喻,中國學(xué)生在進(jìn)行英語語法學(xué)習(xí)時(shí),認(rèn)知結(jié)構(gòu)中原有的部分漢語語法知識(shí)可以加速他們對英語語法的理解和掌握。對比漢英兩種語法,它們之間的許多共性可以促進(jìn)英語語法學(xué)習(xí)正遷移的發(fā)生。如,漢語語法系統(tǒng)的構(gòu)成就是一個(gè)鮮明的例子。如下圖:
漢語四級語法單位及其相互聯(lián)系示意圖
從上圖中可以觀察到漢語語法系統(tǒng)的構(gòu)成特點(diǎn):語素到詞、詞到短語兩個(gè)過程是構(gòu)成關(guān)系,而短語到句子、詞到句子之間則是實(shí)現(xiàn)關(guān)系。英語語法系統(tǒng)的構(gòu)成和其組成部分相互之間的聯(lián)系也是相似的。
西方傳統(tǒng)語言學(xué)認(rèn)為,語法包括詞法和句法兩個(gè)大的方面。下面試從這兩方面說起:
1.詞法舉例
從漢字的構(gòu)造來看,大部分漢字由部首和筆畫組合而成。部首是具有字形歸類作用的表意偏旁,它按照漢字的形體結(jié)構(gòu)取其相同部分排列在一起,以供檢字之用。如在漢語詞典中,一般將諸如“楊”、“松”、“柳”、“柏”等字放在“木”部。這不僅方便了我們的檢索,而且給我們一個(gè)直觀的感受,這些字所表達(dá)的意義都與樹木相關(guān)。即使我們不認(rèn)識(shí)其中某個(gè)字,我們也可大膽的進(jìn)行一些合理的推斷。我們常說的“認(rèn)字認(rèn)半個(gè)”就是這個(gè)原因。在英語單詞的構(gòu)成中,同樣也可找到類似的一些例子。如,把“work”、“teach”、“sing”、“drive”等動(dòng)詞變?yōu)橄鄳?yīng)的名詞分別為“worker” 、“teacher”、“singer”、“driver”。后綴“-er”表明這些詞都與“…人”或“…家”有關(guān)。在“telegraph”、“telephone”、“television”、“telegram”、“telegraphic”和“telecommunication”等單詞中,前綴“tele-”表明它們都與“電視”、“電信”有關(guān)。顯然,漢語中的“木”部與英語中的后綴“-er” 以及前綴“tele-”都有表意的功能。
對照漢英詞的構(gòu)成,我們發(fā)現(xiàn)他們之間也存在一定的共性。其中,最典型的是合成詞的構(gòu)成。如:月+餅→月餅(moon+cake→mooncake),生+日→生日(birth+day→birthday),紙+袋→紙袋(paper+bag→paperbag),藥+房→藥房(drugstore→drugstore),超+市→超市(super+market→supermarket)鐵+路→鐵路(rail+way→railway)等。這些漢英詞的組合方式都是相同的:A+B→AB,而且都屬于偏正結(jié)構(gòu)類型。另外,漢英兩種語言中的縮略語的構(gòu)成方式方面也存在相似之處。如:家用電器→家電,環(huán)境保護(hù)→環(huán)保,外交部長→外長,保證價(jià)值→保值,安全理事會(huì)→安理會(huì)等。在英語中,為了便于書寫和交流,人們常常采用首字母縮略法把很長的詞組(或單詞)縮短形成首字母縮略詞。例如:將“Central Intelligence Agency”縮寫為“CIA”, “ United Nations Educational, Scientific, and Cultural Organization”縮寫為“UNEDU”, “acquired immune deficiency syndrome” 縮寫為“Aids”, “radio detecting and ranging”縮寫為“Radar”(雷達(dá))等等。
此外,從定語修飾名詞的情況來看,漢英兩種語言都具有遞歸性(指某種語法規(guī)則在同一個(gè)句法結(jié)構(gòu)體的構(gòu)造過程中可以重復(fù)使用,從而使這個(gè)結(jié)構(gòu)體由短變長,由簡到繁的現(xiàn)象)。如“two new beautiful green silk evening dress” 兩件又新又漂亮的絲綢晚禮服,“that hungry, tired, sleepy little match girl” 那個(gè)饑餓、疲勞、困倦的賣火柴的小女孩, “an old large brick dining hall” 一個(gè)舊的紅磚砌的大餐廳。顯而易見,在漢英兩種語言中,多個(gè)定語修飾名詞大都遵循近似相同的順序。
2.句法舉例
在探討這個(gè)問題之前,我們首先通過成分分析法來簡要分析一下下面的兩個(gè)例句。
以上兩幅樹形圖不僅清楚地顯示了漢英兩種語言陳述句的橫向結(jié)構(gòu),而且還揭示了它們的縱向結(jié)構(gòu)。通過對比,我們可以從中發(fā)現(xiàn),漢英兩種語言的陳述句都由主語(NP)和謂語(VP)兩部分構(gòu)成,基本語序均為主語+謂語+賓語(S+V+O)。掌握了這一點(diǎn),對于我們學(xué)習(xí)英語簡單句的五種基本類型大有裨益。我們完全可以用漢語語法來對這幾種句式進(jìn)行闡釋:a)不及物動(dòng)詞式:S-V(主語—謂語),如:She died. b)及物動(dòng)詞式:①S-V-O(主語—謂語—賓語),如:He played football;②S-V-DO-IO(主語—謂語—直接賓語—間接賓語),如:I gave her a book;③S-V-O-OC(主語—謂語—賓語—賓語補(bǔ)足語),如:My uncle made his son laugh. c)系動(dòng)詞式:S-V-P(主語—謂語—主語補(bǔ)足語),如:Tom is a doctor.和 The trees become green.
我們在漢語學(xué)習(xí)中經(jīng)常會(huì)遇到一些特殊句式,諸如“把”字句、“被”字句。如:
(1)“把”字句
① 我把錢丟了。② 小王把鋼筆摔壞了。(2)“被”字句
① 他被同伴打了一頓。② 他被打了一頓。
上述例句,對于我們中國學(xué)生是比較容易理解的?!鞍选弊志涞淖饔檬峭怀鰟?dòng)作的發(fā)出者,表示一種主動(dòng)關(guān)系。“被”字句的作用是強(qiáng)調(diào)動(dòng)作的承受者,表示一種被動(dòng)動(dòng)關(guān)系。無獨(dú)有偶,英語語法同樣存在這種情況,即主動(dòng)語態(tài)(the active voice)和被動(dòng)語態(tài)(the passive voice)。如果主語是動(dòng)作的發(fā)出者,使用主動(dòng)語態(tài);反之主語是動(dòng)作的承受者則用被動(dòng)語態(tài)。如:①M(fèi)any people speak English.(主動(dòng)語態(tài))②English is spoken by many people.(主動(dòng)語態(tài))顯然,漢語語法中的“把”字句、“被”字句知識(shí)可以幫助我們更加有效的學(xué)習(xí)英語語法中的主動(dòng)、被動(dòng)語態(tài)知識(shí)。
(二)負(fù)遷移——漢語語法知識(shí)阻礙英語語法學(xué)習(xí)
從英漢差異的角度來看,漢語(屬于漢藏語系,Sino-Tibetan Family)是離印歐語言譜系較遠(yuǎn)的一種語言, 必然給以漢語為母語的二語/外語學(xué)習(xí)者的學(xué)習(xí)過程和規(guī)律帶來不少特殊的問題。[②]
1.詞法舉例
以下是在英語學(xué)習(xí)的初級階段,我們經(jīng)??吹降囊恍┎【洌?/p>
(1)I have three apple.(我有三個(gè)蘋果)
(2)He get up at six every morning.(他每天早晨六點(diǎn)起床)
(3)Tom father is a doctor.(湯姆的爸爸是醫(yī)生)
類似上面的語法錯(cuò)誤,在我們的英語教學(xué)的初級階段是十分常見的。Corder(1971)把這種錯(cuò)誤稱為語際錯(cuò)誤(interlingual),指由母語的語言規(guī)則特征干擾造成的目標(biāo)語使用錯(cuò)誤。[③]無庸贅述,英語是一種有詞形變化的形合語言,通過添加屈折詞綴(如在單數(shù)第三人稱后面加 ‘s’)以指示數(shù)(number)、人稱(person)、體(aspect)和格(case)等語法關(guān)系。而在漢語語法中,卻不存在這種情況。學(xué)生在學(xué)習(xí)新的英語語言規(guī)則時(shí),來自母語的影響不可避免,這種影響最終導(dǎo)致了錯(cuò)誤的發(fā)生。
2.句法舉例
下面同樣是在英語學(xué)習(xí)的初級階段,我們經(jīng)??吹降囊恍┎【洌?/p>
(1) I tomorrow will go to school. (我明天要去學(xué)校)
(2) They in that factory work. (他們在那家工廠上班)
(3) Tom in Chinese sang songs. (湯姆用漢語唱歌)
對于英語初學(xué)者來說,出現(xiàn)上述錯(cuò)誤是相當(dāng)正常的。把上述英語病句和漢語相比較,我們發(fā)現(xiàn)這些病句跟漢英兩種語言結(jié)構(gòu)上的差異有關(guān)。比如,時(shí)間狀語所處的位置,漢英兩種語言就存在著較大差別:在漢語中,時(shí)間狀語一般位于句首或謂語動(dòng)詞前;在英語中,它處在句首或句末。另外,地點(diǎn)狀語和方式狀語在兩種語言中的位置也是不同的:地點(diǎn)狀語和方式狀語在漢語中常位于謂語動(dòng)詞前;在英語中,它們處在句末。
在疑問句方面,漢語疑問句保持陳述句語序的特征也影響英語疑問句的學(xué)習(xí)。如:在漢語中,“他喜歡吃蘋果?!弊?yōu)橐话阋蓡柧涫恰八矚g吃蘋果嗎?”。如果我們直接套用漢語模式,“He likes apples.” 的一般疑問句形式則為 “He likes apples?”。顯然,這是錯(cuò)誤的。正確的做法是:借助助動(dòng)詞 “does”,去掉“l(fā)ikes”的“s”,句末用“?”。即“Does he like apples?”。 類似同樣的語序錯(cuò)誤在英語特殊疑問句的學(xué)習(xí)中也很常見。如:“You are looking for who?”(你找誰?); “You every night when go to bed?”(你每天晚上什么時(shí)候睡覺?)。將這些英漢句子組成成分的順序進(jìn)行對比,發(fā)現(xiàn)錯(cuò)誤來自于漢語疑問句語序的影響。在漢語中,疑問句的語序基本上和陳述句的語序一致(SVO)。而正是這一特征對我們學(xué)習(xí)英語疑問句產(chǎn)生了干擾,母語出現(xiàn)了負(fù)遷移,導(dǎo)致了習(xí)得困難。
此外,我們還應(yīng)特別注意漢英兩種語言中的偏正結(jié)構(gòu)。如:
(1)The man who I talked with is our teacher.1
(和我談話的人是我們的老師。)
(2)This recorder which he is using is made in Japan.
(他用的錄音機(jī)是日本制造的。)
(3)I want to buy something to eat.
(我想買點(diǎn)吃的東西。)
(4)The person sitting in front of him is Jack.
(坐在他前面的人是杰克。)
在漢語中,修飾名詞的定語成分一般位于該詞的前面。英語則將其置后,諸如定語從句、動(dòng)詞不定式、分詞等。
上述語言學(xué)習(xí)問題,F(xiàn)ries在Linguistics Across Culture (Lado:1957)一書的序言中曾有精辟的闡述:“學(xué)習(xí)第二語言和學(xué)習(xí)第一語言是很不一樣的任務(wù),其基本的問題的產(chǎn)生不是由于新語言的特點(diǎn)本身帶來的必不可少的困難,而主要是由于第一語言習(xí)慣所造成的定勢?!盵④]在學(xué)習(xí)過程中,定勢可能促進(jìn)學(xué)習(xí)遷移,也可能干擾學(xué)習(xí),產(chǎn)生負(fù)遷移。作為英語教師,我們應(yīng)該看到漢英兩種語言語法之間的異同,同時(shí)給予學(xué)生適當(dāng)強(qiáng)化訓(xùn)練,以便促使學(xué)生真正將其理解和掌握。
結(jié)語
母語遷移是由于學(xué)習(xí)者受到目的語和母語之間的相似或差異所產(chǎn)生的影響。[⑤]這種現(xiàn)象在語言教學(xué)中普遍存在,不容忽視、回避。從整個(gè)英語學(xué)習(xí)的過程來看,中國英語教學(xué)必經(jīng)兩個(gè)階段:從以漢語為工具學(xué)習(xí)英語的初級階段,逐步過渡到以英語語言為工具學(xué)習(xí)英語的高級階段。[⑥]無論在那一階段,或多或少都存在母語遷移。如何有效利用、控制母語遷移,提高英語教學(xué)效率,是我們英語教學(xué)必須應(yīng)對的一個(gè)挑戰(zhàn)。他山之石,可以攻玉。作為教育者,我們應(yīng)該深入挖掘英漢兩種語言的共同要素,以便促進(jìn)學(xué)生在英語學(xué)習(xí)中掌握語法規(guī)律,英語教學(xué)效率定會(huì)有所提高。
注釋:
[①]參見皮連生.學(xué)與教的心理學(xué)[M].上海:華東師范大學(xué)出版社,2000:116.
[②]戴煒棟,周大軍.中國的二語習(xí)得研究:回顧、現(xiàn)狀與前瞻[J].外國語,2005(5).
[③]楊連瑞,張德祿.二語習(xí)得研究與中國外語教學(xué)[M].上海:上海外語教育出版社,2007:254.
[④]楊連瑞,張德祿.二語習(xí)得研究與中國外語教學(xué)[M].上海:上海外語教育出版社,2007:103-104.
[⑤]石蘊(yùn)珍,王穎.從認(rèn)知角度談?wù)Z言遷移與對外漢語教學(xué)[J].遼寧教育行政學(xué)院報(bào),2009(10):108.
[⑥]馬力達(dá),周秀蘭.從英漢差異及語言遷移透視英語教學(xué)[J]. 遼寧工業(yè)大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2008(10):119.
參考文獻(xiàn):
[1]彭聘齡.普通心理學(xué)[M].北京:北京師范大學(xué)出版社.2004.
[2]陳琦.劉儒德.當(dāng)代教育心理學(xué)[M].北京:北京師范大學(xué)出版社.2007.
[3]皮連生.學(xué)與教的心理學(xué)[M].上海:華東師范大學(xué)出版社.2000.
[4]楊連瑞,張德祿.二語習(xí)得研究與中國外語教學(xué)[M].上海:上海外語教育出版社,2007.
[5]黃伯榮,廖序東.現(xiàn)代漢語[M].北京:高等教育出版社,2007.
[6]勞允棟.英漢語言學(xué)詞典[M].北京:商務(wù)印書館.2005.
[7]中國社會(huì)科學(xué)院語言研究所.現(xiàn)代漢語詞典[M].北京:商務(wù)印書館. 1983.
[8]韋邁爾(英).牛津高階英語詞典(第七版,英語版)[M].北京:商務(wù)印書館.2003.
[9]薄冰.高級英語語法[M].北京:高等教育出版社.2000.
[10]Rodney Huddleston, Geoffrey K. Pullum.劍橋?qū)W生英語語法(英文版)[M].北京:外語教育與研究出版社.2008.
[11]孟凡勝.英語語法教程[M].青島:青島海洋大學(xué)出版社.2000.
[12]石蘊(yùn)珍,王穎.從認(rèn)知角度談?wù)Z言遷移與對外漢語教學(xué)[J].遼寧教育行政學(xué)院報(bào),2009(10).
[13]馬力達(dá),周秀蘭.從英漢差異及語言遷移透視英語教學(xué)[J]. 遼寧工業(yè)大學(xué)學(xué)報(bào)(社會(huì)科學(xué)版),2008(10).
Abstract:Language transfer is an effect which is caused by similarities or differences between native language and target language of a language learner. The phenomenon commonly exists in the process of SLA. Language transfer divides into positive transfer and negative transfer, according to the effects of native language in SLA. Positive transfer may help language learners to accelerate the speed of learning target language. Negative transfer may disturb or make difficulties for learning target language. Through examples, the paper discussed the effect of Chinese grammar knowledge to English grammar learning. And the author advocates educators look for the similarities between Chinese and English positively, and which helps students to promote mastery of English grammar rules, and finally improves efficiency of English grammar teaching..
參考資料:洛陽師范學(xué)院學(xué)報(bào),2012年第10期
轉(zhuǎn)載請參見文章末尾處的要求。【感謝張佳偉(@ghosert)的熱心翻譯。如果其他朋友也有不錯(cuò)的原創(chuàng)或譯文,可以嘗試推薦給伯樂在線?!窟@是一篇(長)博文, 介紹了我們在 Repustate 遷移大量 Python/Cython 代碼到 Go 語言的經(jīng)驗(yàn)。如果你想了解整個(gè)故事,背景和所有的事情,請繼續(xù)往下讀。如果你只是想了解 Python 開發(fā)者在一頭扎進(jìn) Go 語言前需要了解什么,請點(diǎn)擊一下鏈接:從Python遷移到Go的建議(Tips Tricks) 背景在Repustate,我們完成過的最棒的技術(shù)成就之一是實(shí)現(xiàn)了阿拉伯語的情感分析。阿拉伯語是一塊難啃的硬骨頭,因?yàn)樗脑~形變化相當(dāng)復(fù)雜。比起譬如英語,阿拉伯語的分詞(將一個(gè)句子切分呈幾個(gè)獨(dú)立的單詞)也更困難,因?yàn)榘⒗Z的單詞本身還可能會(huì)包含空白字符(例如:“阿列夫”在一個(gè)單詞里的位置)。這也談不上是泄密,Repustate 使用支持向量機(jī)(SVM)來獲取一個(gè)句子背后最有可能的含義,并在其中加上情感元素。 總體上來說,我們使用了 22 種模型(22 個(gè) SVM) 并且在一篇文檔中,每一個(gè)單詞我們都會(huì)加以分析。因此如果你有一篇 500 字的文檔,那么基于 SVM,會(huì)進(jìn)行十萬次的比較。 PythonRepustate 幾乎完全就是一個(gè) Python 商店。我們使用 Django 來實(shí)現(xiàn) API 和網(wǎng)站。因此(目前)為了保持代碼一致,同時(shí)使用 Python 來實(shí)現(xiàn)阿拉伯語情感引擎是合情合理的。只是做原型和實(shí)現(xiàn)的話,Python 是很好的選擇。它的表達(dá)能力很強(qiáng)悍,第三方類庫等等也很好。如果你就是為了Web服務(wù),Python 很完美。但是當(dāng)你進(jìn)行低級別的計(jì)算,大量依賴于哈希表(Python 里的字典類型)做比較的時(shí)候,一切都變慢了。我們每秒能處理大約兩到三個(gè)阿拉伯文檔,但是這太慢了。比較下來,我們的英語情感引擎每秒能處理大約五百份文檔。 瓶頸因此我們開啟了 Python 分析器,開始調(diào)查是什么地方用了那么長時(shí)間。還記得我前面說過我們有 22 個(gè) SVM 并且每個(gè)單詞都需要經(jīng)過處理嗎?好吧,這些都是線性處理的,非并行處理。所以我們的第一反應(yīng)是把線性處理改成 map/reduce 那樣的操作。簡單來說:Python 不太適合用作 map/reduce。當(dāng)你需要并發(fā)的時(shí)候,Python 算上好用。在 2013 Python 大會(huì)上(譯者:PyCon 2013),Guido 談到了 Tulip,他的這個(gè)新項(xiàng)目正在彌補(bǔ) Python 這方面的不足,不過得過段一段時(shí)間才能推出,但是如果已經(jīng)有了更好用的東西,我們?yōu)槭裁催€要等呢? 選Go 語言,還是回家算了?我在Mozilla的朋友告訴我,Mozilla 內(nèi)部正在將他們大量的基礎(chǔ)日志架構(gòu)切換到 Go 語言上,部分原因是因?yàn)閺?qiáng)大的 [goroutines]。Go 語言是 Google 的人設(shè)計(jì)的,并且在設(shè)計(jì)之初就把支持并發(fā)作為第一要?jiǎng)?wù),而不是像 Python 的各種解決方案那樣是事后才加上去的。因此我們開始著手把 Python 換成 Go 語言。雖然Go 代碼還不算正式上線的產(chǎn)品,但是結(jié)果非常令人鼓舞。我們現(xiàn)在能做到每秒處理一千份文檔,使用更少的內(nèi)存,還不用調(diào)試你在 Python 里遇到:丑陋的多進(jìn)程/gevent/“為什么 Control-C 殺不了進(jìn)程”這些問題。 為什么我們喜歡 Go 語言任何人,對編程語言是如何工作(解釋型 vs 編譯型, 動(dòng)態(tài)語言 vs 靜態(tài)語言)有一點(diǎn)理解的話,會(huì)說,“切,當(dāng)然 Go 語言會(huì)更快”。是的,我們也可以用 Java 把所有的東西重寫一遍,也能看到類似更快的改善,但那不是 Go 語言勝出的原因。你用 Go 寫的代碼好像就是對的。我搞不清楚到底是怎么回事,但是一旦代碼被編譯了(編譯速度很快),你就會(huì)覺得這代碼能工作(不只是跑起來不會(huì)錯(cuò),而且甚至邏輯上也是對的)。我知道,這聽上去不太靠譜,但是確實(shí)如此。這和 Python 在冗余(或非冗余)方面非常類似,它把函數(shù)作為第一目標(biāo),因此函數(shù)編程會(huì)很容易想明白。而且當(dāng)然,go 線程和通道讓你的生活更容易,你可以得到靜態(tài)類型帶來的性能大提升,還能更精細(xì)的控制內(nèi)存分配,而你卻不必為此在語言表達(dá)力上付出太多的代價(jià)。 希望能早點(diǎn)知道的事情(Tips Tricks)除去所有這些贊美之詞以后,有時(shí)你真的需要在處理 Go 代碼的時(shí)候,相對于 Python,改變一下思維方式。因此這是我在遷移代碼時(shí)記錄的筆記清單 —— 只是在我把 Python 代碼轉(zhuǎn)換到 Go 時(shí)從我腦子里隨機(jī)冒出來的點(diǎn)子:沒有內(nèi)建的集合類型(必須使用map,并檢查是否存在)因?yàn)闆]有集合,必須自己寫交集,并集之類的方法沒有tuples 類型,必須寫你自己的結(jié)構(gòu),或者使用 slices (即數(shù)組)沒有類似 \__getattr__() 的方法,你必須總是檢查存在性,而不是設(shè)置默認(rèn)值,例如,在 Python 里,你可以這樣寫 value = dict.get(“a_key”, “default_value”)必須總是檢查錯(cuò)誤(或者顯式的忽略錯(cuò)誤)不能有變量/包沒被使用,因此簡單的測試也需要有時(shí)注掉一些代碼在[] byte 和 string 之間轉(zhuǎn)換。 regexp 使用 [] byte (不可變)。這是對的,但是老把一些變量轉(zhuǎn)換來轉(zhuǎn)換去很煩人Python 更寬松。你可以使用超出范圍的索引在字符串里取一個(gè)片段,而且不會(huì)出錯(cuò)。你還可以用負(fù)數(shù)取出片段,但是 Go 不行你不能混合數(shù)據(jù)結(jié)構(gòu)類型。也許這樣也不太干凈,但是有時(shí)在 Python 里,我會(huì)使用值是混合了字符串和列表的字典。但是 Go 不行,你不得不清理干凈你的數(shù)據(jù)結(jié)構(gòu)或者使用自定義的結(jié)構(gòu)不能解包一個(gè) tuple 或者 list 到幾個(gè)不同的變量(例如:x, y, z = [1, 2, 3])駝峰式命名風(fēng)格(如果你沒有首字大寫方法名/結(jié)構(gòu)名,他們不會(huì)被暴露給其它的包)。我更喜歡 Python 的小寫字母加下劃線命名風(fēng)格。必須顯式檢查是否有錯(cuò)誤 != nil, 不像在 Python 里,許多類型可以像 bool 那樣檢查 (0, “”, None 都可以被解釋成 “非” 集合)文檔在一些模塊上太散亂了,例如(crypto/md5),但是 IRC 上的 go-nuts 很好用,提供了巨大的幫助。從數(shù)字到字符串的轉(zhuǎn)換(int64 - string) 和 []byte - string (只要使用 string([]byte))不太一樣。需要使用 strconv。閱讀Go 代碼比起 Python 那樣寫起來如偽代碼的語言更像一門編程語言, Go 有更多的非字母數(shù)字字符,并且使用 || 和 , 而不是 “or”和“and”寫一個(gè)文件的話,有 File.Write([]byte) 和 File.WriteString(string), 這點(diǎn)和 Python 開發(fā)者的 Python 之道:“解決問題就一種方法 ”相違背。修改字符串很困難,必須經(jīng)常重排 fmt.Sprintf沒有構(gòu)造函數(shù),因此慣用法是創(chuàng)建 NewType() 方法來返回你要的結(jié)構(gòu)Else (或者 else if)必須正確格式化,else 得和 if 配對的大括號在同一行。奇怪。賦值運(yùn)算符取決于在函數(shù)內(nèi)還是函數(shù)外,例如,= 和 :=如果我只想要“鍵”或者只想要 “值”,譬如: dict.keys() 或者 dict.values(),或者一個(gè) tuples 的列表,例如:dict.items(),在 Go 語言里沒有等價(jià)的東西,你只能自己枚舉 map 來構(gòu)造你的列表類型我有時(shí)使用一種習(xí)慣用法:構(gòu)造一個(gè)值是函數(shù)的字典類型,我想通過給定的鍵值調(diào)用這些函數(shù),你在 Go 里可以做到,但是所有的函數(shù)必須接受,返回相同的東西,例如:相同的方法簽名如果你使用 JSON 并且 你的 JSON 是一個(gè)復(fù)合類型,恭喜你。 你必須構(gòu)造自定義的結(jié)構(gòu)匹配 JSON 塊里的格式,然后把原始 JSON 解析到你自定義結(jié)構(gòu)的實(shí)例中去。比起 Python 世界里 object = json.loads(json_blob) 要做更多的工作 是不是值得?值得,一百萬倍的值得。速度的提升太多了,以致很難舍棄。同時(shí),我認(rèn)為, Go 是目前趨勢所在,因此在招新員工的時(shí)候,我認(rèn)為把 Go 當(dāng)作 Repustate 技術(shù)積累的重要一環(huán)會(huì)很有幫助。]
網(wǎng)站欄目:go語言遷移其他語言 go語言類型轉(zhuǎn)換
鏈接地址:http://jinyejixie.com/article12/ddojddc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、服務(wù)器托管、ChatGPT、外貿(mào)建站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)