日本研究:暖化可能使颱風速度減慢而更易致災

摘錄自2020年1月9日中央社報導

日本一項研究顯示,地球若持續暖化,經過日本附近的颱風行進速度將比現在慢約10%;颱風行進速度減慢,將拉長強風大雨影響時間,也就更可能造成淹水及土石崩落等災情。

日本朝日新聞報導,日本氣象廳氣象研究所等組成團隊公布一項預測結果,並已刊載在國際頂尖期刊「自然通訊」(Nature Communications)上。

氣象研究所主任研究官山口宗彥等人,假設本世紀末地球平均氣溫已較第一次工業革命前高出攝氏4度(目前約高3度),利用電腦進行氣候變化的演算。

結果顯示,受到日本上空西風帶被往北推升等影響,颱風的行進方向與速度也會發生變化,經過日本列島周邊的平均時速會減慢約10%。山口說,颱風行進速度一旦減緩,降雨量將更為增加,提升造成重大災情的風險。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

電、毒、炸樣樣來 2019斯里蘭卡死361頭大象 創新高

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

※南投搬家費用,距離,噸數怎麼算?達人教你簡易估價知識!

「歐盟綠色政綱」行動路線圖重點:碳關稅、能源稅改、綠色轉型融資、氣候盟約

文:郭映庭(台大風險社會與政策研究中心研究員)

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※南投搬家前需注意的眉眉角角,別等搬了再說!

中國電動車產業趨於成熟,2016年車用鋰電池後市看俏

今年全球電動車市場整體表現不俗,主要歸功於中國市場政策支持而推動,前景持續看好。2015年中國電動車銷售量達13萬輛水準,年成長高達20%,而在整體銷售量中純電動車即占有64%。

TrendForce旗下綠能事業處EnergyTrend分析師呂理舜表示,中國電動車的穩健發展帶動了鋰電池新一波高峰,應用主要區分為圓柱型鋰電池(小型電池)及方型鋰電池(大型電池),在過往市場混屯階段時於各種車輛中混用,但到了2016年電池在特定車種的搭配性將更為明確。

此外,預期明年車用鋰電池也將因電動車熱銷加持而出現短缺,圓柱型電池或方型電池後勢看俏,帶動電動車電池出現少見的漲價聲浪。隨著補貼降低與車輛技術成熟,中國將走向更細緻與明確的發展策略。

TrendForce預測2016年中國鋰電池於電動車產業中重要趨勢如下:

中國政府補貼力道逐漸放緩,2016年電動車產業逐漸收斂

中國電動車產業漸趨成熟,中國政府也決定逐漸免除單純給予車廠的價格補貼,轉向針對過去較為不足的周邊配套進行強化,包括研發、生產、購買和充電環境等多層面相,邁向更成熟的完整配套。明年除了在購買上免徵牌照稅外,另增輕型電動車的購買補助辦法;充電方面也提供寬鬆的融資擔保條件,讓進度落後的充電設施能夠跟上電動車銷售的成長性。呂理舜指出,此一措施也將使非主流電動車供應者、或剛要開始投入的品牌車廠,逐步被市場所淘汰,從百花爭鳴進階到汰弱扶強的階段。

圓柱型電池焦點轉向汽車和微型車市場

對比在筆記型電腦市場的衰退,圓柱型電池焦點已明顯轉往中國電動車。以車種搭配來看,圓柱型電池的主要使用對象為特斯拉,但隨著中國微型車興起,也讓圓柱型電池在中國成為搶手貨,包括比克、力神、比亞迪等主要廠商產能皆滿載,來年的擴增產能計劃也持續規劃中。

6~8米輕型電動客車將以方型鋰電池為主

近年興起的6~8米輕型電動客車也是另一關注焦點,EnergyTrend統計指出,自2013年中國首次納入規廣補貼範圍後,掛牌量突破6000輛,主要購買客戶包括汽車租賃公司、及公務/商務客戶。

除了國家補貼的30萬人民幣外,成長主要動能也包括各地方的補助,促使6~8米輕型電動客車購買成本可低於傳統客車,部分補貼較高的地區甚至可達零成本。目前供應商如合肥國軒、新能源等,都開始因6~8米中小型電動客車需求提升,而推升應用的方型電池供應量,也帶動整體價格水漲船高。EnergyTrend統計,今年下半年方型電池已有約5%的漲幅,2016年也將維持在5%的價格提升。

 

3Q15 鋰電池銀級會員報告

消費型應用

  • 電池芯供需變化
  • 國際、中國電池的產能動態
  • 圓柱、方型與高分子的價格與供需狀況
  • 未來的三種電池芯發展走向

動力型應用

  • 新出台的的新能源車補助措施
  • 低速電動車(微型車)、乘用車與輕型客車的崛起

如果您想要瞭解更多關於EnergyTrend 鋰電池產業報告的細節,以及會員報告的說明,請點這裡或歡迎聯繫:

Joanne Wu (Taipei)

joannewu@trendforce.com

+886-2-8978-6488  ext. 912 

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

Gogoro進軍荷蘭!阿姆斯特丹體驗店2016夏季開張

來自台灣的Smartcooter智慧雙輪電動機車Gogoro 將進軍歐洲!2016年夏天,荷蘭阿姆斯特丹將擁有歐陸第一間Gogoro體驗店,與國際分享智慧能源網路、智慧城市的創新科技,同時在歐洲推動低碳交通工具。

Gogoro參加2015年義大利米蘭國際機車展,同時宣布將進軍歐洲,在阿姆斯特丹成立第一家海外體驗店。同時,Gogoro也受邀參與荷蘭阿姆斯特丹智慧城市體驗實驗室(Amsterdam Smart City Experienced Lab),推動更有效的都會能源使用、深化智慧城市願景。同時,Gogoro也將在阿姆斯特丹佈建GoStation電池交換站以及Smartscooter電動機車。

Gogoro共同創辦人暨執行長Horace Luke表示:「許多歐洲城市都渴望能以創新的商業模式,打造更有效率、更智慧的能源使用方式,這也是為什麼Gogoro 選擇明年至歐洲開拓市場。Smartscooter™ 智慧雙輪與Gogoro® 能源網路正是為了協助大都會能源更有效運用而設計,因此我們也正在與阿姆斯特丹以及歐洲各大城市密切合作,協助全球大型都會逐步轉型為更進步的智慧城市。」

阿姆斯特丹Gogoro體驗店是Gogoro海外拓展計劃的第一站,2016下半年起也預計在更多歐洲城市規畫成立。

國發基金增資,推動全球拓展計劃

潤泰集團、Panasonic以及行政院國家發展基金日前宣布增資1.3億美元,幫助Gogoro發產電動機車、能源管理以及智慧城市科技。增資後,Gogoro資本額成長到1.8億美元,且Smartscooter的電池Panasonic供應商也正式成為Gogoro的第一個策略投資夥伴。

潤泰集團總裁尹衍樑是Gogoro首輪與第二輪最主要的投資者。國發基金的目標則是用於投資、資助新科技重點企業或新創公司。經過增資後,Gogoro擁有更充足的資金走向全世界。

目前,全台已有近2,000輛Gogoro機車發牌,在大台北與桃園地區則擁有近90處電池交換站。

(照片來源:Gogoro)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

C-power 2016中國(上海)國際智慧充換電樁技術設施展覽會暨高層論壇

時 間:2016年5月24-26日  
地 點:上海新國際博覽中心(龍陽路2345號)
主辦單位:中國電工技術學會、上海市電機工程學會、上海電器行業協會
協辦單位:國家電網公司、南方電網公司、中石油、中石化、中國新能源汽車聯盟會、上汽集團、美國新能源汽車產業協會、德國能源產業協會、韓國新能源產業聯盟會
承辦單位:拜仁展覽(上海)有限公司

市場前景:

自2014年以來,國家相繼出臺了多種政策措施扶持新能源汽車和充電設施的發展,隨著各級政府對充電設施建設投入加大,充電設施市場即將迎來大爆發時期。

國家能源局發佈了《配電網建設改造行動計畫(2015-2020年》,未來五年新能源汽車充電設施配電建設將成為電能替代工作的重點,隨著一系列政策利好的落地,新能源汽車行業有望飛速發展。

按照《電動汽車充電基礎設施發展指南》(2015-2020),做好配電網規劃與充換電設施規劃的銜接,加強充換電設施配套電網建設與改造,保障充換電設施無障礙接入。2020年滿足1.2萬座充換電站、480萬台充電樁接入需求,為500萬輛電動汽車提供充換電服務。按照計畫,能源局將在五年內做好配電網規劃與充換電設施規劃的銜接,加強充換電設施配套電網建設與改造,保障充換電設施無障礙接入。2015年充電站市場規模預計將達到200億元,2016年400億元,到2020年將突破1000億元,充電站市場已成為企業掘金的藍海。

為迎合市場發展需求,創造供需雙方零接觸的洽談機會,由中國電工技術學會、上海市電機工程學會等權威單位共同主辦的“C-POWer2016上海國際智慧充換電樁技術設施展覽會暨高層論壇”,將於2016年5月24-26日在上海新國際博覽中心隆重上演。本屆展會將積極迎合市場新趨勢,為推動我國新能源汽車產業健康快速發展方面發揮更加積極的作用,智慧充電,商機無限!

展覽排程:
報到布展:2016年5月22-23日  09:00-18:00
展出時間:2016年5月24-26日  09:00-16:30
展商撤展:2016年5月26日   14:00-18:00
展覽地點:上海新國際博展中心(龍陽路2345號)

參展範圍:
◆充換電設備:充電樁、充電機、充電櫃、換電設備等;。
◆配電設備:變壓器、變頻器、配電櫃、高低壓保護設備、低壓開關、繼電器等;
◆濾波裝置、監控設備;
◆充電站監控系統:充電機監控管理系統、配電監控系統、通訊管理監控系統、安防系統;
◆儲能電池、動力電池及電池管理系統;
◆分散式微電網:光伏系統、儲能系統、控制系統、燃料電池等;
◆充電相關技術、連接器、電纜等;
◆無線充電樁產品和技術展示;
◆充電站智慧型網路專案規劃及成果展示;
◆相關諮詢和媒體。

C-POWer2016中國(上海)國際智慧充換電樁技術設施展覽會暨高層論壇大會聯絡處:
地  址:上海市浦東新區金橋路58號銀東大廈19樓B座
電  話:+86-21-68551123          傳  真:+86-21-68551157
連絡人:蔡 明13916931916          
網  址:    E-mail:

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

js數組方法大全(上)

# js數組方法大全(上)

記錄一下整理的js數組方法,免得每次要找方法都找不到。圖片有點多,注意流量,嘻嘻!

本期分享

  • join()
  • reverse()
  • sort()
  • concat()
  • slice()
  • splice()
  • push()
  • pop()
  • unshift()
  • shift()
  • toString()
  • toLocaleString()

下期分享

  • forEach()
  • map()
  • filer()
  • every()
  • some()
  • reduce()
  • reduceRight()
  • indexOf()
  • lastIndex()

join() —>用指定分割符將數組轉為字符串

  • 使用熱度:常用
  • 是否改變原始數組:否
  • 返回:按指定字符串進行分割后的字符串
  • 參數:
參數位置 參數類型 是否必選 作用
1 string 否 將數組轉為字符串,並用指定字符進行分割
  • 說明:不傳入參數的話,將數組元素轉為字符串,並用逗號進行分割
  • 實例如下:
var log=console.log;
var a=[1,2,3];
log(a.join());
log(a.join(" "));
log(a.join(""));
var b = new Array(10);
log(b.join('-'))

reverse() —>將數組元素顛倒

  • 使用熱度:不常用
  • 是否改變原始數組:是
  • 返回:將數組中的元素顛倒順序,返回逆序的數組。
  • 參數:無
  • 實例如下:
var log=console.log;
var a=[1,2,3];
a.reverse();
log(a);

sort() —>按指定要求對數組進行排序

  • 使用熱度:不常用
  • 是否改變原始數組:是
  • 返回:返回排序后的數組
  • 參數:
參數位置 參數類型 是否必選 作用
1 function 否 函數的兩個參數分別是數組對應的兩個元素,函數返回大於0,則第一個參數排在前面。函數返回一個小於0的數,則第一個參數排在後面。函數返回0,代表這兩個參數的排序無關緊要。
  • 說明:不傳入參數的時候,會將數組元素按字母表排序並返回,如果元素非字符串,將會臨時轉為字符串進行比較,如果元素中有undefined,則會甩到最後面。
  • 實例如下:
var log=console.log;
var a=[,'a','b',true];
a.sort()
log(a)
var b=[3,7,4,4,2]
b.sort(function(i,j){
    return i-j
})
log(b)

concat() —>將數組和其他元素合併返回新的數組

  • 使用熱度:常用
  • 是否改變原始數組:否
  • 返回:返回一個合併了的新數組
  • 參數:
參數位置 參數類型 是否必選 作用
1+ * 否 將原始數組的每個元素和每個參數合併到一個新的數組並返回
  • 說明:如果參數中有數組,這將數組拆分合併,而不是直接合併數組本身,但是不遞歸扁平化數組的數組。
  • 實例如下:
var log=console.log;
var a=[1,2,3];
var b=a.concat(4,5,6,[7,8,[9,10]]);
log(a);
log(b);

slice() —>截取數組一段進行返回

  • 使用熱度:常用
  • 是否改變原始數組:否
  • 返回:一個數組的一個片段或者子數組
  • 參數:
參數位置 參數類型 是否必選 作用
1 number 是 用來指定要返回的數組片段開始位置
2 number 否 用來指定要返回數組的結束位置,如不指定,則表示返回到數組末尾
  • 說明:如果參數是一個負數,則從數組倒數開始和結束。
  • 實例如下:
var log=console.log;
var a=[1,2,3,4,5,6];
var b =a.slice(1)
log(b)
var c=a.slice(1,-1)
log(c)
var d=a.slice(-3,-1)
log(d)

splice() —>刪除或者替代數組指定區域

  • 使用熱度:經常用
  • 是否改變原始數組:是
  • 返回:刪除的數組,如果未刪除則返回空數組
  • 參數:
參數位置 參數類型 是否必選 作用
1 number 是 用來指定插入或者刪除的起始位置
2 number 否 指定要刪除或者替代數量,如果不指定,這會刪除所有
3+ * 否 替代的元素
  • 實例如下:
var log=console.log;
var a=[1,2,3,4,5,6,7,8,9];
var b=a.splice(8);
log(a);
log(b);

var c=a.splice(5,1);
log(a);
log(c);

var d=a.splice(2,2,'a',[33,44]);
log(a);
log(d)

push() —>在數組元素後面增加元素

  • 使用熱度:頻繁使用
  • 是否改變原始數組:是
  • 返回:新數組的長度
  • 參數:
參數位置 參數類型 是否必選 作用
1+ * 否 在數組末尾增加一個或多個數組元素
  • 說明:在數組末尾增加一個元素
  • 實例如下:
var log=console.log;
var a=[1,2,3];
var b=a.push()
log(a)
log(b)

var c=a.push(4,5,6);
log(a)
log(c)

pop() —>刪除數組元素後面的一個元素

  • 使用熱度:不常用
  • 是否改變原始數組:是
  • 返回:被刪除的數組
  • 參數:無
  • 說明:刪除數組末尾的一個元素
  • 實例如下:
var log=console.log;
var a=[1,2,3,4,5,6];
var b=a.pop()
log(a)
log(b)

unshift() —>在數組前面增加元素

  • 使用熱度:常用
  • 是否改變原始數組:是
  • 返回:新數組的長度
  • 參數:
參數位置 參數類型 是否必選 作用
1+ * 否 在數組頭部增加一個或多個數組元素
  • 說明:當使用多個參數調用unshift方法的時候它的行為令人驚訝。參數是一次性插入的(就像splice方法),而非一次一個插入。這意味着最終的數組中插入的元素的順序和他們在參數列表中的順序一致。而假設元素是一次一個的插入。他們的順序應該是反過來的。
  • 實例如下:
var log=console.log;
var a=[1,2,3];
var b=a.unshift()
log(a)
log(b)

var c=a.unshift(4,5,6);
log(a)
log(c)

shift() —>刪除數組第一個元素

  • 使用熱度:不常用
  • 是否改變原始數組:是
  • 返回:被刪除的數組
  • 參數:無
  • 說明:刪除數組末尾的一個元素
  • 實例如下:
var log=console.log;
var a=[1,2,3,4,5,6];
var b=a.shift()
log(a)
log(b)

toString —>將數組轉為字符串

  • 使用熱度:常用
  • 是否改變原始數組:否
  • 返回:數組字符串
  • 參數:無
  • 說明:輸出不包括方括號或者其他任何形式的包裹數組值的分隔符;此方法與不使用任何參數調用join方法返回的字符串一樣。
  • 實例如下:
var log=console.log;
var a=["a",2,{"b":"c"},["d"]];
var b=a.toString()
log(a)
log(b)

toLocaleString() —>將數組使用本地化的方式轉為字符串

  • 使用熱度:不常用
  • 是否改變原始數組:否
  • 返回:
  • 參數:
參數位置 參數類型 是否必選 作用
1 string/array 否 縮寫語言代碼(BCP 47 language tag,例如:cmn-Hans-CN)的字符串或者這些字符串組成的數組
2 string/object 否 對字符串或數組處理的方式
  • 說明:在舊的瀏覽器實現中,會忽略這兩個參數,使用的語言環境和返回的字符串的形式完全取決於實現方式。
  • 實例如下:
var log=console.log
var a = [111,222,333];
var b=a.toLocaleString('ar-EG')
var c=a.toLocaleString('zh-Hans-CN-u-nu-hanidec')
log(a);
log(b);  
log(c);  

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

碼出優美

  一份擁有良好可讀性和拓展性的代碼是項目里的良藥,它不僅看着舒服,改起來也方便,甚至還能重用,各模塊邏輯分明。“見碼知功底”,而要達到高手那種簡潔有力的境界,需要進行大量的總結和練習,今天我們就來談談如何寫出優美的代碼。

  

命名

  好的命名應該具有如下特徵:

  1,意思正確。這是最基本的要求,不要掛羊頭賣狗肉,詞不達意,要一眼就知道什麼意思。就算一眼看不出來,複製到有道詞典翻譯一下也能知道什麼意思;

  2,單複數分明。如果是一個數組,要麼加s/es結尾表明其是複數,要麼加入list表示它是一個數組。如cars,carList都可以表達一個車的列表;

  3,慎用縮略詞。縮略詞可以讓我們的命名更加簡潔,但是一!定!要!是!業!界!通!用!縮!略!詞!比如info原意為information,msg原意為message,fn原意function,conf原意config等等,這些縮略詞都是業內傳統了,大家都知道什麼意思,切記不要自己亂造縮略詞;

  4,有具體含義。根據業務場景去命名,而不是根據抽象命名;比如getUnreadMsgList,一看就知道是獲取未讀消息列表的意思,而getData這種說了跟沒說一樣,缺乏具體含義。

 

註釋

  有表達力的代碼是不需要註釋的。比如一個init函數,一看就知道是用於做一些初始化的工作,沒必要寫多餘的註釋來說明。

  但是有一些場景註釋是非常有必要的,下面幾種場景要添加註釋:

  1,一些針對特殊業務場景而訂製的特殊邏輯。比如當我們更新個人信息的時候,由於後端的問題,需要少傳一個諸如生日的信息,或者更新頭像時要多傳一個時間戳來供其他業務以後使用。這些莫名其妙的增刪屬性,如果不加以註釋,將導致後續自己都無法理解;

  2,可能會出現隱患的代碼。由於自身水平所限,或者本身技術上就無法實現,只能通過一些特殊技巧來仿製一些效果,往往會存在安全隱患,比如:用戶操作太快會出問題,網絡太慢會出問題,某個接口調不通這頁面會全掛了,一些特殊的操作會引起的暫時無法解決的bug等等場景,都需要註釋說明;

  3,涉及到某些高深的或者生僻的技術知識。這種也要註釋,以提醒自己和其他開發者。

  一般來說,註釋基本上都是在表達“這裏我為什麼這麼做”,很少有註釋會去表達“我是一個什麼玩意兒”,如果是後者的註釋,只能說明命名沒做好。

  

函數

  函數是代碼的靈魂,也是寫邏輯的載體,以下幾個要求是判斷一個開發者函數寫的好不好的標準。

  1,是不是單一職責。一個函數應該只做一件事,而這件事應該能通過函數名就可以清晰的展示。這是一個非常好的特性,一個辣雞的函數可能動輒幾百行代碼,各種邏輯堆積在一起,看得人頭腦發暈,甚至開發者自己都理不清楚;判斷這個函數是不是單一職責的技巧很簡單:看看它還能不能再拆分。

  2,有沒有層級之分。函數與函數之間是有身份地位之分的,有負責整體大局觀的高級函數,也有專註細節的打工仔低級函數。如果不建立起層級結構,就容易迷失在細節的海洋里。比如:

  

 

 

  對於做一頓飯這個函數來說,他不需要關心諸如買菜時反覆挑選這種細節,它只需要知道,大概有三個大步驟就行了。所以這段邏輯會根據其地位拆分出不同等級的函數,假設沒有層級之分,那麼從第一步的“搭公交”一直寫到最後一步的“倒垃圾”,這東西會變得極難維護。

 

  3,承載的場景是否足夠簡單。有時候我們會遇到這樣一種場景:一個函數在很多地方都會用到,但是不同地方傳入的參數不一樣,這樣我們為了函數的通用性,就針對入參做了很多種場景的識別,導致入參非常多,裏面還需要根據不同的場景做邏輯上的細微調整。所以單單是取傳入參數都夠嗆了,一堆的if else或switch case。

  這個函數太難了,而且這已經違背了函數的單一職責原則,它在裏面做了多種場景的判斷,從而表現出不同的行為,但這些行為又不是完全不同,而是“大體相同”,如果重寫好像又會增加很多的重複的代碼。解決的方法是做更小粒度的拆分,將那些真正與業務脫鈎的部分抽離出來,而不同場景對應不同的處理函數,剛剛抽離的業務脫鈎函數正好作為這些不同場景函數公共部分!

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

【Go 入門學習】第一篇關於 Go 的博客–Go 爬蟲初體驗

一、寫在前面

  其實早就該寫這一篇博客了,為什麼一直沒有寫呢?還不是因為忙不過來(實際上只是因為太懶了)。不過好了,現在終於要開始寫這一篇博客了。在看這篇博客之前,可能需要你對 Go 這門語言有些基本的了解,比如基礎語法之類的。話不多說,進入正題。

 

二、Go 環境配置

1.安裝配置

  在學習一門語言時,第一步就是環境配置了,Go 也不例外,下面就是 Windows 下 Go 開發環境的配置過程了。

  首先你需要下載 Go 的安裝包,可以打開 Go 語言中文網下載,地址為:。

  下載完成后打開安裝(例如安裝到 E:\Go 目錄),然後配置環境變量,將安裝目錄下的 bin 目錄路徑加入環境變量中。這一步完成后打開命令行,輸入 go version,若出現版本信息則表明配置成功。

2.配置 GOPATH 和 GOROOT

  除了要將 bin 目錄加入到環境變量中,還要配置 GOPATH 和 GOROOT,步驟如下:

  在用戶變量中新建變量 GOPATH:

  

   在系統變量中新建變量 GOROOT:

  

 3. 選擇 IDE

  在 IDE 的選擇上,我比較推薦使用 jetbrains 家的 GoLand,功能強大,使用起來也很方便。

 

三、下載網頁

  下載網頁使用的是 Go 中原生的 http 庫,在使用前需要導包,和 Python 一樣用 import 導入即可。如果要發送 GET 請求,可以直接使用 http 中的 Get() 方法,例如:

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "net/http"
 6 )
 7 
 8 func main () {
 9     html, err := http.Get("https://www.baidu.com/")
10     if err != nil {
11         fmt.Println(err)
12     }
13     fmt.Println(html)
14 }

  Get() 方法有兩個返回值,html 表示請求的結果,err 表示錯誤,這裏必須對 err 做判斷,Go 語言的錯誤機制就是這樣,這裏不多做解釋。

  這麼用起來確實很簡單,但是不能自己設置請求頭,如果要構造請求頭的話可以參考下面的例子:

1 req, _ := http.NewRequest("GET", url, nil)
2 // Set User-Agent
3 req.Header.Add("UserAgent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36")
4 client := &http.Client{}
5 resp, err := client.Do(req)

 

四、解析網頁

1.解析庫選擇

  Go 語言中可以用來解析網頁的庫也是很齊全的,XPath、CSS 選擇器和正則表達式都能用。這裏我用的是 htmlquery,這個庫使用的是 Xpath 選擇器。htmlquery 是用於 HTML 的 XPath 數據提取庫,可通過 XPath 表達式從 HTML 文檔中提取數據。Xpath 語法就不提了,畢竟用 Python 寫爬蟲的時候沒少用。

  先說下 htmlquery 的安裝吧,一般會推薦你使用如下命令安裝:

go get github.com/antchfx/htmlquery

  但是你懂的,出於某些原因就下載不下來,怎麼辦呢?對於這種能在 GitHub 上找到的庫直接 clone 到本地就行了,記得要複製到你的 GOAPTH 下。

2.使用 htmlquery

  在使用 htmlquery 這個庫的時候,可能會報錯說缺少 golang.org\x\text,和上面的解決辦法一樣,去 GitHub 上找,然後 clone 下來。

  下面是 htmlquery 中經常使用的方法及相應含義:

func Parse(r io.Reader) (*html.Node, error):  返回給定 Reader 的 HTML 的解析樹。

func Find(top *html.Node, expr string) []*html.Node: 搜索與指定 XPath 表達式匹配的 html.Node。

func FindOne(top *html.Node, expr string) *html.Node: 搜索與指定 XPath 表達式匹配的 html.Node,並返回匹配的第一個元素,可簡單理解為 FindOne = Find[0]。

func InnerText(n *html.Node) string: 返回對象的開始和結束標記之間的文本。
 
func SelectAttr(n *html.Node, name string) (val string): 返回指定名稱的屬性值。

func OutputHTML(n *html.Node, self bool) string: 返回包含標籤名稱的文本。

   下面是使用 htmlquery 解析網頁的代碼:

 1 // Used to parse html
 2 func parse(html string) {
 3     // Parse html
 4     root, _ := htmlquery.Parse(strings.NewReader(html))
 5     titleList := htmlquery.Find(root, `//*[@id="post_list"]/div/div[2]/h3/a/text()`)
 6     hrefList := htmlquery.Find(root, `//*[@id="post_list"]/div/div[2]/h3/a/@href`)
 7     authorList := htmlquery.Find(root, `//*[@id="post_list"]/div/div[2]/div/a/text()`)
 8 
 9     // Traverse the result
10     for i := range titleList {
11         blog := BlogInfo{}
12         blog.title = htmlquery.InnerText(titleList[i])
13         blog.href = htmlquery.InnerText(hrefList[i])
14         blog.author = htmlquery.InnerText(authorList[i])
15         fmt.Println(blog)
16     }
17 }

  需要注意的是由於在 Go 語言中不支持使用單引號來表示字符串,而要使用反引號“`”和雙引號來表示字符串。然後因為 Find() 方法返回的是一個數組,因而需要遍歷其中每一個元素,使用 for 循環遍歷即可。在 for 循環中使用到的 BlogInfo 是一個結構體,表示一個博客的基本信息,定義如下:

1 // Used to record blog information
2 type BlogInfo struct {
3     title string
4     href string
5     author string
6 }

 

五、Go 併發

     在 Go 語言中使用 go 關鍵字開啟一個新的 go 程,也叫 goroutine,開啟成功之後,go 關鍵字后的函數就將在開啟的 goroutine 中運行,並不會阻塞當前進程的執行,所以要用 Go 來寫併發還是很容易的。例如:

 1 baseUrl := "https://www.cnblogs.com/"
 2 for i := 2; i < 4; i ++ {
 3     url := baseUrl + "#p" + strconv.Itoa(i)
 4     // fmt.Println(url)
 5     go request(url)
 6 }
 7 
 8 // Wait for goroutine
 9 time.Sleep(2 * time.Second)
10 request(baseUrl)

  這裏除了在主進程中有一個 request(),還開啟了兩個 go 程來執行 request()。不過要注意的是,一旦主進程結束,其餘 Go 程也會結束,所以我這裏加了一個兩秒鐘的等待時間,用於讓 Go 程先結束。

 

六、體驗總結

  由於我本身才剛開始學習 Go,就還有很多東西沒有學到,所以這個初體驗其實還有很多沒寫到的地方,比如數據保存,去重問題等等,後面會去多看看 Go 的官方文檔。當然了,對我來說,要寫爬蟲的話還是會用 Python 來寫的,不過還是得花時間學習新知識,比如使用 Go 做開發,熟悉掌握 Go 語言就是我的下一目標了。

 

  完整代碼已上傳到 !

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※評比南投搬家公司費用收費行情懶人包大公開

騰訊入股和諧汽車 鴻海間接掌理電池電動車業務

中國大陸和諧汽車公告,旗下的河南和諧公司將轉讓55%綠野汽車的股權給和諧富騰。和諧富騰為和諧汽車、騰訊集團、鴻海集團的合資公司,鴻海等同間接投資綠野汽車,並握有鋰電池電動車相關業務。

綠野汽車為和諧汽車旗下的電動車品牌,由和諧汽車另一子公司河南和諧持有大部分股權。本次轉讓55%股權,和諧富騰將付2.64億港元給河南和諧。轉讓完成後,和諧富騰將成為綠野汽車控股股東,而和諧汽車則透過河南和諧持有綠野汽車32.57% 的股權。

和諧富騰由騰訊集團旗下深圳騰訊持有29.4%股權、河南和諧持有39.2%股權、鴻海集團旗下鴻富錦精密電子持有29.4%、其餘2%由管理公司持有。該公司主要業務為新能源與智慧電動車發展,以及相關的互聯網投資。

綠野汽車以開發鋰電池動力的高速電動汽車為主要方向。和諧汽車表示,將延攬更多有經驗的人才與投資者來發展綠野汽車的業務。

鴻海集團藉著這次的股權轉讓,對和諧汽車持股增加,已是第二大股東。其入股目標主要放眼於中國大陸的電動車市場發展。經過和諧富騰本次入股綠野汽車,鴻海集團將持有鋰電池電動車相關的發展業務。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益