我斷斷續(xù)續(xù)的,無聊的時候會看一些Golang 的書,也會用它做一些小的Demo,我甚至還想去做一份Golang 的工作。
它的優(yōu)點(diǎn)大家都知道,就是并發(fā)。Medium搜一下go會有一篇關(guān)于如何用go實(shí)現(xiàn)百萬級的并發(fā)的文章,代碼精髓又簡單。
但是我想說說它的一些讓人不爽的地方。
Swift有一個很重的概念就是面向協(xié)議,可以去看看各大Swift 的庫,都很注重面向協(xié)議這個概念。Golang也是如此,只是說法是面向接口(interface).
但是Golang的面向接口不需要聲明接口,這個真的很操蛋的。如果你去看代碼,如果有用接口作為參數(shù)的話你就慘了。你根本不知道哪些Struct實(shí)現(xiàn)了那個接口。所以寫Go的時候如果你不把那個接口和實(shí)現(xiàn)接口的Struct寫在一起那簡直就是災(zāi)難,對于那些習(xí)慣細(xì)致的讀代碼的人來說真的很痛苦,比如說我。不需要申明接口的另一個糟糕的地方就是你可能在寫代碼的時候,碰巧就實(shí)現(xiàn)了一個接口,如果那個Struct命名和你想用來實(shí)現(xiàn)接口的Struct的命名很像的話,很可能就被寫成參數(shù),后果就是一個Crash。
Golang 的面向接口是如此的粗糙與敷衍,Swift完全不會有這個問題。
Golang 沒有實(shí)現(xiàn)泛型,所以寫起代碼來會束手束腳,這要我想起了被OC支配的恐懼。你可能需要寫更多無聊的代碼來實(shí)現(xiàn)一個功能。
Golang的一個方法返回值可以直接用在方法里面,不需要額外的聲明。這樣看似好酷的感覺,其實(shí)傻逼至極,你在寫代碼的時候會感到一種混淆的感覺,私以為老老實(shí)實(shí)的申明返回值然后再return會更友好。
Golang申明參數(shù)有一種方式。比如
x, y, z int
哇,這種申明方式真的很傻逼的,你會發(fā)線其它的語言也可以這樣,這似乎就是一個一直沿用至今的錯誤(我個人認(rèn)為)。Golang 發(fā)揚(yáng)了這個錯誤,可以這樣子寫在方法的參數(shù)里面。這樣子你會覺得x的類型是y,然后出現(xiàn)一個z,最后才發(fā)現(xiàn)都是int,會有一種被調(diào)戲的感覺。所以我一直覺得這種設(shè)計方式就是一個錯誤,因?yàn)槿祟惗枷矚g直觀,簡單,程序員也是如此。
Golang的Array和Map也是十分的古怪,讀起來十分的不友好,不像Swift來的直觀。尤其是Map里面是一個復(fù)雜的類型,那會是一個災(zāi)難。不一直長期的寫的話,你會很不習(xí)慣它。
所以Golang真的只是一個實(shí)現(xiàn)工程的語言,比起和它出生差不多的Swift而言。它省了一些不該省的,創(chuàng)新了一些垃圾的語法。當(dāng)Swift 加入了并發(fā)的語法更加的成熟之后,我不認(rèn)為golang還會有現(xiàn)在的市場。