ãã¡ã€ã«ã®ã¡ãŒã«ã¢ãã¬ã¹ã眮æããŠã¿ãã
æ¬é£èŒã¯ã仿³šç®ãéããŠããGoèšèªã«ã€ããŠãããæ¥œããåŠã¹ãé£èŒã§ããäºåç®ã®ä»åã¯ãGoèšèªã®å¶åŸ¡æ§æã«ã€ããŠåŠã³ãŸãããããã®å®çšäŸãšããŠããã¡ã€ã«äžèЧãåæããŠãHTMLãã¡ã€ã«ã«æžãããŠããã¡ãŒã«ã¢ãã¬ã¹ã眮æããããã°ã©ã ãäœã£ãŠã¿ãŸãããã
Goèšèªã§ãã¡ã€ã«ã®äžèЧãååŸããæ¹æ³
æåã«Goèšèªã§ãã¡ã€ã«ã®äžèЧãååŸããæ¹æ³ãåŠã³ãŸãããããã®ããã«ã¯ãpath/filepathããã±ãŒãžã«ããGlob颿°ãå©çšããŸããäŸãã°ãããã°ã©ã ãšåããã£ã¬ã¯ããªã«ãããã¡ã€ã«äžèЧã衚瀺ããããã°ã©ã ã¯ã以äžã®ããã«ãªããŸãã
package main
import (
"fmt"
"path/filepath"
)
func main() {
// ãã¡ã€ã«äžèЧãåŸã --- (*1)
files, _ := filepath.Glob("*")
// ãã¡ã€ã«ãäžã€ãã€è¡šç€ºãã --- (*2)
for i, name := range files {
fmt.Println(i, "=", name)
}
}
äžèšã®ããã°ã©ã ããglob.goããšããååã§ä¿åããŸãããããŠãã³ãã³ãã©ã€ã³ãã以äžã®ããã«å ¥åããŠå®è¡ããŸãã
go run glob.go
ãããšãã«ã¬ã³ããã£ã¬ã¯ããªã«ãããã¡ã€ã«ãã¹ãŠã以äžã®ããã«è¡šç€ºããŸãã
0 = glob.go
1 = if.go
2 = ...
ããã°ã©ã ã確èªããŠã¿ãŸããããããã°ã©ã ã®(ïŒ1)ã®éšåã§ã¯Glob颿°ãå©çšããŠãã¡ã€ã«ã®äžèЧãåæããŸããGoèšèªã§ã¯ã颿°ãè€æ°ã®å€ãè¿ãããšãã§ããŸãããã®ãããGlob颿°ã®å€ãåãã巊蟺ã§ã¯ããfilesããšã_ãã®äºã€ã倿°ãæå®ããŠããŸãããªããGoèšèªã§ã_ããæå®ãããšãäžèŠãªã®ã§æšãŠãããšãæå³ããŸããå®éãGlob颿°ã®ç¬¬äžæ»ãå€ã«ã¯ãã¡ã€ã«ã®äžèЧãæååã®ã¹ã©ã€ã¹(é åã®ãããªãã®)ã§åŸãããŸãããããŠãç¬¬äºæ»ãå€ã«ã¯äœããšã©ãŒãèµ·ãããšãããã®ãšã©ãŒå 容ãå ¥ãããšã«ãªã£ãŠããŸãã
ãããŠãããã°ã©ã ã®(ïŒ2)ã®éšåã§ã¯ããã¡ã€ã«ã®äžã€ãã€ã«ã€ããŠç¹°ãè¿ã衚瀺åŠçãè¡ããŸãããã®ã¹ã©ã€ã¹ã«å¯ŸããŠç¹°ãè¿ãåŠçãè¡ãå Žåã«ã¯ãfor ... range ... æ§æãèšè¿°ããŸããç¹°ãè¿ãæ§æã®äžã§ã¯ãç¹°ãè¿ãåæ°ã衚ã倿°iãšãå®éã®ãã¡ã€ã«ånameã®äºã€ãç»é¢ã«åºåããŠããŸãã
Goèšèªã®å¶åŸ¡æ§æã«ã€ããŠ
ããŠãä»åã¯ãGoèšèªã®å¶åŸ¡æ§æã®äœ¿ãæ¹ããã¹ã¿ãŒããŸãããããããããå¶åŸ¡æ§æãšã¯ãããã°ã©ãã³ã°èšèªã«ãããŠéèŠãªåããããæ§æã§ããããã¯ãæ¡ä»¶åå²ãç¹°ãè¿ããè¡ãæ§æã®ç·ç§°ã§ããåºæ¬çã«ãããã°ã©ã ã¯äžããäžã«å®è¡ããŸãããå¶åŸ¡æ§æã䜿ãããšã§ãåŠçãåå²ããããåãåŠçãç¹°ãè¿ãããããããšãã§ããŸãã
ifæ§æã«ã€ããŠ
Goèšèªã®æ¡ä»¶å岿§æã§ããIfã¯ã次ã®ããã«èšè¿°ããŸãããã®ãšããelse以äžã¯çç¥ããããšãã§ããŸãã
[æžåŒ] æ¡ä»¶åå² if
if æ¡ä»¶åŒ {
// æ¡ä»¶ãçã®æã®åŠç
} else {
// æ¡ä»¶ãåœã®æã®åŠç
}
äŸãã°ã倿°aãšbã®ã©ã¡ãã倧ãããã調ã¹ãããã°ã©ã ã¯ã以äžã®ããã«ãªããŸãã
package main
import "fmt"
func main() {
a := 40
b := 30
if a <= b {
fmt.Println("a <= b")
} else {
fmt.Println("a > b")
}
}
-

ifã«ããæ¡ä»¶åå²ã§å€æ°aãšå€æ°bã®å€§ãããæ¯èŒããæ¡ä»¶ã«åã£ãåºåãè¡ã£ãŠãã
ãŸããGoèšèªãããèšè¿°æ¹æ³ãšããŠãifã®æ¡ä»¶åŒã®åã«åæãæå®ããããšãã§ããããã«ãªã£ãŠããŸããããã«ãããifæã®æ¡ä»¶ã説æãããããªå€æ°ã®æå®ãªã©ãè¡ãããšãã§ããŸãã
if limit := 100; n > limit {
// limitã100è¶
ã®ãšãã®åŠçãããã«èšè¿°
}
foræ§æã«ã€ããŠ
ç¶ããŠãç¹°ãè¿ãæ§æã®foræ§æã確èªããŠã¿ãŸããããforæ§æã®æžåŒã¯ã次ã®ããã«ãªã£ãŠããŸãã
[æžåŒ] for æ§æ
for åæåæ; æ¡ä»¶åŒ; å¢å æ {
// æ¡ä»¶åŒãçã®éãããå®è¡
}
[æžåŒ] for æ§æ (ç¯å²ãç¹°ãè¿ãå Žå)
for ã€ã³ããã¯ã¹, å€ := range é
åãªã© {
// æ¡ä»¶åŒãçã®éãããå®è¡
}
[æžåŒ] for æ§æ (ä»ã®èšèªã®whileã«çžåœ)
for æ¡ä»¶åŒ {
// æ¡ä»¶åŒãçã®éãããå®è¡
}
æžãæ¹ãäžçš®é¡ããã®ã§ãã¡ãã£ãšè€éã«èŠãããããããŸããããããã»ã©é£ãããã®ã§ã¯ãããŸããã以äžã®å®éã®ããã°ã©ã ã確èªããŠã¿ãŸãããã
package main
import ("fmt")
func main() {
// 10åã®ç¹°ãè¿ã--- (*1)
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// é
åãç¹°ãè¿ã --- (*2)
a := [10]int{0,1,2,3,4,5,6,7,8,9}
for i, value := range a {
fmt.Println(i, ":", value)
}
// ä»ã®èšèªã®whileã«çžåœããç¹°ãè¿ã --- (*3)
b := 0
for b < 10 {
fmt.Println(b)
b++
}
}
ããããã0ãã9ãŸã§ã®æ°åã衚瀺ããã ãã®ããã°ã©ã ã§ãããå®éã®foræ§æã®äœ¿ãæ¹ãåãããã®ã«ãªã£ãŠããŸãã(ïŒ1)ã¯åçŽãª10åã®ç¹°ãè¿ããèšè¿°ãããã®ã(ïŒ2)ã¯æåã«é åãå®çŸ©ããŠããã®é åã®å 容ãé ã«è¡šç€ºãããã®ã(ïŒ3)ã¯ä»ã®èšèªã®whileã«çžåœããäœ¿ãæ¹ã§ãæ¡ä»¶åŒãçã®éç¹°ãè¿ãå®è¡ãããšãããã®ã«ãªã£ãŠããŸãã
è€æ°ãã¡ã€ã«ã«æžãããŠããã¡ãŒã«ã¢ãã¬ã¹ã眮æããŠã¿ãã
ãããŸã§ã®éšåã§ãGoèšèªã®å¶åŸ¡æ§æã®åºæ¬çãªäœ¿ãæ¹ãåãã£ããšããã§ãããå®çšçãªããã°ã©ã ãäœã£ãŠã¿ãŸãããã以äžã¯ãã«ã¬ã³ããã£ã¬ã¯ããªã«ããHTMLãã¡ã€ã«ãããŸãªãå·¡åããŠããã®äžã«æžãããŠãããhoge@example.comããšããã¡ãŒã«ã¢ãã¬ã¹ããfuga@example.comãã«æåå眮æãããšããããã°ã©ã ã§ãã
package main
import (
"fmt"
"io/ioutil"
"strings"
"path/filepath"
)
func main() {
// HTMLãã¡ã€ã«äžèЧãåŸã --- (*1)
files, _ := filepath.Glob("*.html")
// ãã¡ã€ã«ãäžã€ãã€åŠç --- (*2)
for _, fname := range files {
fileReplace(fname, "hoge@example.com", "fuga@example.com")
}
}
// ãã¡ã€ã«ã®äžã®srcãdstã«çœ®æãã颿° --- (*3)
func fileReplace(fname, src, dst string) {
// ãã¡ã€ã«ãäžæ¬ã§èªã --- (*4)
bytes, _ := ioutil.ReadFile(fname)
// æåå眮æ --- (*5)
lines := strings.Replace(string(bytes), src, dst, -1)
// ãã¡ã€ã«ãžæžã蟌ã --- (*6)
result := []byte(lines)
ioutil.WriteFile(fname, []byte(result), 0666)
fmt.Println("ok:", fname)
}
äžèšã®ããã°ã©ã ããreplace.goããšããååã§ä¿åããŸãããããŠã以äžã®ã³ãã³ããå®è¡ãããšããã°ã©ã ãå®è¡ã§ããŸãã
go run replace.go
ããã°ã©ã ãå®è¡ãããšãã«ã¬ã³ããã£ã¬ã¯ããªã«ããHTMLãã¡ã€ã«ããã¹ãŠã«å¯ŸããŠããhoge@example.comãããfuga@example.comããžã®çœ®æãè¡ããŸãã
ããã°ã©ã ã確èªããŠã¿ãŸãããã(ïŒ1)ã®éšåã§ã¯HTMLãã¡ã€ã«ã®äžèЧãåŸãŸãããããŠã(ïŒ2)ã®éšåã§åæãããã¡ã€ã«ãäžã€ãã€åŠçããŸãã(ïŒ3)ã®éšåã§ã¯ãã¡ã€ã«fnameã®äžã®ããã¹ãsrcãdstã«çœ®æãã颿°ãå®çŸ©ããŸãã(ïŒ4)ã®éšåã§ã¯ããã¡ã€ã«ãäžæ¬ã§èªã¿èŸŒã¿ãŸãããã ããèªã¿èŸŒãã ããŒã¿ã¯ãã€ãé åã®å([]byte)ã§ãããããæååã«å€æããã«ã¯ããstring(byteé å)ãã®ããã«èšè¿°ããŸãã(ïŒ5)ã®éšåã§ã¯ãReplace颿°ã䜿ã£ãŠæåå眮æãè¡ããŸãã(ïŒ6)ã®éšåã§ã¯ãã¡ã€ã«ãžæžã蟌ã¿ãŸãããã¡ã€ã«ãžã®æžã蟌ãå ŽåãããŒã¿ã¯byteé åã§ããå¿ èŠãããããã倿ããåŸWriteFile颿°ãçšããŠãã¡ã€ã«ãžä¿åããŸãã
ãŸãšã
ä»åã¯ãGoèšèªã®å¶åŸ¡æ§æã«ã€ããŠãæãäžããŠã¿ãŸãããæè»œã«å¶åŸ¡æ§æãèšè¿°ã§ããããšãåãããŸããããŸããå©çšäŸãšããŠãå®éã«ç°¡åã«ãã¡ã€ã«ãåæããŠãåŠçãè¡ãããã°ã©ã ã玹ä»ããŸãããå¶åŸ¡æ§æã¯ãããã°ã©ãã³ã°ã®åºæ¬äžã®åºæ¬ããã£ããäœ¿ãæ¹ãèŠããŠãããŸãããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠããã




