8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

日本情報クリエイト EngineersAdvent Calendar 2016

Day 8

初めてのGo言語

Last updated at Posted at 2016-12-07

※ 玄人の方々には目に毒ですので、ぜひ見ないであげてください。

何やろうかな、

特に何のネタもないな。

暇つぶしにGo言語ってのをやってみようっと。
(検索するときは「go」で検索してもポケモンGoばかり出てきます。「言語」や「プログラム」というワードと一緒に検索してください。)

先ずは、説明を読む。

http://golang.jp/go_spec
3割読む...、まあやってみます!

インストール

https://golang.org/dl/
ここから落としてきて、インストールすれば良い。

試すだけなら、
http://ideone.com/
などのサイトでできますね。

とりあえず、「hello world」

hello.go
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言語は並列処理が得意らしいので、下手くそなりにやってみました。

futsu.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(キュー)です。入れたものから順番に取り出します。

pararel.go
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/

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?