ããæ°ãæéãç§ã¯å®è£ ã« Go ã䜿çšããŠããŸããã (çŽã: ã¢ã€ãã¢ã®æ©èœããã¹ãããããã®ã³ãŒã) ãèªç±æéã«äœæããäžéšã¯ããã°ã©ãã³ã°èšèªèªäœãå匷ããããšãç®çã§ããã ããã°ã©ã èªäœã¯éåžžã«åçŽã§ããããã®èšäºã®ç®çã§ã¯ãããŸããããGo èªäœã®äœ¿çšäœéšã«ã€ããŠã¯å°ã説æãã䟡å€ããããŸãã ãŽãŒã¯ (çŽã: 2015 å¹Žã«æžãããèšäº) æ¬æ Œçãªã¹ã±ãŒã©ãã«ãªã³ãŒãã«äººæ°ã®èšèªã ãã®èšèªã¯ Google ã«ãã£ãŠäœæãããç©æ¥µçã«äœ¿çšãããŠããŸãã çµè«ããèšãã°ãç§ã¯æ£çŽã«èšã£ãŠãGo èšèªã®èšèšã¯è³¢æãªããã°ã©ããŒã«ãšã£ãŠæªããã®ã ãšèããŠããŸãã
匱ãããã°ã©ããŒåãã«èšèšãããŠããŸãã?
Go ã¯éåžžã«ç°¡åã«åŠã¶ããšãã§ããã®ã§ãå°å ¥ã«äžæ©ããã£ãã»ã©ã§ããã®åŸã¯ãã§ã«çç£çã«ã³ãŒãã£ã³ã°ã§ããããã«ãªããŸããã ç§ã Go ãåŠã¶ããã«äœ¿çšããæ¬ã¯æ¬¡ã®ãšããã§ã (ïŒããªã³ã©ã€ã³ã§å ¥æã§ããŸãã ãã®æ¬ã¯ãGo ã®ãœãŒã¹ ã³ãŒãèªäœãšåæ§ã«ãèªã¿ããããåªããã³ãŒãäŸããããçŽ 150 ããŒãžã§äžæ°ã«èªãããšãã§ããŸãã ãã®ã·ã³ãã«ãã¯ãç¹ã«è€éããããã¯ãããžãŒã«æºã¡ãããã°ã©ãã³ã°ã®äžçã§ã¯ãæåã¯æ°é®®ã«æããããŸãã ããããæçµçã«ã¯ãé ããæ©ããããæ¬åœã«ãããªã®ãïŒããšããèããçãŸããŸãã
Googleã¯ãGoã®ã·ã³ãã«ããã»ãŒã«ã¹ãã€ã³ãã§ããããã®èšèªã¯å€§èŠæš¡ãªããŒã ã§æå€§éã®çç£æ§ãçºæ®ã§ããããã«èšèšãããŠãããšäž»åŒµããŠããããç§ã¯ãããçã£ãŠããã æ¬ èœããŠããæ©èœããŸãã¯é床ã«è©³çŽ°ãªæ©èœããããŸãã ããã¯ãã¹ãŠãéçºè ã«å¯Ÿããä¿¡é Œã®æ¬ åŠãåå ã§ãããéçºè ã¯äœãæ£ããè¡ãããšãã§ããªããšããæã蟌ã¿ãåå ã§ãã ãã®åçŽããžã®æ¬²æ±ã¯ãèšèªã®èšèšè ã«ããæèçãªæ±ºå®ã§ããããªããããå¿ èŠãªã®ããå®å šã«çè§£ããã«ã¯ãéçºè ã®åæ©ãšãéçºè ã Go ã§äœãéæããããšããŠããã®ããçè§£ããå¿ èŠããããŸãã
ã§ã¯ããªãããã»ã©ã·ã³ãã«ã«ãªã£ãã®ã§ãããã? ããã«ããã€ãã®åŒçšããããŸã (çŽã: Go èšèªã®å ±åäœæè ã® XNUMX 人):
ããã§éèŠãªç¹ã¯ãããã°ã©ã㌠(çŽã: ïŒã¯ç ç©¶è ã§ã¯ãããŸããã 圌ãã¯éåžžãéåžžã«è¥ãããããã JavaãC/C++ããŸã㯠Python ãå匷ããåŸãç§ãã¡ã®ãšããã«æ¥ãŸãã 圌ãã¯åªããèšèªãçè§£ããããšã¯ã§ããŸããããåæã«ç§ãã¡ã¯åœŒãã«è¯ããœãããŠã§ã¢ãäœã£ãŠããããããšèããŠããŸãã ã ããããã圌ãã®èšèªã¯åœŒãã«ãšã£ãŠçè§£ãããããåŠã³ããããã®ã§ãªããã°ãªããŸããã
圌ã¯ããç¥ãããŠããã¯ãã§ã倧ãŸãã«èšãã° C ã«äŒŒãŠããŸãã Google ã§åãããã°ã©ããŒã¯ãã£ãªã¢ãæ©ãããã¹ã¿ãŒãããŠãããæç¶ãåèšèªãç¹ã« C ãã¡ããªã«ç²ŸéããŠããããšãã»ãšãã©ã§ãã æ°ããããã°ã©ãã³ã°èšèªã§è¿ éãªçç£æ§ãæ±ãããããšããããšã¯ãèšèªãéæ¿ã«ãªããããŠã¯ãããªãããšãæå³ããŸãã
äœïŒ ã€ãŸããããã»ãã€ã¯ã¯åºæ¬çã«ãGoogle ã®éçºè ã¯ããã»ã©åªç§ã§ã¯ãªããã ãã圌ãã¯æãè åãã®èšèªãäœæãããšèšã£ãŠããã®ã§ã (çŽã: åç¶ãšãã) ããã§åœŒãã¯äœããã§ããããã«ãªããŸãã èªåã®ååã«å¯ŸããŠã©ããªå²æ ¢ãªèŠæ¹ãããã®ã§ããããïŒ ç§ã¯ãã€ããGoogle ã®éçºè ã¯å°çäžã§æãè¡æã§åªç§ãªäººæããå³éžãããŠãããšä¿¡ããŠããŸããã 圌ãã¯ãã£ãšé£ããããšã«ã察åŠã§ããã ãããïŒ
é床ã®ã·ã³ãã«ãã®ææç©
ã·ã³ãã«ã§ããããšã¯ãã©ããªãã¶ã€ã³ã«ãããŠã䟡å€ã®ããç®æšã§ãããäœããã·ã³ãã«ã«ããããšããã®ã¯é£ããããšã§ãã ãã ããè€éãªåé¡ã解決ããããšãã (ãŸãã¯è¡šçŸããããšãã) å Žåãè€éãªããŒã«ãå¿ èŠã«ãªãå ŽåããããŸãã è€éããšç·»å¯ãã¯ããã°ã©ãã³ã°èšèªã®æè¯ã®ç¹åŸŽã§ã¯ãããŸããããçè§£ãããã䜿ãããããšã¬ã¬ã³ããªæœè±¡åãèšèªãäœæã§ããäžéç¹ããããŸãã
ããŸã衚çŸåãç¡ã
Go ã¯ã·ã³ãã«ããéèŠãããããä»ã®èšèªã§ã¯èªç¶ãšèªèãããæ§é ãæ¬ ããŠããŸãã ããã¯æåã¯è¯ãã¢ã€ãã¢ã®ããã«æãããããããŸããããå®éã«ã¯åé·ãªã³ãŒãã«ãªããŸãã ãã®çç±ã¯æçœã§ããéçºè ãä»ã®äººã®ã³ãŒããèªã¿ãããããå¿ èŠããããŸãããå®éã«ã¯ããããã®åçŽåã¯èªã¿ããããæãªãã ãã§ãã Go ã«ã¯ç¥èªã¯ãããŸããããããããããŸãã¯ãäœããªããã®ã©ã¡ããã§ãã
ããšãã°ãæšæºå ¥åãŸãã¯ã³ãã³ã ã©ã€ã³åŒæ°ãããã¡ã€ã«ãèªã¿åãã³ã³ãœãŒã« ãŠãŒãã£ãªãã£ã¯æ¬¡ã®ããã«ãªããŸãã
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 ã®äŸãããç°ãªããŸãããããããçè§£ããã®ã«è€éãªããšã¯äœããããŸããã
ã³ããŒå°ç
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))
}ãããŠããã®äŸã¯ç¬Šå·ä»ãåã«å¯ŸããŠãæ©èœããŸããã ãã®ã¢ãããŒãã¯ãåãããšãç¹°ãè¿ããªããšããååã«å®å šã«éåããŠããŸã ()ãæãæåã§æçœãªååã® XNUMX ã€ã§ããããããå€ãã®ãšã©ãŒã®åå ã§ããããšãç¡èŠããŠããŸãã Go ã¯ãªããã®ãããªããšãè¡ãã®ã§ãããã? ããã¯èšèªã®æãããåŽé¢ã§ãã
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{} - è¶çªã§ããããã®èšèªã§ã¯å
¥åãåé¿ããããã«ã®ã¿å¿
èŠã§ãã ããã¯ç©ºã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ããããã¹ãŠã®ã¿ã€ãããããå®è£
ããŠããããã誰ã§ãå®å
šã«èªç±ã«äœ¿çšã§ããŸãã ãã®ã¹ã¿ã€ã«ã®ããã°ã©ãã³ã°ã¯éåžžã«éãã§ãããããã ãã§ã¯ãããŸããã ãã®ãããªã¢ã¯ãããã£ãã¯ãªæã«ã¯ãã©ã³ã¿ã€ã ãªãã¬ã¯ã·ã§ã³ã䜿çšããå¿
èŠããããŸãã ããã»ãã€ã¯ã§ããã圌ã®ã¬ããŒãã®XNUMXã€ã§è¿°ã¹ãããã«ããããæªçšããå人ã¯å¥œãã§ã¯ãããŸããã
ããã¯åŒ·åãªããŒã«ã§ããããã䜿çšã«ã¯æ³šæãå¿ èŠã§ãã å³å¯ã«å¿ èŠãªå Žåãé€ããããã¯é¿ããã¹ãã§ãã
ç§ãªãããã®ãã³ã»ã³ã¹ã®ä»£ããã« D ãã³ãã¬ãŒããæ¡çšããŸãã ã©ãããŠãããªããšãèšãããã ãã interface{} èªã¿ããããªã£ãã®ãããããã¯ã¿ã€ãã»ãŒãã«ãªã£ãã®ã?
äŸåé¢ä¿ç®¡çã®åé¡ç¹
Go ã«ã¯ã人æ°ã®ãããã¹ãã£ã³ã° ãããã€ããŒäžã«æ§ç¯ãããäŸåé¢ä¿ã·ã¹ãã ãçµã¿èŸŒãŸããŠããŸãã ã Go ã«ä»å±ã®ããŒã«ã¯ãããã®ãµãŒãã¹ãèªèããŠãããããããã³ãŒããäžåºŠã«ããŠã³ããŒãããã«ããã€ã³ã¹ããŒã«ã§ããŸãã ããã¯çŽ æŽãããããšã§ãããããŒãžã§ã³ç®¡çã«ã¯å€§ããªæ¬ é¥ããããŸãã ã¯ãã確ãã« Go ããŒã«ã䜿çšã㊠github ã bitbucket ãªã©ã®ãµãŒãã¹ãããœãŒã¹ ã³ãŒããååŸã§ããŸãããããŒãžã§ã³ãæå®ããããšã¯ã§ããŸããã ãããŠãŸããã䜿ãããããç ç²ã«ããã·ã³ãã«ãã ç§ã«ã¯ãã®ãããªæ±ºå®ã®è«çãçè§£ã§ããŸããã
ãã®åé¡ã®è§£æ±ºçã«ã€ããŠè³ªåããåŸãGo éçºããŒã 㯠ããã®åé¡ãã©ã®ããã«åé¿ããããæŠèª¬ããŸããã 圌ãã®æšå¥šäºé ã¯ãããæ¥ããªããžããªå šäœããããžã§ã¯ãã«ã³ããŒãããããããã®ãŸãŸãã«ããŠãããšãããã®ã§ããã 圌ãã¯äžäœäœãèããŠããã®ã§ããããïŒ ç§ãã¡ã¯åªããã¿ã°ä»ããšããŒãžã§ã³ãµããŒããåããçŽ æŽãããããŒãžã§ã³ç®¡çã·ã¹ãã ãæã£ãŠããŸãããGo äœæè ã¯ãããç¡èŠããŠãœãŒã¹ã³ãŒããã³ããŒããã ãã§ãã
ç¿è¿å¹³ããã®æåçãªè·ç©
ç§ã®æèŠã§ã¯ãGo 㯠C ããã£ãšäœ¿ã£ãŠãã人ãã¡ãšãæ°ããããšã詊ããããªã人ãã¡ã«ãã£ãŠéçºãããŸããã ãã®èšèªã¯ã远å ã®ãã€ãŒã«ãåãã C ãšããŠèšè¿°ããããšãã§ããŸã(ãªãªãžãã«ã: ïŒã 䞊ååŠçã®ãµããŒã (ã¡ãªã¿ã«ãããã¯çŽ æŽãããããšã§ã) ãé€ããŠãæ°ããã¢ã€ãã¢ã¯ãããŸããããããã¯æ®å¿µã§ãã ãããããŠäœ¿ãããäžèªç±ãªèšèªã§åªããäžŠåæ§ãåããŠããŸãã
ãã XNUMX ã€ã®åä»ãªåé¡ã¯ãGo ãæç¶ãåèšèª (C ã®éããªææã®ãããªãã®) ã§ããããšã§ãã çµå±ãå€é¢šã§æä»£é ãã«æããæç¶ãåã¹ã¿ã€ã«ã§ã³ãŒããæžãããšã«ãªããŸãã ãªããžã§ã¯ãæåããã°ã©ãã³ã°ãç¹å¹è¬ã§ã¯ãªãããšã¯æ¿ç¥ããŠããŸããã詳现ãåã«æœè±¡åããã«ãã»ã«åãæäŸã§ããã°çŽ æŽããããšæããŸãã
èªåèªèº«ã®å©çã®ããã®ã·ã³ãã«ã
Go ã¯ã·ã³ãã«ã«ãªãããã«èšèšãããŠããããã®ç®æšã¯éæã§ããŠããŸãã ããã¯ãå€ãèšèªããã³ãã¬ãŒããšããŠäœ¿çšããŠã匱ãããã°ã©ããŒåãã«æžãããŸããã ç°¡åãªäœæ¥ãè¡ãããã®ã·ã³ãã«ãªããŒã«ãä»å±ããŠããŸãã èªã¿ãããã䜿ããããã§ãã
ããã¯éåžžã«åé·ã§å°è±¡ã«æ®ãããè³¢æãªããã°ã©ããŒã«ãšã£ãŠã¯å¥œãŸãããããŸããã
æè¬ ç·šéçš
åºæïŒ habr.com
