亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

我為什么喜歡Go語言(簡潔的Go語言)

2020-04-01 19:25:39
字體:
來源:轉載
供稿:網(wǎng)友
從2000年至今,也寫了11年代碼了,期間用過VB、Delphi、C#、C++、Ruby、Python,一直在尋找一門符合自己心意和理念的語言。我很在意寫代碼時的手感和執(zhí)行的效率,所以在Go出現(xiàn)之前一直沒有找到
 

從2000年至今,也寫了11年代碼了,期間用過VB、Delphi、C#、C++、Ruby、Python,一直在尋找一門符合自己心意和理念的語言。我很在意寫代碼時的手感和執(zhí)行的效率,所以在Go出現(xiàn)之前一直沒有找到。在熟悉Go之后,我雖沒有停下腳步,也去體驗了D語言,但幾乎立即就放棄了,它的設計還是太復雜。

就說說Go吧。它的好其實也就兩個字——簡潔!

看很多朋友的留言都覺得這些"少個括號、少個分號"之類的東西沒什么意義,真的嗎?問題是,既然可以沒有,為什么非得有?既然能夠少打一個字符,為什么多打了還挺開心?還覺得天經(jīng)地義?這里簡單一點,那里簡單一點,總的來說是不是就簡單了很多?這里的設計簡潔一點,那里簡潔一點,是否整體就是緊湊高效?

很多東西,要整體去體會,才能感覺到真正的強大。沒有前面這些語法上的各種"看起來沒什么用"的支持,怎么能做到后面提到的那些設計上的簡潔?

我堅信,少就是多,簡單就是強大,不能減一分的設計才是真正的好設計!

簡潔的變量聲明和賦值

拿最簡單的聲明變量和賦值來看,下面這一句完成了聲明類型到賦值,最后還有那個常見的分號作為語句的結束。

var i int = 10;

這個一點都不簡潔對吧?為什么非要有"var"?為什么不能自己推導變量類型?為什么結尾非要加上分號?這三個問題,我相信Go語言的設計者也問過,并且都針對性的給了改進。重新來過。

i := 10

怎么樣?":="是聲明并推導類型的語法糖,結尾的分號也省了,因為這里我換行了,編譯器明白的。

還可以一次性聲明并賦值多個變量。

i, j, k := 1, 2, 3

不同的類型也可以。

i, j, k := 1, 1.0, "hello"

如果要聲明一堆變量,但暫時不賦值呢?可以這樣。

var (

    i, j int    s string
    u, v, s = 2.0, 3.0, "bar")

Go的設計者甚至覺得多打幾個"var"都不應該!

簡潔的if

有點意思了對吧?我學習一門新語言的時候,第一眼看變量類型和聲明,第二眼就會去看邏輯控制的語法?,F(xiàn)在來看看都有些什么?

 

復制代碼代碼如下:

if i > 10 {
    println("Greater then 10")
}

 

稀松平常啊,難道一個簡單的if還能更簡單?恩,的確是的。首先if后面的條件判斷沒有人逼你再加上括號了,僅僅是少了兩次按鍵嘛,還有呢?還有!下面這個應該是很常見的if使用場景。

 

復制代碼代碼如下:

result := SomeMethod()
if result > 0 {
}

 

很多時候result這個變量其實僅僅用于條件判斷,完全可以在if之后就扔掉,所以Go有了這么個寫法。

if result := SomeMethod(); result > 0 {

}

這個表達式太常用了,真是誰寫誰知道,每次我寫著一行都會心里一爽。來看看糾結一點的if段。

 

復制代碼代碼如下:

if a {
} else if b {
} else if c {
} else {
}

 

這種寫法是可以的,但不是Go推薦的,理由是可以更簡潔。比如強悍的switch。

 

強悍的switch

這是很大家熟知的switch用法,注意,沒有break哦!Go里面case之間不會"下穿"。

 

復制代碼代碼如下:

switch tag {
    default:         s3()
    case 0, 1, 2, 3:        s1()
    case 4, 5, 6, 7:         s2()
}

 

神奇一點的switch,嘿嘿,與if異曲同工之妙。

 

復制代碼代碼如下:

switch x := f(); {  // missing switch expression means "true"
    case x < 0: return -x
    default: return x
}

 

還有這個,有了這個更加明確的寫法,你真的還會if…else if…else if…else…嗎?

 

復制代碼代碼如下:

 

switch {
    case x < y: f1()
    case x < z: f2()
    case x == 4: f3()
}

 

條件判斷舒服了,循環(huán)呢?

 

孤單的for

其實我一直不太明白,為什么一門語言里面要提供多個循環(huán)語法呢?for、while、do…while…都是不可替代的?用哪一個呢?似乎都是看個人愛好吧?可能大家隨便就可以舉個例子出來證明這三個東西存在的必要和細微的差別,但對于我來說,做同一件事情如果有多種方法其實就是設計上的冗余,會對使用者造成或多或少的困擾。來看看Go的循環(huán)吧。

 

復制代碼代碼如下:

for i := 0; i < 10; i++ {
}
for a < b {
}
for {

 

看吧,一個for就搞定所有情況了。來看一個常用的遍歷集合,一把來說會寫成這樣。

 

復制代碼代碼如下:

count := len(someArray)
for i := 0; i < count; i++ {
    println(someArray[i])
}

 

簡化這個,Go給出了一個關鍵字"range",先看用法。

 

復制代碼代碼如下:

for i, value := range someArray {
    // i 是整型,代表下標
    // value就是數(shù)組內(nèi)值的類型
}

 

range不單單可以用于數(shù)組,實際上它可以用于任何集合,比如map。

 

復制代碼代碼如下:

m := map[string]int{"mon":0, "tue":1, "wed":2, "thu":3, "fri":4, "sat":5, "sun":6}
for i, s := range a {
    // type of i is int
    // type of s is string
}

 

這里只是提到了幾點最基本的語法場景,Go里面還有很多!

 

函數(shù)可以返回多個值

其實能夠在一行多重賦值的語言挺多的,但一個函數(shù)能返回多個值的就很少了,比如在C#里面如果要返回兩個int,通常會這么干。

 

復制代碼代碼如下:

public class TwoInts
{
    public int A;
    public int B;
}
public class Foo
{
    public TwoInts ReturnTwoInt(); 
}

 

然后就可以 TwoInts ti = foo.CalcTwoInt() 覺得悲催嗎?也許你都麻木了對嗎?很多語言都是這么設計的。函數(shù)只能返回一個值最大的問題是會導致出現(xiàn)很多沒必要的數(shù)據(jù)結構。上面就體現(xiàn)了這個冗余,當然,你說可以用out關鍵字讓函數(shù)返回,但這個語法用起來就不是那么安全了。而這個問題在Go里面解決起來太容易了,因為Go的函數(shù)可以返回多個值!

 

復制代碼代碼如下:

func returnTwoInt() (int, int) {
}
a, b := returnTwoInt()

 

我對Go的好感就是從這里萌芽的,這讓我的庫里面從此少了很多數(shù)據(jù)結構!這無形中就能降低設計的復雜度。

函數(shù)內(nèi)部聲明的對象指針可以安全的返回

 

復制代碼代碼如下:

func ReturnPointer() *Object1 {
    obj := new Object1()
    obj.A = "hello"
    return obj
}

 

Go的垃圾回收器會處理好這種情況的,放心啦!

 

異常處理?defer是啥?能吃嗎?

為什么異常處理那么復雜?多少人可以安全的實現(xiàn)下面這個邏輯?以下是偽代碼。

 

復制代碼代碼如下:

File f = File.Read("c://text.txt")
f.Write(xxx)
f.Close()

 

我相信,有經(jīng)驗的碼農(nóng)們腦子里面瞬間出現(xiàn)了各種版本的try…catch…finally…,還有各種各樣的書寫規(guī)范,比如"catch"里面的邏輯不能在拋異常之類的東西。其實想想,我們的要求很簡單,打開一個文件,然后保證它在最后被關閉。僅此而已,為什么做這么簡單的一件事情非要那么復雜?看看人家Go是怎么做的!

 

復制代碼代碼如下:

func SaveSomething() {
    if f, err := os.Open("c://text.txt"); err == nil {
        //各種讀寫
        defer f.Close()
    }
}

 

凡是加了defer的函數(shù),都會在當前函數(shù)(這里就是SaveSomething)執(zhí)行完畢之后執(zhí)行。就算"//各種讀寫"時發(fā)生異常f.Close也會堅定的在SaveSomething退出時被執(zhí)行。有了這個,釋放點資源,關閉個把句柄這種小事再也無足掛齒!

 

接口再也不用"實現(xiàn)"了

從我接觸OO思想一來,凡是有接口的語言,都以不同的方式要求類"實現(xiàn)"接口,這樣的方式我一直都認為是天經(jīng)地義的,直到我遇見了Go。

 

復制代碼代碼如下:

type Speaker interface {
    Say()
}

 

上面定義了一個接口,只有一個方法,Say,不需要參數(shù),也沒有返回值。Go里面,任何擁有某個接口所定義所有方法的東西,都默認實現(xiàn)了該接口。這是一句擁有太多內(nèi)涵的話,足矣對設計思路產(chǎn)生重大的影響。比如下面這個方法,它接受一個類型為Speaker的參數(shù)。

 

復制代碼代碼如下:

func SaySomething(s Speaker) {
    s.Say()
}

 

那么所有擁有Say()方法的東西都可以往里扔。

在Go的世界里,所有的東西都默認實現(xiàn)了interface{}這個接口。有了這個概念,即使沒有泛型也能有效的降低設計復雜度。

 

多線程還能更簡單點嗎?

要寫多線程,你要懂Thread,懂各種鎖,懂各種信號量。在各類系統(tǒng)里面,"異步"邏輯通常代表"困難"。這是Go最強勁的部分,你見過比下面這個還簡單的異步代碼嗎(以下代碼摘自Go的官方范例)?

 

復制代碼代碼如下:

func IsReady(what string, minutes int64) { 
    time.Sleep(minutes * 60*1e9); 
    fmt.Println(what, "is ready") 

go IsReady("tea", 6); 
go IsReady("coffee", 2); 
fmt.Println("I'm waiting....");

 

執(zhí)行的結果是,打印:

I'm waiting.... (right away) 
coffee is ready (2 min later) 
tea is ready (6 min later)

Go語言內(nèi)置了"go"這個語法,任何go的方法,都將會被異步執(zhí)行。那異步方法之前傳遞消息呢?用channel唄。意如其名,就是一個管道,一個往里寫,另外一個等著讀。

 

復制代碼代碼如下:

ch := make(chan int) //創(chuàng)建一個只能傳遞整型的管道

 

func pump(ch chan int) { 
    for i := 0; ; i++ { ch <- i } //往管道里寫值 
}

func suck(ch chan int) { 
    for { fmt.Println(<-ch) } //這里會等著直到有值從管道里面出來 
}

go pump(ch) //異步執(zhí)行pump
go suck(ch) //異步執(zhí)行suck

 

嘿嘿,然后你就看到控制臺上輸出了一堆數(shù)字。

這次就寫到這兒吧,對不住Go里面其他的好東西了,哥餓了,就不一一出場亮相了,抱歉抱歉!鞠躬!下臺!

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
在线观看免费p片视频网站地址| 91大神精品| 欧美日韩亚洲免费| 国产成人精品一区二区三区四区| 精品午夜一区二区三区| 日本在线不卡一区二区| 中文乱码免费一区二区三区下载| 久久久久久久久久影视| 欧美一级网站| 日韩在线播放一区| 日本女优天堂99伊人| 国产精品激情av在线播放| 亚洲最大免费视频| 国产精品夜夜夜| 91精品久久久久久久| 日本在线播放一区二区| 国产精品一区专区| 一本久久知道综合久久| 9999精品成人免费毛片在线看| 欧美精品日韩精品| 亚洲免费视频一区二区三区| 一区二区三区高清在线| 无码精品a∨在线观看中文| 日韩美女av在线| 男人资源在线播放| av电影天堂一区二区在线观看| 亚洲成av人片观看| 午夜伦全在线观看| 欧美激情精品久久久久久变态| 久久久精品在线视频| 日韩亚洲欧美在线观看| 欧美日韩国产精品专区| 日韩在线视频第一页| 中文字幕成人网| 国产精品人人爽| 成人福利视频在线观看| 亚洲高清成人| 国产剧情日韩欧美| 在线观看区一区二| 色中色在线视频| 亚洲欧美日韩综合一区| 久久综合综合久久综合| 国产精品一区二区在线观看不卡| 成人黄色大片网站| 久久中文资源| 先锋资源一区| 视频在线99re| 国产精品qvod| 国内激情视频在线观看| 9.1国产丝袜在线观看| 久久最新免费视频| 成人h精品动漫一区二区三区| 国v精品久久久网| 国内精品伊人久久久| 亚洲mm色国产网站| 成人午夜精品视频| 亚洲在线视频一区| 亚洲欧美日韩中文播放| 亚洲国产精品久久一线不卡| 国产精品美乳一区二区免费| 色大师av一区二区三区| 麻豆成人在线观看| 伊人影院综合在线| 在线观看麻豆| 精品亚洲男同gayvideo网站| 美女mm1313爽爽久久久蜜臀| 欧美日韩一区二区在线免费观看| 中国女人内谢69xxxx视频| 日本精品网站| 欧美性视频在线| 搞黄网站在线看| 91大学生片黄在线观看| 亚洲一区二区在线播放| 韩日欧美一区二区三区| 丁香六月久久综合狠狠色| 欧美三级伦理在线| 五月天亚洲综合情| 精品久久久久久久久国产字幕| 国产成人精品电影久久久| av成人网在线| 日韩精品免费看| 最大av网站| 国产精品美女一区二区视频| 欧美精选视频在线观看| 国产成人精品亚洲午夜麻豆| 国产大片免费看| 色综合久久综合| 国产精品嫩草影院在线看| av不卡免费电影| 亚洲精品久久久久久国| 中文字幕人妻熟女在线| 日本免费在线精品| 国产成人无码av在线播放dvd| 无码人妻丰满熟妇区毛片| 成人动漫中文字幕| 不卡的看片网站| 日本aⅴ大伊香蕉精品视频| av免费在线免费观看| 在线观看日韩一区| 日本另类视频| 精品久久久久久久久久久| 麻豆专区一区二区三区四区五区| 亚洲av无码国产精品久久不卡| 一区二区三区精品视频| 色成年激情久久综合| 欧美日韩视频在线第一区| jizzjizz亚洲中国少妇| 国产精品美女呻吟| 最新在线你懂的| 黄在线观看在线播放720p| av爱爱亚洲一区| 亚洲久久久久| 一区二区三区av在线| 国产精品一区视频| 亚洲影院理伦片| 亚洲第一成人在线视频| 毛片基地黄久久久久久天堂| 亚洲同志网站入口| 精品久久久久久中文字幕2017| 两个人hd高清在线观看| 精品自拍偷拍视频| 全色精品综合影院| 国产精品久久久久永久免费观看| 丰满岳乱妇一区二区三区| 熟女视频一区二区三区| 国内精品久久久久国产| av片在线免费观看| 日韩电影免费在线看| 免费黄色片在线观看| 视频一区视频二区中文| 99久久伊人精品| 午夜精品成人在线视频| 成人精品国产| 超碰cao国产精品一区二区| 婷婷综合久久| 欧美一区三区三区高中清蜜桃| 亚洲欧美日本一区二区| 国产一区二区三区福利| 亚洲www视频| 国产清纯美女被跳蛋高潮一区二区久久w| 国产视频一区二区在线| 91精品在线一区二区| 欧美美最猛性xxxxxx| 日韩三区四区| wwwav91| 国产成人无遮挡在线视频| 日韩码欧中文字| 亚洲精品丝袜日韩| 欧美日免费三级在线| 国产精品高清一区二区三区| 日韩激情一二三区| 日韩亚洲欧美中文在线| 少妇人妻偷人精品一区二区| 精品一区中文字幕| 国产亚洲一二三区| 中文字幕一区二区三区不卡| 成人乱码一区二区三区| 国产成人亚洲精品| 久久久亚洲精品一区二区三区| 激情综合婷婷| 中文字幕资源在线观看| 欧美精品一区二区三区四区五区| 欧美高清性xxxxxxx| 一本一道久久a久久综合精品| 亚洲经典一区二区三区| 亚洲理论电影片| 在线观看三级视频欧美| 日本视频免费| 在线视频免费观看一区| 精品一区免费av| 国产在线播放一区二区三区| 99热一区二区三区| 强开小嫩苞一区二区三区视频| 国产精品日韩av| 亚洲成a人片777777久久| www.男人的天堂| 26uuu成人网一区二区三区| 影音av资源网| 天美一区二区三区| 淫行教师动漫| 免费高清一区二区三区| 调教视频在线观看| 国产美女福利视频| 免费国产自线拍一欧美视频| 日韩av一区二区三区在线观看| 国产丝袜视频在线观看| 成年视频在线观看| 黄污在线观看| 欧美顶级毛片在线播放| 国产精品视频资源| 亚洲人成久久| av免费高清观看| 久草福利在线观看| 久久1电影院| 亚洲一区二区三区欧美| 免费一级欧美片在线播放| 国产中年熟女高潮大集合| 久久综合999| 天天操天天操天天操天天| 欧美日韩一区二区三区在线视频| 九九九久久国产免费| 亚州黄色一级| 色拍拍在线精品视频8848| 日本精品一区二区三区四区的功能| 免费一级欧美在线观看视频| 浅井舞香一区二区| 天天堂资源网在线观看免费视频| 日日夜夜一区| 欧美日韩中文字幕在线| 精品欧美不卡一区二区在线观看| 国产超碰精品在线观看| 精品人妻一区二区三区潮喷在线| 免费不卡欧美自拍视频| 欧美黄网站在线观看| 国模视频一区| 偷偷看偷偷操| 中文在线日韩| 久久久精品人妻一区二区三区| 超碰成人久久| 日韩三级在线免费观看| 岛国av免费在线| 国产在线播放不卡| 男人与禽猛交狂配| 日韩影视一区二区三区| 免费在线高清av| 亚洲黄色小说网站| 国产精品理人伦一区二区三区| 久久99精品国产99久久| а√在线中文在线新版| 91精品国产自产91精品| 亚洲欧美中文字幕在线观看| 国产在线一区二区| 免费观看在线综合| 精品人妻一区二区三区换脸明星| 一区二区三区日韩欧美| 91最新地址在线播放| 黄色网页免费看| 色视频www在线播放国产成人| 精品视频自拍| 日日摸夜夜爽人人添| 在线香蕉视频| 免费黄色片在线观看| 国产欧美日韩三区| 精品无码一区二区三区在线| 开心激情五月婷婷| 午夜午夜精品一区二区三区文| 亚洲黄色性网站| 色哟哟亚洲精品| 国产欧美日本亚洲精品一4区| 欧美精品一二| 污网站在线播放| 天堂电影在线| 国产女优在线播放| 国产视频网站在线观看| 国产成人午夜视频| 免费日韩中文字幕| 粉嫩一区二区三区在线看| 99视频精品免费观看| 日本一区二区不卡视频| 国产呦小j女精品视频| 你懂的在线观看视频网站| 久久久精品人体av艺术| 久久不见久久见免费视频7| 亚洲第一二三四区| 国产精品欧美韩国日本久久| 久久嫩草捆绑紧缚| xxxxx性欧美特大| 色乱码一区二区三在线看| 亚洲精品aaaa精品| 久久视频这里只有精品| 韩国三级电影久久久久久| 欧美激情一区不卡| 欧美激情一区在线观看| 亚洲伊人色欲综合网| 亚洲精品xxxx| 国产精品夜间视频香蕉| 成人影视在线播放| 国产精品合集一区二区| 天天夜夜亚洲| 午夜国产不卡在线观看视频| 国产精品毛片一区二区在线看舒淇| sese久久| 久久精品国产亚洲av麻豆色欲| 爱情岛亚洲播放路线| 是的av在线| 国产精品-区区久久久狼| 亚洲裸体俱乐部裸体舞表演av| 成人一区在线看| 婷婷成人影院| 久久久久久亚洲精品不卡| 中文无码精品一区二区三区| 国产精品青草久久久久福利99| 国产极品嫩模在线观看91精品| 5g影院5g电影天天爽快| www 日韩| 精品五月天久久| 国产 日韩 欧美 在线| 国产精品水嫩水嫩| 天天操夜夜逼| 性高爱久久久久久久久| 国外成人性视频| 国产成a人亚洲精v品在线观看| 国产寡妇树林野战在线播放| 销魂美女一区二区| 被陌生人带去卫生间啪到腿软| 丁香久久综合| 日韩精品视频久久| 91精品国产网站| 国产精品久久福利| 丁香综合在线| 免费日韩电影在线观看| 欧美午夜精品久久久久久久| 亚洲成人a**址| 色综合激情久久| 日韩极品视频在线观看| 五月精品在线| free性护士videos欧美| 91精品免费观看| 国产日产欧美一区二区视频| 最近2018年中文字幕在线| 成人情趣视频网站| 91网址在线看| 中日韩免费视频中文字幕| 亚洲精品亚洲人成在线| 久久理论片午夜琪琪电影网| 国产一区二区三区四区五区3d| 久久视频在线观看| 一道本在线观看|