ืืืืื ืืืืืฉืื ืืืืจืื ืื ืืฉืชืืฉืชื ื-Go ืืืืืขืืช.
ืืืืขื ืืืชืื ืชืื ืืืฉืื?
ืงื ืืืื ืืืืื Go, ืื ืื ืงื ืฉืืืงืืื ืืงืื ืื ืขืจื ืืื, ืฉืืืจืื ืืืจ ืืืืืชื ืืงืืื ืืฆืืจื ืคืจืืืืงืืืืืช. ืืกืคืจ ืฉืคืขื ืืืืชื 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 ืืคืจืืข, ืืืชืืฆืื ืืื, ืคืชืจืื ืืขืื ืคืฉืืื ืืืื ืืืืืช ืืืืื ืฉื ืงืื.
ืื ื, ืืืฉื, ืคืชืจืื ืืืืชื ืืขืื ื
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 ืืฆืจ
ืืืขื ืชืจืืืชื ืืฉื
ืืืขืชื, ืื ืคืืชืื ืขื ืืื ืื ืฉืื ืฉืืฉืชืืฉื ื-C ืื ืืืืื ืืขื ืืื ืืื ืฉืื ืจืฆื ืื ืกืืช ืืฉืื ืืืฉ. ื ืืชื ืืชืืจ ืืช ืืฉืคื ื-C ืขื ืืืืืื ื ืืกืคืื(ืืงืืจ:
ืืขืื ืืืจืงืช ื ืืกืคืช ืืื ืฉืื ืืื ืฉืคื ืคืจืืฆืืืจืืืช (ืืื ืืืืื ืืฉืงืื ืฉื โโC). ืืกืืคื ืฉื ืืืจ ืืชื ืืืชื ืงืื ืืกืื ืื ืคืจืืฆืืืจืื ืฉืืจืืืฉ ืืจืืื ืืืืืฉื. ืื ื ืืืืข ืฉืชืื ืืช ืืื ืื ืขืฆืืื ืืื ืื ืืืืจ ืืกืฃ, ืืื ืื ืืืื ื ืืืจ ืืืืืช ืืกืืื ืืืคืฉื ืืช ืืคืจืืื ืืกืืืื ืืืกืคืง ืื ืงืคืกืืืฆืื.
ืคืฉืืืช ืืืืืชื
Go ืชืืื ื ื ืืืืืช ืคืฉืืื ืืืื ืืฆืืืื ืืืืจื ืื. ืืื ื ืืชื ืขืืืจ ืืชืื ืชืื ืืืฉืื, ืชืื ืฉืืืืฉ ืืฉืคื ืืฉื ื ืืชืื ืืช. ืื ืืืืข ืขื ืืืื ืคืฉืืืื ืืขืฉืืช ืืืจืื ืคืฉืืืื. ืื ืงื ืืงืจืืื ืืงื ืืฉืืืืฉ.
ืื ืืืื ืืืืืื, ืื ืืจืฉืื ืืจืข ืขืืืจ ืืชืื ืชืื ืืืืื.
ืชืืื
ืืงืืจ: www.habr.com