※ 玄人の方々には目に毒ですので、ぜひ見ないであげてください。
何やろうかな、
特に何のネタもないな。
暇つぶしにGo言語ってのをやってみようっと。
(検索するときは「go」で検索してもポケモンGoばかり出てきます。「言語」や「プログラム」というワードと一緒に検索してください。)
先ずは、説明を読む。
http://golang.jp/go_spec
3割読む...、まあやってみます!
インストール
https://golang.org/dl/
ここから落としてきて、インストールすれば良い。
試すだけなら、
http://ideone.com/
などのサイトでできますね。
とりあえず、「hello world」
package main
import "fmt"
func main() {
fmt.Printf("hello, world!\n")
}
go run hello.go
を実行、
Hello, world!
ちゃんと表示されたので、インストールもちゃんとできている事が確認できました。
少し気になったこと
- セミコロンはほとんど不要(自動でつくそうです。)
- 括弧「(」、「)」もほとんど不要
- 「:=」←何これ?、初期値を宣言するときに使うみたいです。 var x = 0 → x := 0
基本の書き方
if
if x > 0 {
}
for
for i := 0; i < 10; i++ {
}
m := map[int]string{1:"逃げ恥", 2:"校閲", 3:"ダヴィンチ"}
for key,value := range m { // keyが不要な場合は「_」
fmt.Printf("%d位 : %s\n", key, value)
}
1位 : 逃げ恥
2位 : 校閲
3位 : ダヴィンチ
switch
x := 73
switch {
case 80 <= x && x <= 100:
fmt.Printf("優\n")
case 70 <= x && x < 80:
fmt.Printf("良\n")
case 60 <= x && x < 70:
fmt.Printf("可\n")
default:
fmt.Printf("不可\n")
}
良
並列処理がしたい!
基本的な、使い方はなんとなくわかってきました、
Go言語は並列処理が得意らしいので、下手くそなりにやってみました。
package main
import (
"fmt"
"time"
)
func main() {
for i := 1; i <= 3; i++ {
time.Sleep(time.Duration(i) * time.Second)
fmt.Printf("私待つわ%d号\n", i)
}
}
これだと、1+2+3 = 6秒かかります。
これを並列処理で実行できるように書き換えます。
goroutineとchannelというのを利用して書くみたいです。
・goroutineは go [関数] と使う。(goto文みたいな感じですかね?)
・channelとはgoroutine間でメッセージパッシングするもの。
また、チャネルはFIFO(キュー)です。入れたものから順番に取り出します。
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan int)
for i := 1; i <= 3; i++ {
go waitTime(c, i)
}
<-c
<-c
<-c
}
func waitTime (c chan int, i int) {
time.Sleep(time.Duration(i) * time.Second)
fmt.Printf("私待つわ%d号\n", i)
c <- i
}
c <- t
でchannelに送信して、
<-c
でchannelから受信してます。これを書かないと受信を待たないので、何も表示されません。
これだと、並列で動くので3秒で完了します。
まとめ
普段PHPがメインなので、並列処理が羨ましいと思います。
もっと勉強して使ってみたいです。
# 参考サイト
参考サイト:http://golang.jp/