亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Go 語(yǔ)言函數(shù)式編程

本文主要介紹 Go 語(yǔ)言的另一大編程特性——函數(shù)式編程。函數(shù)式編程的基礎(chǔ)特點(diǎn)為:

  • 函數(shù)是一等公民,即函數(shù)可以做為變量。
  • 純函數(shù),即函數(shù)內(nèi)的操作不可影響到函數(shù)外。

Go 語(yǔ)言的函數(shù)式編程無(wú)需遵循第二點(diǎn),這一特性為 Go 語(yǔ)言的函數(shù)式編程帶來(lái)了更大的靈活性。

 

1. 編程示例

接下來(lái)我們來(lái)分別展示用函數(shù)式編程和普通編程方式來(lái)實(shí)現(xiàn)一個(gè)累加器,即輸出 1+2+3+…+100 的值。

普通方式實(shí)現(xiàn):

代碼塊
  • 1? func main() {
  • 2? ? ? ? ? a := 0
  • 3? ? ? ? ? for i := 1; i <= 100; i++ {
  • 4? ? ? ? ? ? ? ? ? a = a + i
  • 5? ?? ?? ??}
  • 6? ? ? ? ? fmt.Println(a)
  • 7? }

函數(shù)式編程實(shí)現(xiàn):

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? "fmt"
  • 5? )
  • 6
  • 7? type iAdder func(int) int
  • 8
  • 9? func adder() iAdder {
  • 10? ? ? ? sum := 0
  • 11? ? ? ? return func(v int) int {
  • 12? ? ? ? ? ? ? ? ? sum += v
  • 13? ? ? ? ? ? ? ? ? return sum
  • 14? ? ? ? }
  • 15? }
  • 16
  • 17? func main() {
  • 18? ? ? ? ? a := adder()
  • 19? ? ? ? ? var s int
  • 20? ? ? ? ? for i := 1; i <= 100; i++ {
  • 21? ? ? ? ? ? ? ? ? s = a(i)
  • 22? ? ? ? ? }
  • 23? ? ? ? ? fmt.Println(s)
  • 24? }
  • 第 7 行:定義函數(shù)類(lèi)型自定義數(shù)據(jù)類(lèi)型;
  • 第 9~15 行:定義累加器函數(shù);
  • 第 18 行:定義變量 a,并將累加器函數(shù)作為值賦給變量 a;
  • 第 20~22 行:累加 100 次。

執(zhí)行結(jié)果:

image.png

兩者比較,就是后者將整個(gè)累加過(guò)程作為變量放置在了循環(huán)以外,使得整個(gè)累加可以脫離循環(huán)之外??雌饋?lái)就像是不斷的對(duì)一個(gè)傳入的常數(shù)進(jìn)行加工,就像是流水線的一個(gè)工具。所以函數(shù)式編程在開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)用在對(duì)數(shù)據(jù)的長(zhǎng)流程處理。例如,錄入身份證號(hào)時(shí),要從身份證號(hào)中獲取年齡,籍貫、性別等信息,就可以使用三個(gè)函數(shù)對(duì)身份證號(hào)進(jìn)行順序處理。這樣寫(xiě)的好處就在于可以隨時(shí)增刪其流程。

 

2. 小結(jié)

Go語(yǔ)言的函數(shù)式編程比起傳統(tǒng)函數(shù)式編程更加靈活,主要在于不需要遵循純函數(shù)原則。Go語(yǔ)言的函數(shù)式編程主要應(yīng)用在類(lèi)似于流水線加工數(shù)據(jù)的場(chǎng)景,以便于隨時(shí)增刪數(shù)據(jù)處理流程。

文章來(lái)源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!