ΠΠ° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
ΠΌΠ΅ΡΡΡΠ΅Π² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Go Π΄Π»Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π‘ΠΎΠ·Π΄Π°Π½ Π΄Π»Ρ ΡΠ»Π°Π±ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²?
Go ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΡΠΈΡΡΡΡ, Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΠΎ, ΡΡΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π½ΡΠ»ΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΎΠ΄ΠΈΠ½ Π²Π΅ΡΠ΅Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠΆΠ΅ ΠΌΠΎΠ³ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄. ΠΠ½ΠΈΠ³Π° ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΈΠ·ΡΡΠ°Π» Go Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ
Google ΡΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΡΠ° Go β ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΡΠΏΠ°ΡΡΠ°Ρ ΡΠ΅ΡΡΠ°, ΠΈ ΡΠ·ΡΠΊ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ , Π½ΠΎ Ρ ΡΠΎΠΌΠ½Π΅Π²Π°ΡΡΡ Π² ΡΡΠΎΠΌ. ΠΡΡΡ ΡΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π»ΠΈΠ±ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°Π΅Ρ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Ρ. Π Π²ΡΠ΅ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π΄ΠΎΠ²Π΅ΡΠΈΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠΎ ΡΡΡΠ΅ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡΠΎΡΡΠΎΡΠ΅ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ·ΡΠΊΠ° ΠΈ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½ΡΠΆΠ½ΠΎ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΡΡΡ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Π»ΠΈΡΡ Π² Go.
Π’Π°ΠΊ Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΆΠ΅ ΠΎΠ½ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΏΡΠΎΡΡΡΠΌ? ΠΠΎΡ ΠΏΠ°ΡΠ° ΡΠΈΡΠ°Ρ
ΠΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π΄Π΅ΡΡ, ΡΡΠΎ Π½Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ (ΠΏΡΠΈΠΌ.ΠΏΠ΅Ρ.:
Π³ΡΠ³Π»Π΅ΡΡ ) Π½Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ. ΠΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²Π΅ΡΡΠΌΠ° ΠΌΠΎΠ»ΠΎΠ΄Ρ, ΠΈΠ΄ΡΡ ΠΊ Π½Π°ΠΌ ΠΏΠΎΡΠ»Π΅ ΡΡΠ΅Π±Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡΡΠ°Π»ΠΈ Java, ΠΈΠ»ΠΈ C/C++, ΠΈΠ»ΠΈ Python. ΠΠ½ΠΈ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΠ½ΡΡΡ Π²ΡΠ΄Π°ΡΡΠΈΠΉΡΡ ΡΠ·ΡΠΊ, Π½ΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΠ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ ΡΠ·ΡΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΡΡ ΠΈΠΌ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ.
Β
ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌΡΠΌ, Π³ΡΡΠ±ΠΎ Π³ΠΎΠ²ΠΎΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ Π½Π° Π‘ΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π² Google ΡΠ°Π½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ²ΠΎΡ ΠΊΠ°ΡΡΠ΅ΡΡ ΠΈ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ²ΠΎΠ΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Π‘ΠΈ. Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠΊΠΎΡΠΎΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ·ΡΠΊ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ.
Π§ΡΠΎ? Π’Π°ΠΊ Π ΠΎΠ± ΠΠ°ΠΉΠΊ Π² ΡΡΡΠ½ΠΎΡΡΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π² Google Π½Π΅ ΡΡΠΎΠ»Ρ Ρ ΠΎΡΠΎΡΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ·ΡΠΊ Π΄Π»Ρ ΠΈΠ΄ΠΈΠΎΡΠΎΠ² (ΠΏΡΠΈΠΌ.ΠΏΠ΅Ρ.: dumbed down), ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. Π§ΡΠΎ Π·Π° Π²ΡΡΠΎΠΊΠΎΠΌΠ΅ΡΠ½ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠ»Π»Π΅Π³? Π― Π²ΡΠ΅Π³Π΄Π° ΡΡΠΈΡΠ°Π», ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ 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 ΡΠΎΠ·Π΄Π°Π»Π°
ΠΡΠ»ΡΡΡΡΠ½ΡΠΉ Π±Π°Π³Π°ΠΆ ΠΈΠ· Π‘ΠΈ
ΠΠΎ-ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Go Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π»ΡΠ΄ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π‘ΠΈ Π²ΡΡ ΡΠ²ΠΎΡ ΠΆΠΈΠ·Π½Ρ ΠΈ ΡΠ΅ΠΌΠΈ, ΠΊΡΠΎ Π½Π΅ Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π½ΠΎΠ²ΠΎΠ΅. Π―Π·ΡΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ Π‘ΠΈ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠ»Π΅ΡΠΈΠΊΠ°ΠΌΠΈ(ΠΎΡΠΈΠ³.:
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΡΠΊΡΠΈΠΏΡΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Go β ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΠ·ΡΠΊ (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΈΡ ΠΎΠΌΡ ΡΠΆΠ°ΡΡ Π‘ΠΈ). Π ΠΈΡΠΎΠ³Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΡΠ°Π΅ΡΡΡ Π°ΡΡ Π°ΠΈΡΠ½ΡΠΌ ΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ. Π― Π·Π½Π°Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ Π½Π΅ ΡΠ΅ΡΠ΅Π±ΡΡΠ½Π°Ρ ΠΏΡΠ»Ρ, Π½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π² ΡΠΈΠΏΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ.
ΠΡΠΎΡΡΠΎΡΠ° Π΄Π»Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²ΡΠ³ΠΎΠ΄Ρ
Go Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΈ ΠΎΠ½ ΠΏΡΠ΅ΡΡΠΏΠ΅Π» Π² ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ. ΠΠ½ Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π΄Π»Ρ ΡΠ»Π°Π±ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΡΠ°ΡΡΠΉ ΡΠ·ΡΠΊ. ΠΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ½ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅ Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΡ Π²Π΅ΡΠ΅ΠΉ. ΠΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΠ½ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΠΉ, Π½Π΅Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈ ΠΏΠ»ΠΎΡ Π΄Π»Ρ ΡΠΌΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ².
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com