国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go 要加個箭頭語法,這下更像 PHP 了!

開發(fā) 前端
原提案作者的本意,可能是需要讓匿名閉包更加的簡潔,降低代碼復(fù)雜度。但其實這本質(zhì)上,節(jié)約的只是明面上的復(fù)雜度。一旦引入這類 “箭頭” 語法,可能會更大的加劇腦子轉(zhuǎn)換的開銷??创a時,得想想對對,會加重底下的腦力開銷。

大家好,我是煎魚。

在六一兒童節(jié)前夕在摸煎魚時,看到一個很神奇的 Go2 的技術(shù)提案,想要加一個更簡單、更輕量的匿名函數(shù)語法。

今天就由煎魚和大家一起看看。

新提案

新的 Go 提案目的是添加輕量級的匿名函數(shù)語法,業(yè)內(nèi)別名又叫 “箭頭語法”,是由 @Damien Neil 所提出的,提案的來源是《proposal: Go 2: Lightweight anonymous function syntax[1]》,褒貶都有:

圖片

我們由此進行展開。

如下例子:

import (
"fmt"
"math"
)

func compute(fn func(float64, float64) float64) float64 {
return fn(3, 4)
}

func main() {
hypot := func(x, y float64) float64 {
return math.Sqrt(x*x + y*y)
}
fmt.Println(hypot(5, 12))

fmt.Println(compute(hypot))
fmt.Println(compute(math.Pow))
}

上述代碼主要是實現(xiàn)了多個匿名的閉包函數(shù),實際上業(yè)務(wù)邏輯沒有什么。認(rèn)為由于閉包簽名繁雜,導(dǎo)致代碼可讀性不高。

為了避免這種情況,許多語言允許省略匿名函數(shù)的參數(shù)和返回類型,因為它們可能是從上下文派生的,能夠直接被復(fù)用。

如下 Scala 的例子:

compute((x: Double, y: Double) => x + y)
compute((x, y) => x + y) // Parameter types elided.
compute(_ + _) // Or even shorter.

Rust 的例子:

compute(|x: f64, y: f64| -> f64 { x + y })
compute(|x, y| { x + y }) // Parameter and return types elided.

因此這個 Go 提案就是希望針對匿名閉包增加這個輕量級的語法,讓代碼看起來更加的簡潔,讓代碼可讀性提高。

PHP 的例子:

$x = 1;
$fn = fn() => $x++; // 不會影響 x 的值
$fn();
var_export($x); // 輸出 1

更有那味了。

真實案例

Cap'n Proto

Go 開源庫 Cap'n Proto(capnproto/go-capnproto2[2])是一種極其快速的數(shù)據(jù)交換格式,類似于Protocol Buffers,但速度快得多。

以下是其代碼使用片段:

s.Write(ctx, func(p hashes.Hash_write_Params) error {
err := p.SetData([]byte("Hello, "))
return err
})

假設(shè)我們是 Rust,效果如下::

s.Write(ctx, |p| {
err := p.SetData([]byte("Hello, "))
return err
})

errgroup

這個 errgroup 庫相信大家不會陌生,常用于多個 goroutine 的異步場景中的 err 處理和同步。

以下是其使用片段:

g.Go(func() error {
// perform work
return nil
})

假設(shè)我們是 Scala,效果如下:

g.Go(() => {
// perform work
return nil
})
只從代碼數(shù)量來對比看,確

只從代碼數(shù)量來對比看,確實是簡潔一些。

討論

這個提案引起了社區(qū)不小的轟動和討論,有多種不同的觀點。

語法格式

先從 Go 的語法角度來看。語法格式為:

[ Identifier ] | "(" IdentifierList ")" "=>" ExpressionList

例子會變成:

s.Write(ctx, p => p.SetData([]byte("Hello, "))

g.Go(=> nil)

更更更短了。

降低了可讀性

許多小伙伴認(rèn)為這反而降低了代碼可讀性,更難懂了,還得在腦子里轉(zhuǎn)換幾道,才能知道是什么意思...

你想想,隨便在公司上抓一只煎魚。假設(shè)他沒有提前了解過這個語法,他能讀得懂這段代碼是什么意思嗎?

如下:

g.Go(=> nil)

顯然,他沒法 100% 確定。但沒有這語法時,只是正常的匿名閉包,是可以讀懂的。因為語法基本是通識,而箭頭語法并不是。

早期設(shè)計被拒絕

在 Go 早期的設(shè)計,其實對 “箭頭語法”,也就是本提案進行過研究。

當(dāng)時的語法是:

func f (x int) -> float32

因為它不能很好地處理多個(非元組)返回值;一旦出現(xiàn) func 和參數(shù),箭頭就多余了,會變得很復(fù)雜。

雖然這么做會看起來更 “漂亮”,但 “漂亮”(就像在數(shù)學(xué)上看起來一樣)可能仍然是多余的。它看起來也像是屬于一種“不同”語言的語法。

官方也認(rèn)為必須非常小心,不要為閉包創(chuàng)建特殊語法。因為現(xiàn)在 Go 所擁有的是簡單而規(guī)律的語法和邏輯。

最終放棄了添加箭頭語法的想法。

用省略符替代

從代碼示例來看,引起繁雜的主要是類型聲明和結(jié)構(gòu)。因此也有人提出使用省略符來實現(xiàn)類似效果。

如下代碼:

s.Write(ctx, func(p _) _ { return p.SetData([]byte("Hello, ")) })

這樣的好處是不需要語法改變。

總結(jié)

原提案作者的本意,可能是需要讓匿名閉包更加的簡潔,降低代碼復(fù)雜度。但其實這本質(zhì)上,節(jié)約的只是明面上的復(fù)雜度。

一旦引入這類 “箭頭” 語法,可能會更大的加劇腦子轉(zhuǎn)換的開銷??创a時,得想想對對,會加重底下的腦力開銷。

當(dāng)然,說不定我也是錯的。你覺得呢?是否支持 Go 新增輕量級的匿名閉包語法,也就是業(yè)內(nèi)俗稱的 “箭頭” 語法。

參考資料

[1]proposal: Go 2: Lightweight anonymous function syntax: https://github.com/golang/go/issues/21498

[2]capnproto/go-capnproto2: https://github.com/capnproto/go-capnproto2?

責(zé)任編輯:武曉燕 來源: 腦子進煎魚了
相關(guān)推薦

2014-07-16 14:28:58

nkCase Plus

2013-08-02 14:55:20

2014-08-18 15:02:03

小米MIUI

2022-11-08 08:29:43

Goslog 庫工具

2025-09-08 09:10:18

Go網(wǎng)絡(luò)HTTP/3

2025-10-31 09:01:37

2023-12-27 08:03:53

Go優(yōu)化代碼

2021-07-27 06:49:15

Final不變性Person

2022-07-27 08:56:29

Go程序多版本

2023-04-19 08:21:41

ChatGPT瀏覽器操作系統(tǒng)

2025-07-21 11:49:44

GoGit子目錄

2025-03-27 23:41:35

豆包搜索AI

2009-11-17 15:07:16

PHP數(shù)組遍歷

2011-06-15 15:55:36

PHP

2019-08-27 08:50:05

AndroidGoogle 移動系統(tǒng)

2022-02-14 08:04:02

Go語法糖編譯器

2024-11-28 10:26:32

2020-11-03 11:18:35

Go語言GoLang編程語言

2012-01-12 09:46:12

程序員編程

2020-10-19 10:25:57

ReactReact.js前端
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲人成精品久久久| 精品视频在线视频| 亚洲精品一区二区三| 精品一区二区男人吃奶| 日韩国产一区三区| 免费在线观看av片| 欧美性高跟鞋xxxxhd| 国产黄色免费电影| 国产人成亚洲第一网站在线播放| 性欧美18一19内谢| 三级不卡在线观看| 国产尤物91| 久久av导航| 4388成人网| 琪琪久久久久日韩精品| 久久久久久中文字幕| 日韩区欧美区| 久久久久久久久久av| 国产乱码精品一区二区三区亚洲人| 亚洲性生活视频在线观看| 一二三四视频在线中文| 亚洲国产一区二区三区在线观看| 日本资源在线| 亚洲男女性事视频| 亚洲ww精品| 97视频免费看| 成人在线免费观看网站| 国产精品综合不卡av| 久久国产影院| 国产精品露出视频| 视频一区二区中文字幕| 日韩激情视频| 国产成都精品91一区二区三| jizzjizz国产精品喷水| 欧美经典一区二区三区| av天天在线| 精品日韩中文字幕| 免费观看在线午夜影视| 亚洲精品www久久久久久广东| 伊人网在线播放| 久久这里有精品| 国产日产精品一区二区三区四区的观看方式| 国产精品成人v| 亚洲人成免费| 成人在线免费高清视频| 久久久久国产成人精品亚洲午夜| 成人www视频网站免费观看| 亚欧色一区w666天堂| 好吊日视频在线观看| 亚洲色图17p| 欧美人与动xxxxz0oz| 成人自拍性视频| 美女诱惑一区二区| 黄色片久久久久| 天天综合日日夜夜精品| 国产在线激情视频| 欧美高清不卡在线| 亚洲国产导航| 一本久道综合色婷婷五月| 午夜不卡av在线| 9765激情中文在线| 日本中文字幕不卡免费| 丝瓜av网站精品一区二区| 波多野结衣50连登视频| 一本色道a无线码一区v| 欧美亚洲大片| 91在线中文字幕| av激情亚洲男人天堂| 男女污污视频在线观看| 在线看片第一页欧美| 日本欧美国产| 日韩不卡一二区| 亚洲精品国产a| 欧美另类老肥妇| 国产精品自产拍在线观| 久久草av在线| 在线看片你懂得| 最近2019年中文视频免费在线观看 | 日韩一级大片在线观看| 欧美日韩不卡| 99精品国产高清一区二区| 99久久综合99久久综合网站| 中出在线观看| 色偷偷88888欧美精品久久久 | 亚洲美女性生活视频| 免费av一区| 亚洲精品影院| 亚洲成在线观看| 国产精品久久久久久妇女| www.久久草| 国产精品无遮挡| 美女露胸视频在线观看| 国产va在线| 精品国产福利| 久久天天躁狠狠躁夜夜av| av电影天堂一区二区在线| 中文字幕影音在线| 男女爽爽爽视频| 99re视频在线播放| 国产一区二区三区免费视频| 久久久精品人体av艺术| 欧美大荫蒂xxx| 美日韩精品免费视频| 精品一区精品二区高清| 国产成人精品一区二三区在线观看| 国产美女主播在线| 欧美大片在线看免费观看| 国产精品主播直播| 久久夜色精品国产欧美乱| 久久男人中文字幕资源站| 欧美视频二区欧美影视| 三级免费网站| 国产精品精品久久久| 日韩大片免费观看视频播放| 蜜臀久久久99精品久久久久久| 97超碰免费在线| 亚洲人成网站在线播放2019| 日韩在线资源网| 久久久久久91| 国产亚洲精品久久久久久牛牛| av亚洲精华国产精华| 欧美影视一区| 激情国产一区| 亚洲一区二区电影| 中出福利视频| 大胆av不用播放器在线播放| 波多野结衣与黑人| 亚洲综合av一区二区三区| 精品福利影视| 欧美性生交片4| 精品国产精品久久一区免费式| 热99这里只有精品| 亚洲欧美另类人妖| 久久成人免费网站| 欧美视频综合| 国产女人精品视频| 午夜精品成人在线视频| 欧美中文字幕一区二区| 激情婷婷丁香| 国产精品入口夜色视频大尺度| 亚洲精品视频在线观看免费| 妖精视频一区二区三区| 在线播放国产区| 91精品久久久久久久久久久久久久 | 天堂av在线播放| 国产精品永久在线| 五月婷婷综合在线| 91tv官网精品成人亚洲| 男同在线观看| 精品国产一区二区三| 欧美人妖巨大在线| 秋霞电影一区二区| 成人香蕉视频| 丝袜制服一区二区三区| 国产99久久久欧美黑人| 欧美日韩性生活视频| 在线免费高清一区二区三区| 成人在线免费看片| 嫩草影院中文字幕| 久久久久久国产精品| 欧美日韩在线另类| 久久综合五月| 亚洲a成人v| 特黄特色大片免费视频大全| 成人午夜电影在线播放| 精品亚洲一区二区三区在线播放 | 成人国产精品入口免费视频| 男人女人黄一级| 欧洲成人性视频| 欧美精品高清视频| 国产高清无密码一区二区三区| 美国十次综合久久| 日本天堂在线| 一级性生活视频| 国产91色在线免费| 精品久久国产老人久久综合| 久久久五月婷婷| 欧美有码视频| 精品久久福利| 四虎影院在线域名免费观看| 爱爱爱视频网站| 日韩av大片在线| 精品久久久久久久久久久久久久久久久 | 久久午夜电影| www.久久99| 国产区视频在线| 无码精品a∨在线观看中文| 国产精品私拍pans大尺度在线| 亚洲第一级黄色片| 亚洲国产精品精华液网站| 久久99国产乱子伦精品免费| 国产成人影院| 亚洲天堂一区二区| 免费黄网站在线观看| 国产成人在线免费看| 国产无套精品一区二区| 国内伊人久久久久久网站视频| 日韩精品一区二区三区中文精品| 亚洲欧洲制服丝袜| www.欧美日韩|