ืœืžื” Go Design ื–ื” ืจืข ืขื‘ื•ืจ ืžืชื›ื ืชื™ื ื—ื›ืžื™ื

ื‘ืžื”ืœืš ื”ื—ื•ื“ืฉื™ื ื”ืื—ืจื•ื ื™ื ื”ืฉืชืžืฉืชื™ ื‘-Go ืœื”ื˜ืžืขื•ืช. ื”ื•ื›ื—ื” ืฉืœ ืจืขื™ื•ืŸ ืื• ืชืื•ืจื™ื” (ืžืฉื•ืขืจ.: ืงื•ื“ ืœื‘ื“ื™ืงืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืจืขื™ื•ืŸ) ื‘ื–ืžื ื• ื”ืคื ื•ื™, ื‘ื™ืŸ ื”ืฉืืจ ื›ื“ื™ ืœืœืžื•ื“ ืืช ืฉืคืช ื”ืชื›ื ื•ืช ืขืฆืžื”. ื”ืชื•ื›ื ื•ืช ืขืฆืžืŸ ืคืฉื•ื˜ื•ืช ืžืื•ื“ ื•ืื™ื ืŸ ืžื˜ืจืช ื”ืžืืžืจ ื”ื–ื”, ืื‘ืœ ื—ื•ื•ื™ืช ื”ืฉื™ืžื•ืฉ ื‘-Go ืขืฆืžื” ืจืื•ื™ื” ืœื›ืžื” ืžื™ืœื™ื ืขืœื™ื”. ืœืš ืžื‘ื˜ื™ื— ืœื”ื™ื•ืช (ืžืฉื•ืขืจ.: ืžืืžืจ ืฉื ื›ืชื‘ ื‘ืฉื ืช 2015) ืฉืคื” ืคื•ืคื•ืœืจื™ืช ืขื‘ื•ืจ ืงื•ื“ ืžื“ืจื’ื™ ืจืฆื™ื ื™. ื”ืฉืคื” ื ื•ืฆืจื” ืขืœ ื™ื“ื™ ื’ื•ื’ืœ, ืฉื ื ืขืฉื” ื‘ื” ืฉื™ืžื•ืฉ ืคืขื™ืœ. ื‘ืฉื•ืจื” ื”ืชื—ืชื•ื ื”, ืื ื™ ื‘ืืžืช ื—ื•ืฉื‘ ืฉื”ืขื™ืฆื•ื‘ ืฉืœ ืฉืคืช ื”-Go ืจืข ืœืžืชื›ื ืชื™ื ื—ื›ืžื™ื.

ืžื™ื•ืขื“ ืœืžืชื›ื ืชื™ื ื—ืœืฉื™ื?

ืงืœ ืžืื•ื“ ืœืœืžื•ื“ Go, ื›ืœ ื›ืš ืงืœ ืฉื”ื”ืงื“ืžื” ืœืงื—ื” ืœื™ ืขืจื‘ ืื—ื“, ืฉืื—ืจื™ื• ื›ื‘ืจ ื™ื›ื•ืœืชื™ ืœืงื•ื“ื“ ื‘ืฆื•ืจื” ืคืจื•ื“ื•ืงื˜ื™ื‘ื™ืช. ื”ืกืคืจ ืฉืคืขื ืœืžื“ืชื™ Go ื ืงืจื ืžื‘ื•ื ืœืชื›ื ื•ืช ื‘-Go (ืชืจื’ื•ื), ื”ื•ื ื–ืžื™ืŸ ื‘ืื™ื ื˜ืจื ื˜. ื”ืกืคืจ, ื›ืžื• ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ Go ืขืฆืžื•, ืงืœ ืœืงืจื™ืื”, ื™ืฉ ืœื• ื“ื•ื’ืžืื•ืช ืงื•ื“ ื˜ื•ื‘ื•ืช, ื•ืžื›ื™ืœ ื›-150 ืขืžื•ื“ื™ื ืฉื ื™ืชืŸ ืœืงืจื•ื ื‘ืžื›ื” ืื—ืช. ื”ืคืฉื˜ื•ืช ื”ื–ื• ืžืจืขื ื ืช ื‘ื”ืชื—ืœื”, ื‘ืžื™ื•ื—ื“ ื‘ืขื•ืœื ืชื›ื ื•ืช ืžืœื ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ืžืกื•ื‘ื›ืช ืžื“ื™. ืื‘ืœ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืžืชืขื•ืจืจืช ื”ืžื—ืฉื‘ื”: "ื”ืื ื–ื” ื‘ืืžืช ื›ืš?"

ื’ื•ื’ืœ ื˜ื•ืขื ืช ืฉื”ืคืฉื˜ื•ืช ืฉืœ Go ื”ื™ื ื ืงื•ื“ืช ื”ืžื›ื™ืจื” ืฉืœื• ื•ื”ืฉืคื” ื ื•ืขื“ื” ืœืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืžืจื‘ื™ืช ื‘ืฆื•ื•ืชื™ื ื’ื“ื•ืœื™ื, ืื‘ืœ ืื ื™ ื‘ืกืคืง. ื™ืฉ ืชื›ื•ื ื•ืช ืฉื—ืกืจื•ืช ืื• ืžืคื•ืจื˜ื•ืช ืžื“ื™. ื•ื”ื›ืœ ื‘ื’ืœืœ ื—ื•ืกืจ ืืžื•ืŸ ื‘ืžืคืชื—ื™ื, ืžืชื•ืš ื”ื ื—ื” ืฉื”ื ืœื ืžืกื•ื’ืœื™ื ืœืขืฉื•ืช ืฉื•ื ื“ื‘ืจ ื ื›ื•ืŸ. ื”ืจืฆื•ืŸ ื”ื–ื” ืœืคืฉื˜ื•ืช ื”ื™ื” ื”ื—ืœื˜ื” ืžื•ื“ืขืช ืฉืœ ืžืขืฆื‘ื™ ื”ืฉืคื”, ื•ื›ื“ื™ ืœื”ื‘ื™ืŸ ื”ื™ื˜ื‘ ืžื“ื•ืข ื”ื™ื” ืฆื•ืจืš ื‘ื›ืš, ืขืœื™ื ื• ืœื”ื‘ื™ืŸ ืืช ื”ืžื•ื˜ื™ื‘ืฆื™ื” ืฉืœ ื”ืžืคืชื—ื™ื ื•ืžื” ื”ื ื ื™ืกื• ืœื”ืฉื™ื’ ื‘-Go.

ืื– ืœืžื” ื–ื” ื ืขืฉื” ื›ืœ ื›ืš ืคืฉื•ื˜? ื”ื ื” ื›ืžื” ืฆื™ื˜ื•ื˜ื™ื ืจื•ื‘ ืคื™ื™ืง (ืžืฉื•ืขืจ.: ืื—ื“ ื”ื™ื•ืฆืจื™ื ื”ืฉื•ืชืคื™ื ืฉืœ ืฉืคืช Go):

ื ืงื•ื“ืช ื”ืžืคืชื— ื›ืืŸ ื”ื™ื ืฉื”ืžืชื›ื ืชื™ื ืฉืœื ื• (ืžืฉื•ืขืจ.: ืื ืฉื™ ื’ื•ื’ืœ) ืื™ื ื ื—ื•ืงืจื™ื. ื”ื, ื›ื›ืœืœ, ื“ื™ ืฆืขื™ืจื™ื, ืžื’ื™ืขื™ื ืืœื™ื ื• ืœืื—ืจ ืœื™ืžื•ื“ื™ื, ืื•ืœื™ ื”ื ืœืžื“ื• Java, ืื• C/C++, ืื• Python. ื”ื ืœื ื™ื›ื•ืœื™ื ืœื”ื‘ื™ืŸ ืฉืคื” ืžืฆื•ื™ื ืช, ืื‘ืœ ื™ื—ื“ ืขื ื–ืืช ืื ื—ื ื• ืจื•ืฆื™ื ืฉื”ื ื™ื™ืฆืจื• ืชื•ื›ื ื” ื˜ื•ื‘ื”. ืœื›ืŸ ื”ืฉืคื” ืฉืœื”ื ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืงืœื” ืขื‘ื•ืจื ืœื”ื‘ื ื” ื•ืœืœืžื•ื“.
 
ื”ื•ื ืฆืจื™ืš ืœื”ื™ื•ืช ืžื•ื›ืจ, ื‘ืขืจืš ื‘ื“ื•ืžื” ืœ-C. ืžืชื›ื ืชื™ื ื”ืขื•ื‘ื“ื™ื ื‘ื’ื•ื’ืœ ืžืชื—ื™ืœื™ื ืืช ื”ืงืจื™ื™ืจื” ืฉืœื”ื ืžื•ืงื“ื ื•ืžื›ื™ืจื™ื ื‘ืขื™ืงืจ ืฉืคื•ืช ืคืจื•ืฆื“ื•ืจืœื™ื•ืช, ื‘ืžื™ื•ื—ื“ ืžืฉืคื—ืช C. ื”ื“ืจื™ืฉื” ืœืคืจื•ื“ื•ืงื˜ื™ื‘ื™ื•ืช ืžื”ื™ืจื” ื‘ืฉืคืช ืชื›ื ื•ืช ื—ื“ืฉื” ืคื™ืจื•ืฉื” ืฉื”ืฉืคื” ืœื ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืจื“ื™ืงืœื™ืช ืžื“ื™.

ืžื”? ืื– ืจื•ื‘ ืคื™ื™ืง ื‘ืขืฆื ืื•ืžืจ ืฉื”ืžืคืชื—ื™ื ื‘ื’ื•ื’ืœ ืœื ื›ืœ ื›ืš ื˜ื•ื‘ื™ื, ื‘ื’ืœืœ ื–ื” ื”ื ื™ืฆืจื• ืฉืคื” ืœืื™ื“ื™ื•ื˜ื™ื (ืžืฉื•ืขืจ.: ืžื˜ื•ืžื˜ื) ื›ื“ื™ ืฉื™ื•ื›ืœื• ืœืขืฉื•ืช ืžืฉื”ื•. ืื™ื–ื” ืžื™ืŸ ืžื‘ื˜ ื™ื”ื™ืจ ืขืœ ื”ืงื•ืœื’ื•ืช ืฉืœืš? ืชืžื™ื“ ื”ืืžื ืชื™ ืฉื”ืžืคืชื—ื™ื ืฉืœ ื’ื•ื’ืœ ื ื‘ื—ืจื™ื ื‘ื™ื“ ืžื”ืžื‘ืจื™ืงื™ื ื•ื”ื˜ื•ื‘ื™ื ื‘ื™ื•ืชืจ ืขืœ ืคื ื™ ื›ื“ื•ืจ ื”ืืจืฅ. ื”ื ื‘ื˜ื•ื— ื™ื›ื•ืœื™ื ืœื”ืชืžื•ื“ื“ ืขื ืžืฉื”ื• ืงืฉื” ื™ื•ืชืจ?

ื—ืคืฆื™ื ืฉืœ ืคืฉื˜ื•ืช ืžื•ื’ื–ืžืช

ืœื”ื™ื•ืช ืคืฉื•ื˜ ื”ื•ื ืžื˜ืจื” ืจืื•ื™ื” ื‘ื›ืœ ืขื™ืฆื•ื‘, ื•ืœื ืกื•ืช ืœืขืฉื•ืช ืžืฉื”ื• ืคืฉื•ื˜ ื–ื” ืงืฉื”. ืขื ื–ืืช, ื›ืืฉืจ ืžื ืกื™ื ืœืคืชื•ืจ (ืื• ืืคื™ืœื• ืœื‘ื˜ื) ื‘ืขื™ื•ืช ืžื•ืจื›ื‘ื•ืช, ืœืคืขืžื™ื ื™ืฉ ืฆื•ืจืš ื‘ื›ืœื™ ืžื•ืจื›ื‘. ืžื•ืจื›ื‘ื•ืช ื•ืžื•ืจื›ื‘ื•ืช ื”ืŸ ืœื ื”ืชื›ื•ื ื•ืช ื”ื˜ื•ื‘ื•ืช ื‘ื™ื•ืชืจ ืฉืœ ืฉืคืช ืชื›ื ื•ืช, ืื‘ืœ ื™ืฉ ื“ืจืš ื‘ื™ื ื™ื™ื ืฉื‘ื” ื”ืฉืคื” ื™ื›ื•ืœื” ืœื™ืฆื•ืจ ื”ืคืฉื˜ื•ืช ืืœื’ื ื˜ื™ื•ืช ืฉืงืœ ืœื”ื‘ื™ืŸ ื•ืœื”ืฉืชืžืฉ ื‘ื”ืŸ.

ืœื ืžืื•ื“ ืืงืกืคืจืกื™ื‘ื™

ื‘ื’ืœืœ ื”ืžื—ื•ื™ื‘ื•ืช ืฉืœื” ืœืคืฉื˜ื•ืช, ืœ-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 ืžืคืจื™ืข, ื•ื›ืชื•ืฆืื” ืžื›ืš, ืคืชืจื•ืŸ ื‘ืขื™ื” ืคืฉื•ื˜ื” ืžื‘ื™ื ืœื›ืžื•ืช ื’ื“ื•ืœื” ืฉืœ ืงื•ื“.

ื”ื ื”, ืœืžืฉืœ, ืคืชืจื•ืŸ ืœืื•ืชื” ื‘ืขื™ื” ื‘ D:

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, ืื‘ืœ ืื™ืŸ ื‘ืืžืช ืฉื•ื ื“ื‘ืจ ืžืกื•ื‘ืš ื‘ื”ื‘ื ืชื.

ืœืขื–ืื–ืœ ืฉืœ ื”ืขืชืงื”

ื”ืฆืขื” ืคื•ืคื•ืœืจื™ืช ืœืฉื™ืคื•ืจ 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))
}

ื•ื”ื“ื•ื’ืžื” ื”ื–ื• ืืคื™ืœื• ืœื ืขื•ื‘ื“ืช ืขื‘ื•ืจ ื˜ื™ืคื•ืกื™ื ื—ืชื•ืžื™ื. ื’ื™ืฉื” ื–ื• ืžืคืจื” ืœื—ืœื•ื˜ื™ืŸ ืืช ื”ืขื™ืงืจื•ืŸ ืฉืœ ืœื ืœื—ื–ื•ืจ ืขืœ ืขืฆืžืš (DRY), ืื—ื“ ื”ืขืงืจื•ื ื•ืช ื”ืžืคื•ืจืกืžื™ื ื•ื”ื‘ืจื•ืจื™ื ื‘ื™ื•ืชืจ, ืชื•ืš ื”ืชืขืœืžื•ืช ืžื”ืžืงื•ืจ ืœื˜ืขื•ื™ื•ืช ืจื‘ื•ืช. ืœืžื” ื’ื• ืขื•ืฉื” ืืช ื–ื”? ื–ื” ื”ื™ื‘ื˜ ื ื•ืจื ืฉืœ ื”ืฉืคื”.

ืื•ืชื” ื“ื•ื’ืžื” ื‘-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 ื™ืฉ ืžืขืจื›ืช ืชืœื•ืช ืžื•ื‘ื ื™ืช ื”ื‘ื ื•ื™ื” ืขืœ ื’ื‘ื™ ืกืคืงื™ ืื™ืจื•ื— ืคื•ืคื•ืœืจื™ื™ื VCS. ื”ื›ืœื™ื ืฉืžื’ื™ืขื™ื ืขื Go ื™ื•ื“ืขื™ื ืขืœ ื”ืฉื™ืจื•ืชื™ื ื”ืœืœื• ื•ื™ื›ื•ืœื™ื ืœื”ื•ืจื™ื“, ืœื‘ื ื•ืช ื•ืœื”ืชืงื™ืŸ ืžื”ื ืงื•ื“ ื‘ืžื›ื” ืื—ืช. ืœืžืจื•ืช ืฉื–ื” ื ื”ื“ืจ, ื™ืฉ ืคื’ื ื’ื“ื•ืœ ื‘ื ื™ื”ื•ืœ ื’ืจืกืื•ืช! ื›ืŸ, ื–ื” ื ื›ื•ืŸ ืฉืืชื” ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ืงื•ื“ ื”ืžืงื•ืจ ืžืฉื™ืจื•ืชื™ื ื›ืžื• github ืื• bitbucket ื‘ืืžืฆืขื•ืช ื›ืœื™ Go, ืื‘ืœ ืืชื” ืœื ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื”ื’ืจืกื”. ื•ืฉื•ื‘ ืคืฉื˜ื•ืช ืขืœ ื—ืฉื‘ื•ืŸ ื”ืชื•ืขืœืช. ืื ื™ ืœื ืžืฆืœื™ื— ืœื”ื‘ื™ืŸ ืืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ื—ืœื˜ื” ื›ื–ื•.

ืœืื—ืจ ืฉืืœืช ืฉืืœื•ืช ืœื’ื‘ื™ ืคืชืจื•ืŸ ืœื‘ืขื™ื” ื–ื•, ืฆื•ื•ืช ื”ืคื™ืชื•ื— ืฉืœ Go ื™ืฆืจ ืฉืจืฉื•ืจ ื”ืคื•ืจื•ื, ืฉื”ืชืืจ ื›ื™ืฆื“ ื”ื ื”ื•ืœื›ื™ื ืœืขืงื•ืฃ ืืช ื”ื ื•ืฉื ื”ื–ื”. ื”ื”ืžืœืฆื” ืฉืœื”ื ื”ื™ื™ืชื” ืคืฉื•ื˜ ืœื”ืขืชื™ืง ืืช ื›ืœ ื”ืžืื’ืจ ืœืคืจื•ื™ืงื˜ ืฉืœืš ื™ื•ื ืื—ื“ ื•ืœื”ืฉืื™ืจ ืื•ืชื• "ื›ืžื• ืฉื”ื•ื". ืžื” ืœืขื–ืื–ืœ ื”ื ื—ื•ืฉื‘ื™ื? ื™ืฉ ืœื ื• ืžืขืจื›ื•ืช ื‘ืงืจืช ื’ืจืกืื•ืช ืžื“ื”ื™ืžื•ืช ืขื ืชื™ื•ื’ ืžืขื•ืœื” ื•ืชืžื™ื›ื” ื‘ื’ืจืกืื•ืช ืฉื™ื•ืฆืจื™ ื”-Go ืžืชืขืœืžื™ื ืžื”ื ื•ืคืฉื•ื˜ ืžืขืชื™ืงื™ื ืืช ืงื•ื“ ื”ืžืงื•ืจ.

ืžื˜ืขืŸ ืชืจื‘ื•ืชื™ ืžืฉื™

ืœื“ืขืชื™, ื’ื• ืคื•ืชื—ื” ืขืœ ื™ื“ื™ ืื ืฉื™ื ืฉื”ืฉืชืžืฉื• ื‘-C ื›ืœ ื—ื™ื™ื”ื ื•ืขืœ ื™ื“ื™ ืืœื” ืฉืœื ืจืฆื• ืœื ืกื•ืช ืžืฉื”ื• ื—ื“ืฉ. ื ื™ืชืŸ ืœืชืืจ ืืช ื”ืฉืคื” ื›-C ืขื ื’ืœื’ืœื™ื ื ื•ืกืคื™ื(ืžืงื•ืจ: ื’ืœื’ืœื™ ืื™ืžื•ืŸ). ืื™ืŸ ื‘ื• ืจืขื™ื•ื ื•ืช ื—ื“ืฉื™ื, ืœืžืขื˜ ืชืžื™ื›ื” ื‘ื”ืงื‘ืœื” (ืฉื–ื” ืื’ื‘ ื ืคืœื) ื•ื—ื‘ืœ. ื™ืฉ ืœืš ืžืงื‘ื™ืœื™ื•ืช ืžืฆื•ื™ื ืช ื‘ืฉืคื” ื‘ืงื•ืฉื™ ืฉืžื™ืฉื” ื•ืฆื•ืœืขืช.

ื‘ืขื™ื” ื—ื•ืจืงืช ื ื•ืกืคืช ื”ื™ื ืฉื’ื• ื”ื™ื ืฉืคื” ืคืจื•ืฆื“ื•ืจืœื™ืช (ื›ืžื• ื”ืื™ืžื” ื”ืฉืงื˜ื” ืฉืœ โ€‹โ€‹C). ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืืชื” ื›ื•ืชื‘ ืงื•ื“ ื‘ืกื’ื ื•ืŸ ืคืจื•ืฆื“ื•ืจืœื™ ืฉืžืจื’ื™ืฉ ืืจื›ืื™ ื•ืžื™ื•ืฉืŸ. ืื ื™ ื™ื•ื“ืข ืฉืชื›ื ื•ืช ืžื•ื ื—ื” ืขืฆืžื™ื ื”ื•ื ืœื ื›ื“ื•ืจ ื›ืกืฃ, ืื‘ืœ ื–ื” ื™ื”ื™ื” ื ื”ื“ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืคืฉื˜ ืืช ื”ืคืจื˜ื™ื ืœืกื•ื’ื™ื ื•ืœืกืคืง ืื ืงืคืกื•ืœืฆื™ื”.

ืคืฉื˜ื•ืช ืœื˜ื•ื‘ืชืš

Go ืชื•ื›ื ื ื” ืœื”ื™ื•ืช ืคืฉื•ื˜ื” ื•ื”ื™ื ืžืฆืœื™ื—ื” ื‘ืžื˜ืจื” ื–ื•. ื”ื•ื ื ื›ืชื‘ ืขื‘ื•ืจ ืžืชื›ื ืชื™ื ื—ืœืฉื™ื, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืฉืคื” ื™ืฉื ื” ื›ืชื‘ื ื™ืช. ื–ื” ืžื’ื™ืข ืขื ื›ืœื™ื ืคืฉื•ื˜ื™ื ืœืขืฉื•ืช ื“ื‘ืจื™ื ืคืฉื•ื˜ื™ื. ื–ื” ืงืœ ืœืงืจื™ืื” ื•ืงืœ ืœืฉื™ืžื•ืฉ.

ื–ื” ืžืื•ื“ ืžื™ืœื•ืœื™, ืœื ืžืจืฉื™ื ื•ืจืข ืขื‘ื•ืจ ืžืชื›ื ืชื™ื ื—ื›ืžื™ื.

ืชื•ื“ื” mersinvald ืขื‘ื•ืจ ืขืจื™ื›ื•ืช

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”