以色列持續耕耘電動汽車市場

以色列持續耕耘電動汽車市場,2007年以色列公司Israel Corporation跟中國奇瑞汽車合資成立觀致汽車Qoros,並開始研發多款新車。

Qoros觀致汽車公司已宣佈跟美國Axle企業(AAM)簽約,為觀致提供油電驅動系統。

據了解,觀致將在2015年生產的觀致3型車款安裝AAM的系統,這款車將在中國以及歐洲市場同時生產。

AAM的油電驅動系統包含電子驅動元件、有電子驅動控制模組的動力箱,以及一種專利的控制策略等。它具有降低油耗、減少碳排放量、提高安全性,並提升駕駛跟操作性能等特點。

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

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

中國南車將進軍純電動公務車領域

據中國國資委官網的消息,為響應政府公用車、公交車要率先推廣新能源汽車的號召,中國南車研制了有“陸地公務艙”之稱的純電動中型公務車。日前,由中國南車旗下南車時代電動申報的“純電動中型公務車研制”項目入選2014年度國家科技支撐計劃,成為國家級新能源中型公務車重點支持項目。

而中國南車業務一直是以鐵路機車、客車、動車組的設計、研發制造、銷售為主的,此次卻將業務范圍拓展到了電動汽車領域。

據中國南車集團公司宣傳部部長曹鋼材表示:「其實,此次已經不是中國南車第一次涉及電動汽車領域了,因為,隸屬于南車的南車株洲電力機車研究所有限公司一直在做電動汽車的研發及應用。」

據了解,高端中型公務車的年需求量在20萬輛左右,市場總額在600億元-800億元之間,市場蛋糕前景誘人,但目前大都是外資品牌。

在今年兩會期間,公務車改革呼聲十分強烈,伴隨著各級機關「厲行勤儉節約」風氣的貫徹落實以及國家公務車採購標準修訂方案的出臺實施,公務車採購自主化堅冰正在消融。7月12日,國務院總理李克強主持國務院常務會議,會議要求,政府公用車、公交車要率先推廣新能源汽車,並明確了到2015年我國大力推廣新能源公務車的目標。 

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

【其他文章推薦】

※教你寫出一流的銷售文案?

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

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

中國提出2015年節能環保產業總產值到4.5兆元的目標

中國政府網昨(11)日發布《國務院關於加快發展節能環保產業的意見》,其中提出節能環保產業的目標是產值年均增幅超過15%,到2015年,總產值達4.5兆元(人民幣,下同),成為國民經濟新的支柱產業。

意見提出,在北京、上海、廣州等城市擴大公共服務領域新能源汽車示範推廣範圍,每年新增或更新的公交車中,新能源汽車的比例達60%以上。同時開展私人購買新能源汽車和新能源出租車、物流車補貼試點。

至於新能源汽車發展面對的兩大難題安全性及充電設施,意見指出,加快實施節能與新能源汽車技術創新工程,大力加強動力電池技術創新,重點解決動力電池系統安全性、可靠性和輕量化問題,加強驅動電機及核心材料、電控等關鍵零部件研發和產業化,加快完善配套產業和充電設施,示範推廣純電動汽車和插電式混合動力汽車、空氣動力車輛等。

為推廣節能環保產品,政府普通公務員用車需優先採購1.8升或以下燃油經濟性達要求的小排量汽車和新能源汽車,有選擇性優先選用純電動汽車。

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

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

FB行銷專家,教你從零開始的技巧

Tesla電動車北美Q2售出5千多台,營收超4億美元

美國電動車商Tesla近日公布最新財報,Q2營收達到4.051億美元,北美市場銷售5千多台,遠高於目標4千台,EPS 0.2美元毛利率由前一季的17%拉升到了22%。

Tesla電動車的充電器看上去像加油槍,充飽電后可跑25公里,而後車廂配備大顆鋰電池,用家用插座可充飽電4.5度電,最高時速一小時85公里,花費比油車節省很多。

被喻為車界「蘋果」的Tesla ModelS,一台要價7萬美金,底部有整顆電池可跑200公里,車內配製17吋觸控電腦,第二季在北美市場賣出5150輛,大幅超過4500輛的目標,成為車市的大黑馬。

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

【其他文章推薦】

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

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

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

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

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

※教你寫出一流的銷售文案?

800台比亞迪E6出租車 在深累計行程超1億公裡

8月15日,在2013年中國(深圳)國際公共交通科技博覽會上,比亞迪綠色公交發展事業部人員表示,E6出租車在深圳累計行駛裡程已超1億公裡。截至2013年7月底,在深圳投入的公交運營E6純電動出租車約為800台。

該人士表示,E6作為F3DM的升級版,最大的亮點在於採用了電力驅動,其動力電池和啟動電池均採用比亞迪自主研發生產的eT-POWeR鐵電池。

E6還分為個人消費者版和出租車版,其中個人版市場有待培育,將是比亞迪銷售部門下半年的工作重點。E6出租車目前推廣順利,年初制定的計劃推廣城市現在基本已經打開。

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

【其他文章推薦】

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

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心

北京年底前試營運純電動車租賃服務

據中國大陸北京市交通委及相關租車企業負責人日前透露, 該市正在進行試點推廣純電動車租賃舉措,預計在2013年內正式導入市場試水溫,以打開純電動汽車個人購買方面發展緩慢的局面。

對於純電動汽車,政府提出了多項政策,但這兩年的發展速度並不及預期,進行汽車租賃措施也許是解開目前僵局較好的出路。主因消費者當前對於純電動汽車的續航能力、貶值率還有顧慮,因此,改成汽車租賃後,不用加油,相應的充電站也在完成,預料消費者會更願意使用純電動車。

一輛純電動汽車和一輛普通汽車的日租金預計差不多,但是使用純電動車卻可以大大降低使用成本。以一輛日租金120元(人民幣,下同)的10萬元左右經濟型轎車為例,普通汽車每公里加油費用在7毛錢,而純電動車每公里充電費用僅需要6分錢。

而最近一兩年,部分消費者購車消費觀念開始轉變,由「我要擁有一輛車」,轉變為「我要使用一輛車」。政府和事業單位也開始用租車的方式解決公共服務,促使租車率上升幅度超過5%。

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

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

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

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

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

傳三菱汽車將重啟PHV生產並擴增產能

據日經新聞今(19)日報導,汽車大廠三菱汽車(Mitsubishi Motors)將重啟已停擺長達約5個月的插電式油電混合車(PHV)「Outlander PHEV」的生產作業,且為了出口「Outlander PHEV」至歐洲市場,三菱汽車也計畫倍增其產能。

三菱汽車於今年1月開賣「Outlander PHEV」,之後於3月時宣佈因「Outlander PHEV」所搭載的鋰離子電池出包,故將停止生產及出貨。

報導指出,三菱汽車將利用名古屋製作所月產2,000台的規模重啟「Outlander PHEV」生產、之後並計劃於2014年5月底前將其月產能倍增至4,000台。

目前「Outlander PHEV」積壓的訂單約1.8萬台。而搭載出包鋰離子電池的電動車「i-MiEV」等其他車種也一度被迫停止生產,惟「i-MiEV」已於8月上旬前重啟生產。

據日本的調查報告指出,2012年全球插電式油電混合車(PHV)市場規模預估較2011年暴增500%至6萬台,預估2030年時將增至194萬台,將較2012年跳增約31倍。

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

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

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

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

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

※教你寫出一流的銷售文案?

※超省錢租車方案

特斯拉或于5年內推平價電動汽車Model E

電動汽車廠特斯拉(TESLA)本周遭披露,已向美國專利商標局申請使用「Model E」做為汽車產品命名,特斯拉不願證實是否與開發大眾化電動汽車款有關,但執行長馬斯克(Elon Musk)接受彭博專訪時,似乎間接證實這項意圖。

馬斯克表示,5年內將推出售價約3.5萬美元的平價電動汽車,同時將在亞洲、歐洲等地設廠,因應大眾化車款量產需求。

特斯拉今年計劃生產至少2.1萬台售價7萬美元的Model S豪華電動汽車,明年產量將加倍。儘管年產能上限50萬輛的加州廠仍足以應付,但未來隨售價僅約Model S一半的小型大眾車款加入,特斯拉必須擴廠。

不過,對於大眾化電動汽車上市時間,馬斯克轉趨保守,原先估計約3~4年,這次受訪則改口在5年之內。在大眾車款問世前,特斯拉明年底將先推出電動休旅車Model X延續買氣。

由於Model S熱銷,特斯拉較預期更早轉虧為盈,今年來股價大漲337%,推升該公司市值達到180億美元,超越了飛雅特(FIAT)等多家汽車大廠。

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

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

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

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

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

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

Domain Adaptive Faster R-CNN:經典域自適應目標檢測算法,解決現實中痛點,代碼開源 | CVPR2018

論文從理論的角度出發,對目標檢測的域自適應問題進行了深入的研究,基於H-divergence的對抗訓練提出了DA Faster R-CNN,從圖片級和實例級兩種角度進行域對齊,並且加入一致性正則化來學習域不變的RPN。從實驗來看,論文的方法十分有效,這是一個很符合實際需求的研究,能解決現實中場景多樣,訓練數據標註有限的情況。

來源:曉飛的算法工程筆記 公眾號

論文: Domain Adaptive Faster R-CNN for Object Detection in the Wild

  • 論文地址:https://arxiv.org/pdf/1803.03243.pdf
  • 論文代碼:https://github.com/yuhuayc/da-faster-rcnn

Introduction

  目前,目標檢測算法在公開數據上有很好的表現,但在現實世界環境中通常會有許多特殊的挑戰,比如視角、物體外觀、背景、光照以及圖片質量的不同,使得測試數據和訓練數據存在較大的跨偏移問題。

  以自動駕駛為例,不同的公開數據集里的圖片存在較大的差異,域偏移問題會導致明顯的檢測器性能下降。儘管收集更多的訓練圖片能解決域偏移的影響,但顯然這不是最好的方案。
  為了解決上面的問題,論文提出Domain Adaptive Faster R-CNN,最小化圖片級別域偏移(圖片尺寸、圖片風格、光照等)以及實例級域偏移(目標外表、目標尺寸等),每個模塊學習一個域分類器並且通過對抗訓練學習域不變的特徵,並且加入分類器的一致性正則化來保證RPN學習到域不變的proposal。
  論文的主要貢獻如下:

  • 從概率角度對跨域目標檢測中的域偏移問題進行理論分析。
  • 設計了兩個域自適應模塊來消除圖片級別和實例級別的域差異。
  • 提出一致性正則化來學習域不變RPN。
  • 將提出的模塊集成到Faster R-CNN中,進行端到端的訓練。

Distribution Alignment with H-divergence

  論文設計了H-divergence度量兩個不同分佈的樣本集,定義$x$為特徵向量,$x_{\mathcal{S}}$為源域樣本$x_{\mathcal{T}}$為目標域樣本,$h:x\to {0,1}$為域分類器,預測源域樣本$x_{\mathcal{S}}$為0,預測目標域樣本$x_{\mathcal{T}}$為1。假設$\mathcal{H}$為一組域分類器,則H-divergence的定義為:

  $err_{\mathcal{S}}$和$err_{\mathcal{T}}$為$h(x)$在源域和目標域樣本的預測誤差,上述的公式意味着域距離$d_{\mathcal{H}}(\mathcal{S},\mathcal{T})$與域分類器的錯誤率成反比,若最好的域分類器的錯誤率越高,則源域和目標域的距離越近。
  在神經網絡中,定義網絡$f$產生特徵向量$x$,為了進行域對齊,需要網絡$f$產生能夠減小域距離$d_{\mathcal{H}}(\mathcal{S},\mathcal{T})$的特徵向量,即最小化公式:

  上述的公式可以通過對抗訓練進行優化,論文採用gradient reverse
layer(GRL)進行實現,訓練主幹特徵最大化域分類誤差並且訓練域分類器最小域分類誤差進行對抗訓練,最終得出魯棒的特徵。

Domain Adaptation for Object Detection

A Probabilistic Perspective

  目標檢測問題可表示為後驗概率$P(C, B|I)$,$I$為圖片,$B$為目標的bbox,$C\in {1,\cdots,K}$為目標類別。定義目標檢測的樣本的聯合分佈為$P(C,B,I)$,其中源域和目標域的分佈是不一樣的$P_{\mathcal{S}}(C,B,I) \neq P_{\mathcal{T}}(C,B,I)$

  • Image-Level Adaptation

  根據貝恭弘=叶 恭弘斯公式,目標檢測的聯合分佈可定義為

  定義目標檢測為covariate shift假設,設定域間的條件概率$P(C, B|I)$是一樣的,域分佈偏移主要來自於$P(I)$分佈的不同。在Faster R-CNN中,$P(I)$即從圖片提取的特徵,所以要解決域偏移問題,就要控制$P_{\mathcal{S}}(I)=P_{\mathcal{T}}(I)$,保證不同域的圖片提取的特徵一致。

  • Instance-Level Adaptation

  另一方面,目標檢測的聯合分佈也可以定義為

  基於covariate shift假設,設定域間的條件概率$P(C|B,I)$是一樣的,域分佈偏移主要來自於$P(B,I)$分佈的不同,而$P(B,I)$即圖像中bbox區域特徵,所以為了解決域偏移問題,需要控制$P_{\mathcal{S}}(B,I)=P_{\mathcal{T}}(B,I)$,保證不同域的圖片提取的相同目標的bbox特徵不變。
  需要注意的是,目標域是沒有標註信息的,只能通過$P(B,I)=P(B|I)P(I)$獲取,$P(B|I)$為bbox預測器,這樣就需要RPN具備域不變性,為此,論文再添加了Joint Adaptation。

  • Joint Adaptation

  考慮到$P(B,I)=P(B|I)P(I)$,而分佈$P(B|I)$是域不變且非零的,因此有

  若域間的圖片級特徵的分佈是一樣的,實例級特徵的分佈也應該是一樣的。但實際中很難達到完美的$P(B|I)$,首先$P(I)$分佈很難完美地對齊,導致$P(B|I)$的輸入有偏,其次bbox是從源域學習而來的,會存在一定地偏差。
  為此,論文使用一致性正則化來消除$P(B|I)$的偏置,使用域分類器$h(x)$來進行源域和目標域的判斷。定義域標籤為$D$,圖像級分類器可看為預測$P(D|I)$,實例級的分類器可看為預測$P(D|B,I)$。根據貝恭弘=叶 恭弘斯理論,得到

  其中,$P(B|I)$是域不變的bbox預測器,而$P(B|D,I)$為域相關的bbox預測器。由於目標域沒有標註的bbox,所以實際僅學習到域相關的bbox預測器$P(B|D,I)$。但可以通過強制兩種分類器的一致性$P(D|B,I)=P(D|I)$,使得$P(B|D,I)$逼近$P(B|I)$。

Domain Adaptation Components

  DA Faster R-CNN的架構如圖2所示,包含兩個域自適應模塊以及一致性正則化模塊,自適應模塊加入GRL(gradient reverse layer)進行對抗訓練,每個模塊包含一個域分類器,最終的損失函數為

  • Image-Level Adaptation

  為了消除圖片級域分佈不匹配,使用patch-based域分類器對特徵圖的每個特徵點進行分類,每個特徵點實際對應原圖的一片區域$I_i$,這樣特徵點域分類器就等同於預測了每個圖像中每個patch的域標籤,這樣的好處在於:

  • 圖片級表達的對齊通常能有助於消除整圖帶來的偏移。
  • 由於目標檢測算法的batch size通常很小,path-based能夠提高域分類器的訓練樣本數。

  定義$D_i$為第$i$個訓練圖片的域標籤,$\phi_{u,v}(I_i)$為特徵圖上的一個激活值,$p^{(u,v)}_i$為域分類器的一個輸出,則圖片級自適應損失為

  為了對齊域分佈,需要同時優化域分類器最小化域分類損失以及優化主幹網絡的參數最大化域分類損失進行對抗訓練,論文採用GRL進行實現,使用梯度下降來訓練域分類器,回傳梯度給主幹時將梯度置為反符號。

  • Instance-Level Adaptation

  實例級特徵對齊有助於減少實例的局部差異,比如外表,大小,視角等。跟圖片級特徵對齊類似,定義$p_{i,j}$為第$i$個圖片的第$j$個proposal,實例級的自適應損失為

  同樣的,在域分類器前添加GRL模塊進行對抗訓練。

  • Consistency Regularization

  如前面的分析,強制域分類器的一致性有助於學習魯棒的跨域bbox預測器,加入一致性正則化。由於圖片級域分類器是對特徵值進行分類的,取平均輸出作為圖片級概率,一致性正則化為

  其中$|I|$為特徵圖的點數,$||\cdot||$為$\mathcal{l}_2$距離。

Experiments

Learning from Synthetic Data

  SIM 10k是從GTAV中截取畫面進行標註的數據集,Cityscapes為真實圖片,這裏對比從生成圖片到真實圖片的域轉移。

Driving in Adverse Weather

  Foggy Cityscapes通過生成霧來模擬真實場景,這裏對比天氣帶來的域轉移。

Cross Camera Adaptation

  這裏對比兩個不同的訓練數據集的域對齊。

Error Analysis on Top Ranked Detections

  每個模塊都能提升一定的準確率,而圖片級對齊的背景錯誤率較高,這可能由於圖片級對齊對RPN的提升更直接。

Image-level v.s. Instance-level Alignment

Consistency Regularization

CONCLUSION

  論文從理論的角度出發,對目標檢測的域自適應問題進行了深入的研究,基於H-divergence的對抗訓練提出了DA Faster R-CNN,從圖片級和實例級兩種角度進行域對齊,並且加入一致性正則化來學習域不變的RPN。從實驗來看,論文的方法十分有效,這是一個很符合實際需求的研究,能解決現實中場景多樣,訓練數據標註有限的情況。



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】

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

【其他文章推薦】

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

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

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

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

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

※教你寫出一流的銷售文案?

Golang簡易入門教程——面向對象篇

本文始發於個人公眾號:TechFlow,原創不易,求個關注

今天是golang專題的第9篇文章,我們一起來看看golang當中的面向對象的部分。

在現在高級語言當中,面向對象幾乎是不可或缺也是一門語言最重要的部分之一。golang作為一門剛剛誕生十年的新興語言自然是支持面向對象的,但是golang當中面向對象的概念和特性與我們之前熟悉的大部分語言都不盡相同。比如Java、Python等,相比之下, golang這個部分的設計非常得簡潔和優雅(仁者見仁),所以即使你之前沒有系統地了解過面向對象,也沒有關係,也一定能夠看懂。

常見的面向對象的部分,比如繼承、構造函數、析構函數,這些內容在golang當中統統沒有,因此整體的學習成本和其他的語言比起來會更低一些。

struct

在golang當中沒有類的概念,代替的是結構體(struct)這個概念。我們可以給結構體類型定義方法,為了表明該方法的適用對象是當前結構體,我們需要在方法當中定義接收者,位於func關鍵字和方法名之間。

我們一起來看一個例子:

type Point struct {
 x int
 y int
}

func (p Point) Dis() float64 {
 return math.Sqrt(float64(p.x*p.x + p.y*p.y))
}

在上面這段代碼當中我們定義了一個叫做Point的結構體,以及一個面向這個結構體的方法Dis。我們一個一個來看它們的語法。

對於結構體來說,我們通過type關鍵字定義。在golang當中type關鍵字的含義是定義一個新的類型。比如我們也可以這樣使用type:

type Integer int

它的含義是從int類型定義了一個新的類型Integer,從此之後我們可以在後序的代碼當中使用Integer來代替int。它有些類似於C++當中的typedef,結合這個含義,我們再來看結構體的定義就很好理解了。其實是我們通過struct關鍵字構造了一個結構體,然後使用type關鍵字定義成了一個類型。

之後我們創建了一個面向結構體Point的函數Dis,這個函數和我們之前使用的函數看起來並沒有太多的不同,唯一的區別在於我們在func和函數名之間多了一個(p Point)的定義。這其實是定義這個函數的接收者,也就是說它接受一個結構體的調用。

不僅如此,我們可以給golang當中的任何類型添加方法,比如:

type Integer int

func (a Integer) Less(b Integer) bool {
 return a < b
}

在這個例子當中,我們給原生的int類型添加了Less這個方法,用來比較大小。我們在添加方法之前使用type給int起了一個別名,這是因為golang不允許給簡單的內置類型添加方法,並且接收者的類型定義和方法聲明必須在同一個包里,我們必須要使用type關鍵字臨時定義一個新的類型。這裏要注意的是,雖然我們定義出來的Integer和int的功能完全一樣,但是它們屬於不同的類型,不能互相賦值。

和別的語言比較起來,這樣的定義的一個好處就是清晰。舉個例子,比如在Java當中,同樣的功能會寫成不同的樣子:

class Integer {
    private int val;
    public boolean less(Integer b) {
        return this.val < b.val;
    }
}

對於初學者而言,可能會覺得困惑,less函數當中的這個this究竟是哪裡來的?其實這是因為Java的成員方法當中隱藏了this這個參數,這一點在Python當中要稍稍清晰一些,因為它將self參數明確地寫了出來:

class Integer:
    def __init__(self, val):
        self.val = val
    def less(self, val):
        return self.val < val.val

而golang明確了結構體函數的接收者以及參數,顯得更加清晰。

指針接收者

golang當中,我們也可以將函數的接收者定義成指針類型

比如我們可以將剛才的函數寫成這樣:

type Point struct {
 x int
 y int
}

func (p *Point) Dis() float64 {
 return math.Sqrt(float64(p.x*p.x + p.y*p.y))
}

指針接收者和類型接收者在使用上是一樣的,我們並不需要將結構體轉化成指針類型,可以直接進行調用。golang內部會自己完成這個轉化:

func main() {
 p := Point{3, 4}
 fmt.Print(p.Dis())
}

那麼這兩者的區別是什麼呢?我們既然可以定義成普通的結構體對象,為什麼還要有一個指針對象的接收者呢?

其實很好理解, 兩者的區別有些類似於C++當中的值傳遞和引用傳遞。在值傳遞當中,我們傳遞的是值的一個拷貝,我們在函數當中修改參數並不會影響函數外的結果。而引用傳遞則不然,傳遞的是參數的引用,我們在函數內部修改它的話,會影響函數外的值。

也就是說在golang當中,如果我們函數接收的是一個指針類型,我們可以在函數內部修改這個結構體的值。否則的話,傳入的是一個拷貝,我們在其中修改值並不會影響它本身。我們來看個例子:

func (p *Point) Modify() {
 p.x += 5
 p.y -= 3
}

func main() {
 p := Point{3, 4}
 p.Modify()
 fmt.Print(p)
}

上面這段代碼當中函數的接收者是一個指針,所以我們得到的結果會是{8, 1},如果我們把指針去掉,改成普通的值接收的話,那麼最後的結果仍然是{3, 4}。

總結

我們今天學的內容有些多,我們來簡單梳理一下。首先,我們了解了通過type和struct關鍵字來定義一個結構體,結構體是golang當中面向對象的載體,golang拋棄了傳統的面向對象的實現方式和特性,擁有自己的面向對象的理念。

對於結構體來說,我們可以把它當做是接受者傳遞給一個函數,使得我們可以以類似調用類當中方法的形式來調用一個函數。並且對於函數而言,接受者除了值以外還可以是一個指針。如果是指針的話,當我們對結構體值進行修改的時候,會影響到原值。即使我們定義的接收者類型是指針,我們在調用的時候也不必显示將它轉化成結構體指針,golang當中會自動替我們完成這樣的轉化。

面向對象部分可以說是golang這一門語言當中最大的創新之一,也正是因為拋棄了傳統的類以及繼承、派生的概念,使得golang當中的面向對象語法糖相對簡潔。也因此有人將golang稱為升級版的C語言。雖然我們啰啰嗦嗦寫了很多,但是實際談到的內容並不多,我想理解起來也不會特別困難。

今天的文章到這裏就結束了,如果喜歡本文,可以的話,請點個關注,給我一點鼓勵,也方便獲取更多文章。

本文使用 mdnice 排版

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

【其他文章推薦】

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

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

新北清潔公司,居家、辦公、裝潢細清專業服務

※推薦評價好的iphone維修中心