相對於Go,哪些領域是.NET做不到或做不好的?

相對於Go,哪些領域是.NET做不到或做不好的?

看到這個問題的時候,我瞬間有些恍惚,有哪些地方Go能做到?.NET會做不到,C#不行呢?

最後更新 2024/11/9 下午12:23
明月三千
預計閱讀 4 分鐘
分類
.NET 更多語言
標籤
.NET C# GO

圖片

看到這個問題的時候,我瞬間有些恍惚,有哪些地方Go能做到?.NET會不做到,C#不行呢?

那我們就掰開了揉碎了,從Go可能勝出的地方,來挨個分析一下:

1、交叉編譯

在Windows平台上面編譯Linux和Mac平台的程式,Go可以,C#應該也可以,透過publish機制一樣辦得到!

2、物件導向

這個應該討論的是「Go能否達到.NET那樣的水平?」

雖然Go的interface和struct可以做到「實作和宣告」分離,但是C#的interface一樣可以,不過沒有Go分離的那麼徹底,這應該是C#的一個「弱點」。

但同時,C#嚴格的Interface/Implement機制,也保證了大型專案的安全性,不會出現有些Go程式裡面interface滿天飛的情況!

另外一點,個人覺得C#的Class機制更加符合我的程式設計思維。很多老一點的程式設計師,其實都遵循相同的程式設計軌跡,C到C++,然後Java,可謂一直是Class護體。

寫了這麼多年的Class,即便是用go,那也是class的靈魂。

不怕各位笑話,我一般都是定義一個struct,然後就開始定義方法,像這樣:

type Person {
    Name string
    Age int
}

//下面開始進入C++型態
func (p Person) CalSome(){

}
func (p *Person) IncSome(){
}

//開始呼叫
p := Person{
    Name:"ttt",
    age:45
}
p.IncSome()

仔細想來,這和C#的差別到底有多大,個人覺得,區別不大!

從程式的「美感」來講,其實C#更美!

3、反編譯

如果說以前,確實Go在Windows平台上面,編譯為一個Exe檔案以後,想反編譯出Go的原始碼,那幾乎是不可能的。

C#這邊非常容易。如果你知道這是一段.NET程式碼,想反編譯的話有很多工具可以使用,包括ILDASM、dotPeek、ILSPY。

當然Java這邊也有jd等反編譯工具。

現在.NET提供了AOT選項之後,其反編譯功能應該有很大的進步。AOT編譯處理的程式碼都是本機程式碼,再想反編譯就和Go一個難度了。

分久必合,合久必分,語言期間其實也是各種功能互相「借鑑」。

4、Docker映像大小

這個應該是Go勝出的一個領域。

使用Alpine作為Base Image,前幾天我做了一個映像,docker images顯示其大小為13M。

如果使用「scratch」映像作為Base,相信會更小。

而.NET的AspNetCore則顯然大很多,30M+。

如果說需要很多個Docker Image運行在k8s裡面,無疑Go映像的佔用會低很多。

5、Father

最後,那就只好比一比老爸了,畢竟富二代出生在羅馬,而普通人的人生目標就是羅馬!

Go的father是Google。

.NET的Father是微軟!

一個是有點舊的「新時代霸主」,一個是有點「舊貌換新顏」的Old Money!

相比較而言,可能Google要強勢一些。

從這點出發,Go略勝,.NET略敗!

當然,Father的影響也很大,.NET從誕生之初就不太受人待見,受到Java的打壓。

這一點,好像在我們熊貓國還特別突出。

現在熊貓國的大公司,騰訊已經在把主力語言從C/C++全面轉向Go語言;字節跳動則是Go預設是程式語言第一選擇,沒有特殊需求,一般都是使用Go來開發,Rust尚且排在Go後面;七牛的許志偉則一直就是Go的狂熱擁護者,甚至開發了一門Go+語言,相當於Go的改進版本。

目前看來,除了阿里堅守Java陣營,Go在中國大公司裡面已經非常流行。相比較而言,.NET則生意慘淡,在工業控制、MES、物聯網、HIS等領域艱難求生,薪水也不容樂觀。

在熊貓國,從人氣這一方面,Go無疑完勝.NET。

總結

從語法、功能角度來講,Go能做到的,.NET也能做到,甚至更好。

從體積來講,Go可以更輕量級,畢竟.NET已經是多年的積累,積重難返!

從人氣來講,特別是網際網路領域,Go的使用率完勝.NET;而在工廠等非網際網路領域,.NET則更加流行。

一個新貴藺相如,一個老廉頗,他們能將相和嗎?

我是明月,

一個網際網路說書人!

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2026/2/7

AOT使用經驗總結

從專案建立伊始,就應養成良好的習慣,即只要添加了新功能或使用了較新的語法,就及時進行 AOT 發布測試。

繼續閱讀