ΠΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΠ΅ΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
Go Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½ΠΈΡ.
ΠΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΡΠ»Π°Π±ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ?
Go Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ΅Π½ Π·Π° Π½Π°ΡΡΠ°Π²Π°Π½Π΅, ΡΠΎΠ»ΠΊΠΎΠ²Π° Π»Π΅ΡΠ΅Π½, ΡΠ΅ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΌΠΈ ΠΎΡΠ½Π΅ Π΅Π΄Π½Π° Π²Π΅ΡΠ΅Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ
Π΄Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ. ΠΠ½ΠΈΠ³Π°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
, Π·Π° Π΄Π° Π½Π°ΡΡΠ° ΠΠΎ, ΡΠ΅ ΠΊΠ°Π·Π²Π°
Google ΡΠ²ΡΡΠ΄ΠΈ, ΡΠ΅ ΠΏΡΠΎΡΡΠΎΡΠ°ΡΠ° Π½Π° Go Π΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΡΠ³ΠΎΠ²ΡΠΊΠ° ΡΠΎΡΠΊΠ° ΠΈ Π΅Π·ΠΈΠΊΡΡ Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Π·Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ Π΅ΠΊΠΈΠΏΠΈ, Π½ΠΎ Π°Π· ΡΠ΅ ΡΡΠΌΠ½ΡΠ²Π°ΠΌ. ΠΠΌΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ»ΠΈ Π»ΠΈΠΏΡΠ²Π°Ρ, ΠΈΠ»ΠΈ ΡΠ° ΡΠ²ΡΡΠ΄Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΈ. Π Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΏΠΎΡΠ°Π΄ΠΈ Π»ΠΈΠΏΡΠ° Π½Π° Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅, Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅ ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΡΡ Π½ΠΈΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. Π’ΠΎΠ²Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π·Π° ΠΏΡΠΎΡΡΠΎΡΠ° Π±Π΅ΡΠ΅ ΡΡΠ·Π½Π°ΡΠ΅Π»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈ Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π½Π°ΠΏΡΠ»Π½ΠΎ Π·Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π° Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π°Ρ Π² Go.
Π’Π°ΠΊΠ° ΡΠ΅ Π·Π°ΡΠΎ Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ? ΠΡΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΡΠ°ΡΠ°
ΠΠ»ΡΡΠΎΠ²ΠΈΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΊ Π΅, ΡΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ (ΠΏΡΠΈΠ±Π».:
ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ Π½Π° Google ) Π½Π΅ ΡΠ° ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. Π’Π΅, ΠΊΠ°ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ° Π΄ΠΎΡΡΠ° ΠΌΠ»Π°Π΄ΠΈ, ΠΈΠ΄Π²Π°Ρ ΠΏΡΠΈ Π½Π°Ρ ΡΠ»Π΅Π΄ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΡΠ° ΡΡΠΈΠ»ΠΈ Java, ΠΈΠ»ΠΈ C/C++, ΠΈΠ»ΠΈ Python. Π’Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ°Ρ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½ Π΅Π·ΠΈΠΊ, Π½ΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°Ρ Π΄ΠΎΠ±ΡΡ ΡΠΎΡΡΡΠ΅Ρ. ΠΡΠΎ Π·Π°ΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΡ Π΅Π·ΠΈΠΊ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π»Π΅ΡΠ΅Π½ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ΅Π½Π΅.
Π’ΠΎΠΉ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΠΏΠΎΠ·Π½Π°Ρ, Π³ΡΡΠ±ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° C. ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² Google, Π·Π°ΠΏΠΎΡΠ²Π°Ρ ΠΊΠ°ΡΠΈΠ΅ΡΠ°ΡΠ° ΡΠΈ ΡΠ°Π½ΠΎ ΠΈ ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΠ½ΠΎ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ, ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎΡΠΎ C. ΠΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ΡΠΎ Π·Π° Π±ΡΡΠ·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π² Π½ΠΎΠ² Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π΅Π·ΠΈΠΊΡΡ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ΄Π΅ ΡΠ°Π΄ΠΈΠΊΠ°Π»Π΅Π½.
ΠΠ°ΠΊΠ²ΠΎ? Π’Π°ΠΊΠ° ΡΠ΅ Π ΠΎΠ± ΠΠ°ΠΉΠΊ Π²ΡΡΡΠ½ΠΎΡΡ ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π² Google Π½Π΅ ΡΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±ΡΠΈ, Π·Π°ΡΠΎΠ²Π° ΡΠ° ΡΡΠ·Π΄Π°Π»ΠΈ Π΅Π·ΠΈΠΊ Π·Π° ΠΈΠ΄ΠΈΠΎΡΠΈ (ΠΏΡΠΈΠ±Π».: Π³Π»ΡΠΏΠ°Π²), Π·Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΡΡ Π½Π΅ΡΠΎ. ΠΠ°ΠΊΡΠ² Π°ΡΠΎΠ³Π°Π½ΡΠ΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ ΠΊΡΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ ΠΊΠΎΠ»Π΅Π³ΠΈ? ΠΠΈΠ½Π°Π³ΠΈ ΡΡΠΌ Π²ΡΡΠ²Π°Π», ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Google ΡΠ° ΡΡΡΠ½ΠΎ ΠΏΠΎΠ΄Π±ΡΠ°Π½ΠΈ ΠΎΡ Π½Π°ΠΉ-ΡΠΌΠ½ΠΈΡΠ΅ ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ Π½Π° ΠΠ΅ΠΌΡΡΠ°. Π‘ΠΈΠ³ΡΡΠ½ΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΡ Ρ Π½Π΅ΡΠΎ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ?
ΠΡΡΠ΅ΡΠ°ΠΊΡΠΈ Ρ ΠΏΡΠ΅ΠΊΠΎΠΌΠ΅ΡΠ½Π° ΠΏΡΠΎΡΡΠΎΡΠ°
ΠΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡ Π΅ Π΄ΠΎΡΡΠΎΠΉΠ½Π° ΡΠ΅Π» Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡ Π½Π΅ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ (ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π΄Π° ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅) ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡΠ° ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π΅ ΡΠ° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, Π½ΠΎ ΠΈΠΌΠ° ΡΡΠ΅Π΄Π½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΠ΅ΡΠΎ Π΅Π·ΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π»Π΅ΡΠ½ΠΈ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.
ΠΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅Π»Π΅Π½
ΠΠΎΡΠ°Π΄ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠ° ΡΠΈ ΠΊΡΠΌ ΠΏΡΠΎΡΡΠΎΡΠ°ΡΠ°, Π½Π° Go Π»ΠΈΠΏΡΠ²Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΠΊΠ°ΡΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΈ Π² Π΄ΡΡΠ³ΠΈ Π΅Π·ΠΈΡΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ Π΄ΠΎΠ±ΡΠ° ΠΈΠ΄Π΅Ρ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π΅Π½ ΠΊΠΎΠ΄. ΠΡΠΈΡΠΈΠ½Π°ΡΠ° Π·Π° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π° - ΡΡΡΠ±Π²Π° Π΄Π° Π΅ Π»Π΅ΡΠ½ΠΎ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π΄Π° ΡΠ΅ΡΠ°Ρ ΠΊΠΎΠ΄Π° Π½Π° Π΄ΡΡΠ³ΠΈ Ρ ΠΎΡΠ°, Π½ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅Π·ΠΈ ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΌΠΎ Π²ΡΠ΅Π΄ΡΡ Π½Π° ΡΠ΅ΡΠ»ΠΈΠ²ΠΎΡΡΡΠ°. Π Go Π½ΡΠΌΠ° ΡΡΠΊΡΠ°ΡΠ΅Π½ΠΈΡ: ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠ»ΠΈ Π½ΠΈΡΠΎ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ΡΠ΅ stdin ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ» ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
package main
import (
"bufio"
"flag"
"fmt"
"log"
"os"
)
func main() {
flag.Parse()
flags := flag.Args()
var text string
var scanner *bufio.Scanner
var err error
if len(flags) > 0 {
file, err := os.Open(flags[0])
if err != nil {
log.Fatal(err)
}
scanner = bufio.NewScanner(file)
} else {
scanner = bufio.NewScanner(os.Stdin)
}
for scanner.Scan() {
text += scanner.Text()
}
err = scanner.Err()
if err != nil {
log.Fatal(err)
}
fmt.Println(text)
}
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΡΡΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° Π±ΡΠ΄Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΎΠ±Ρ, ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΎΡΡ Π½Π° Go ΠΏΡΠ΅ΡΠΈ ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ΄.
ΠΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²
import std.stdio, std.array, std.conv;
void main(string[] args)
{
try
{
auto source = args.length > 1 ? File(args[1], "r") : stdin;
auto text = source.byLine.join.to!(string);
writeln(text);
}
catch (Exception ex)
{
writeln(ex.msg);
}
}
Π ΠΊΠΎΠΉ Π΅ ΠΏΠΎ-ΡΠΈΡΠ°Π² ΡΠ΅Π³Π°? Π©Π΅ Π΄Π°ΠΌ Π³Π»Π°ΡΠ° ΡΠΈ Π½Π° D. ΠΠ΅Π³ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ΅ΡΠ»ΠΈΠ², Π·Π°ΡΠΎΡΠΎ ΠΎΠΏΠΈΡΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° ΠΏΠΎ-ΡΡΠ½ΠΎ. D ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ (ΠΏΡΠΈΠ±Π».:
ΠΠ΄ΡΠΊΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅
ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° Go Π΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎΠ½Π΅ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ Π½Π΅Π½ΡΠΆΠ½ΠΎΡΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΡΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΏΠΈΡΡΠΊ ΠΎΡ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎ Π½ΠΈΠΊΠ°ΠΊΡΠ² Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ ΠΎΡΠ²Π΅Π½ ΡΡΠ΅Π· ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π½Π΅ΠΉΠ½Π°ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΏ ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ; Π½ΡΠΌΠ° Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½:
package main
import "fmt"
func int64Sum(list []int64) (uint64) {
var result int64 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func int32Sum(list []int32) (uint64) {
var result int32 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func int16Sum(list []int16) (uint64) {
var result int16 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func int8Sum(list []int8) (uint64) {
var result int8 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func main() {
list8 := []int8 {1, 2, 3, 4, 5}
list16 := []int16{1, 2, 3, 4, 5}
list32 := []int32{1, 2, 3, 4, 5}
list64 := []int64{1, 2, 3, 4, 5}
fmt.Println(int8Sum(list8))
fmt.Println(int16Sum(list16))
fmt.Println(int32Sum(list32))
fmt.Println(int64Sum(list64))
}
Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΡΠΈ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ ΡΡΡ Π·Π½Π°ΠΊ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π°ΡΡΡΠ°Π²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡΡΠ΅ (
Π‘ΡΡΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° D:
import std.stdio;
import std.algorithm;
void main(string[] args)
{
[1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}
ΠΡΠΎΡΡΠΎ, Π΅Π»Π΅Π³Π°Π½ΡΠ½ΠΎ ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΎ ΠΊΡΠΌ ΡΠΎΡΠΊΠ°ΡΠ°. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΡΡΠΊ ΡΡΠ½ΠΊΡΠΈΡ Π΅ reduce
Π·Π° ΡΠΈΠΏ ΡΠ°Π±Π»ΠΎΠ½ ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ. ΠΠ°, ΡΠΎΠ²Π° ΠΎΡΠ½ΠΎΠ²ΠΎ Π΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΡ Π²Π΅ΡΡΠΈΡΡΠ° Go, Π½ΠΎ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΡΡΡΠ΄Π½ΠΎ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΎΡ ΡΠΌΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ. ΠΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ ΠΈ ΠΏΠΎ-Π»Π΅ΡΠ΅Π½ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅?
Π‘ΠΈΡΡΠ΅ΠΌΠ΅Π½ Π±Π°ΠΉΠΏΠ°Ρ ΠΎΡ ΠΏΡΠΎΡΡ ΡΠΈΠΏ
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌ, ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅ Π½Π° Go, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΠ°Ρ ΡΠΎΠ²Π°, ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΏΡΠ½Π° Π½Π° ΡΡΡΠ°ΡΠ° ΠΈ ΡΠ΅ ΠΊΡΠ΅ΡΡΡ: βΠΡΠ°Π²ΠΈΡ Π³ΠΎ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎ!β Π, ΠΈΠΌΠ° ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, Π½ΠΎ ΡΠΎΠΉ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π°ΡΡΡΠ°Π²Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅!
Π Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π³Π»ΡΠΏΠ°Π²Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ°, Π·Π° Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°:
package main
import "fmt"
import "reflect"
func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
val := reflect.ValueOf(in)
for i := 0; i < val.Len(); i++ {
memo = fn(val.Index(i).Interface(), memo)
}
return memo
}
func main() {
list := []int{1, 2, 3, 4, 5}
result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
return memo.(int) + val.(int)
})
fmt.Println(result)
}
Π’ΠΎΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Reduce
Π΅ Π·Π°ΠΈΠΌΡΡΠ²Π°Π½ΠΎ ΠΎΡ ΡΡΠ°ΡΠΈΡΡΠ° interface{}
- ΡΠ°ΡΡ, Π° Π½Π° Π΅Π·ΠΈΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠ½Π΅ Π½Π° ΠΏΠΈΡΠ°Π½Π΅. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ°Π·Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ Π²ΡΠΈΡΠΊΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π³ΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ ΠΏΡΠ»Π½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π° Π·Π° Π²ΡΠ΅ΠΊΠΈ. Π’ΠΎΠ·ΠΈ ΡΡΠΈΠ» Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π΅ ΡΠΆΠ°ΡΠ½ΠΎ Π³ΡΠΎΠ·Π΅Π½ ΠΈ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π²ΡΠΈΡΠΊΠΎ. ΠΠΊΡΠΎΠ±Π°ΡΠΈΡΠ½ΠΈ ΠΏΠΎΠ΄Π²ΠΈΠ·ΠΈ ΠΊΠ°ΡΠΎ ΡΠ΅Π·ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠΎΡΠΈ Π ΠΎΠ± ΠΠ°ΠΉΠΊ Π½Π΅ Ρ
Π°ΡΠ΅ΡΠ²Π° Ρ
ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±ΡΠ²Π°Ρ Ρ ΡΠΎΠ²Π°, ΠΊΠ°ΠΊΡΠΎ ΡΠΎΠΉ ΡΠΏΠΎΠΌΠ΅Π½Π° Π² Π΅Π΄ΠΈΠ½ ΠΎΡ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡΠ΅ ΡΠΈ.
Π’ΠΎΠ²Π° Π΅ ΠΌΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ ΠΏΠΎΠ²ΠΈΡΠ΅Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±ΡΠ³Π²Π°, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ Π΅ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠΈΡ
Π²Π·Π΅Π» D ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π·ΠΈ Π³Π»ΡΠΏΠΎΡΡΠΈ. ΠΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π½ΡΠΊΠΎΠΉ Π΄Π° ΠΊΠ°ΠΆΠ΅ ΡΠΎΠ²Π° interface{}
ΠΏΠΎ-ΡΠ΅ΡΠ»ΠΈΠ² ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Π·Π° ΠΏΠΈΡΠ°Π½Π΅?
ΠΠ΅Π²ΠΎΠ»ΠΈΡΠ΅ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅
Go ΠΈΠΌΠ° Π²Π³ΡΠ°Π΄Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ, ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π²ΡΡΡ
Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ Π²ΡΠΏΡΠΎΡΠΈ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π΅ΠΊΠΈΠΏΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Go ΡΡΠ·Π΄Π°Π΄Π΅
ΠΡΠ»ΡΡΡΠ΅Π½ Π±Π°Π³Π°ΠΆ ΠΎΡ Xi
Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½ Go Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΎΡ Ρ
ΠΎΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ C ΠΏΡΠ΅Π· ΡΠ΅Π»ΠΈΡ ΡΠΈ ΠΆΠΈΠ²ΠΎΡ ΠΈ ΠΎΡ ΡΠ°ΠΊΠΈΠ²Π°, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΈΡΠΊΠ°Ρ Π΄Π° ΠΎΠΏΠΈΡΠ°Ρ Π½Π΅ΡΠΎ Π½ΠΎΠ²ΠΎ. ΠΠ·ΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ C Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΠΎΠ»Π΅Π»Π° (ΠΎΡΠΈΠ³.:
ΠΡΡΠ³ ΡΠΊΡΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅, ΡΠ΅ Go Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅Π½ Π΅Π·ΠΈΠΊ (ΠΊΠ°ΡΠΎ ΡΠΈΡ ΠΈΡ ΡΠΆΠ°Ρ Π½Π° C). Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅Π½ ΡΡΠΈΠ», ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π°ΡΡ Π°ΠΈΡΠ΅Π½ ΠΈ ΠΎΡΡΠ°ΡΡΠ». ΠΠ½Π°ΠΌ, ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π½Π΅ Π΅ ΡΡΠ΅Π±ΡΡΠ΅Π½ ΠΊΡΡΡΡΠΌ, Π½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡΡΠ΄Π΅ΡΠ½ΠΎ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π°Π±ΡΡΡΠ°Ρ ΠΈΡΠ°ΠΌΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ Π² ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈΠΌ ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ°Π½Π΅.
ΠΡΠΎΡΡΠΎΡΠ° Π·Π° Π²Π°ΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΏΠΎΠ»Π·Π°
Go Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΡΡ ΠΈ ΡΡΠΏΡΠ²Π° Π² ΡΠ°Π·ΠΈ ΡΠ΅Π». ΠΠ°ΠΏΠΈΡΠ°Π½ Π΅ Π·Π° ΡΠ»Π°Π±ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡΠ°Ρ Π΅Π·ΠΈΠΊ ΠΊΠ°ΡΠΎ ΡΠ°Π±Π»ΠΎΠ½. Π’ΠΎΠΉ ΠΈΠ΄Π²Π° Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ Ρ ΠΏΡΠΎΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΡΠΈ Π½Π΅ΡΠ°. Π’ΠΎΠΉ Π΅ Π»Π΅ΡΠ΅Π½ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ Π»Π΅ΡΠ΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.
Π’ΠΎΠ²Π° Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΎ, Π½Π΅Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΎ ΠΈ Π»ΠΎΡΠΎ Π·Π° ΡΠΌΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com