ããæ°ãæéãç§ã¯å®è£
ã« Go ã䜿çšããŠããŸããã
匱ãããã°ã©ããŒåãã«èšèšãããŠããŸãã?
Go ã¯éåžžã«ç°¡åã«åŠã¶ããšãã§ããã®ã§ãå°å
¥ã«äžæ©ããã£ãã»ã©ã§ããã®åŸã¯ãã§ã«çç£çã«ã³ãŒãã£ã³ã°ã§ããããã«ãªããŸããã ç§ã Go ãåŠã¶ããã«äœ¿çšããæ¬ã¯æ¬¡ã®ãšããã§ã
Googleã¯ãGoã®ã·ã³ãã«ããã»ãŒã«ã¹ãã€ã³ãã§ããããã®èšèªã¯å€§èŠæš¡ãªããŒã ã§æ倧éã®çç£æ§ãçºæ®ã§ããããã«èšèšãããŠãããšäž»åŒµããŠããããç§ã¯ãããçã£ãŠããã æ¬ èœããŠããæ©èœããŸãã¯é床ã«è©³çŽ°ãªæ©èœããããŸãã ããã¯ãã¹ãŠãéçºè ã«å¯Ÿããä¿¡é Œã®æ¬ åŠãåå ã§ãããéçºè ã¯äœãæ£ããè¡ãããšãã§ããªããšããæã蟌ã¿ãåå ã§ãã ãã®åçŽããžã®æ¬²æ±ã¯ãèšèªã®èšèšè ã«ããæèçãªæ±ºå®ã§ããããªããããå¿ èŠãªã®ããå®å šã«ç解ããã«ã¯ãéçºè ã®åæ©ãšãéçºè ã Go ã§äœãéæããããšããŠããã®ããç解ããå¿ èŠããããŸãã
ã§ã¯ããªãããã»ã©ã·ã³ãã«ã«ãªã£ãã®ã§ãããã? ããã«ããã€ãã®åŒçšããããŸã
ããã§éèŠãªç¹ã¯ãããã°ã©ã㌠(çŽã:
Google ç€Ÿå¡ ïŒã¯ç 究è ã§ã¯ãããŸããã 圌ãã¯éåžžãéåžžã«è¥ãããããã 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 ãæ¹åããããã®äžè¬çãªææ¡ã¯ãæ±çšæ§ã§ãã ããã¯å°ãªããšãããã¹ãŠã®ããŒã¿åããµããŒãããããã«ã³ãŒãã®äžå¿ èŠãªã³ããŒãé¿ããã®ã«åœ¹ç«ã¡ãŸãã ããšãã°ãæŽæ°ã®ãªã¹ããåèšããé¢æ°ã¯ãåæŽæ°åã®åºæ¬é¢æ°ãã³ããŒã¢ã³ãããŒã¹ããã以å€ã®æ¹æ³ã§å®è£ ã§ããŸããã
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{}
- è¶çªã§ããããã®èšèªã§ã¯å
¥åãåé¿ããããã«ã®ã¿å¿
èŠã§ãã ããã¯ç©ºã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ããããã¹ãŠã®ã¿ã€ãããããå®è£
ããŠããããã誰ã§ãå®å
šã«èªç±ã«äœ¿çšã§ããŸãã ãã®ã¹ã¿ã€ã«ã®ããã°ã©ãã³ã°ã¯éåžžã«éãã§ãããããã ãã§ã¯ãããŸããã ãã®ãããªã¢ã¯ãããã£ãã¯ãªæã«ã¯ãã©ã³ã¿ã€ã ãªãã¬ã¯ã·ã§ã³ã䜿çšããå¿
èŠããããŸãã ããã»ãã€ã¯ã§ããã圌ã®ã¬ããŒãã®XNUMXã€ã§è¿°ã¹ãããã«ããããæªçšããå人ã¯å¥œãã§ã¯ãããŸããã
ããã¯åŒ·åãªããŒã«ã§ããããã䜿çšã«ã¯æ³šæãå¿ èŠã§ãã å³å¯ã«å¿ èŠãªå Žåãé€ããããã¯é¿ããã¹ãã§ãã
ç§ãªãããã®ãã³ã»ã³ã¹ã®ä»£ããã« D ãã³ãã¬ãŒããæ¡çšããŸãã ã©ãããŠãããªããšãèšãããã ãã interface{}
èªã¿ããããªã£ãã®ãããããã¯ã¿ã€ãã»ãŒãã«ãªã£ãã®ã?
äŸåé¢ä¿ç®¡çã®åé¡ç¹
Go ã«ã¯ã人æ°ã®ãããã¹ãã£ã³ã° ãããã€ããŒäžã«æ§ç¯ãããäŸåé¢ä¿ã·ã¹ãã ãçµã¿èŸŒãŸããŠããŸãã
ãã®åé¡ã®è§£æ±ºçã«ã€ããŠè³ªåããåŸãGo éçºããŒã ã¯
ç¿è¿å¹³ããã®æåçãªè·ç©
ç§ã®æèŠã§ã¯ãGo 㯠C ããã£ãšäœ¿ã£ãŠãã人ãã¡ãšãæ°ããããšãè©Šããããªã人ãã¡ã«ãã£ãŠéçºãããŸããã ãã®èšèªã¯ãè¿œå ã®ãã€ãŒã«ãåãã C ãšããŠèšè¿°ããããšãã§ããŸã(ãªãªãžãã«ã:
ãã XNUMX ã€ã®åä»ãªåé¡ã¯ãGo ãæç¶ãåèšèª (C ã®éããªææã®ãããªãã®) ã§ããããšã§ãã çµå±ãå€é¢šã§æ代é ãã«æããæç¶ãåã¹ã¿ã€ã«ã§ã³ãŒããæžãããšã«ãªããŸãã ãªããžã§ã¯ãæåããã°ã©ãã³ã°ãç¹å¹è¬ã§ã¯ãªãããšã¯æ¿ç¥ããŠããŸããã詳现ãåã«æœè±¡åããã«ãã»ã«åãæäŸã§ããã°çŽ æŽããããšæããŸãã
èªåèªèº«ã®å©çã®ããã®ã·ã³ãã«ã
Go ã¯ã·ã³ãã«ã«ãªãããã«èšèšãããŠããããã®ç®æšã¯éæã§ããŠããŸãã ããã¯ãå€ãèšèªããã³ãã¬ãŒããšããŠäœ¿çšããŠã匱ãããã°ã©ããŒåãã«æžãããŸããã ç°¡åãªäœæ¥ãè¡ãããã®ã·ã³ãã«ãªããŒã«ãä»å±ããŠããŸãã èªã¿ãããã䜿ããããã§ãã
ããã¯éåžžã«åé·ã§å°è±¡ã«æ®ãããè³¢æãªããã°ã©ããŒã«ãšã£ãŠã¯å¥œãŸãããããŸããã
æè¬
åºæïŒ habr.com