ただのアニメ感想ブログ

主にアニメの感想を書いていきます。

GoLangを触ってみた#その2

さて、昨日Goを使ってクイックソートを書いてみましたが、実際に計算量がO(nlogn)になっているかを確認する為に時間を計測してみることにします。
素数を10,000から50,000まで変更させて、それぞれ5回計測した値の平均を取ります。
比較用にバブルソートも書いて同様に測定をしました。結果は以下のとおりです(単位はmsec)。

素数 10000 20000 30000 40000 50000
バブルソート 253.61 1017.46 2279.73 4065.23 6406.17
クイックソート 9.00 20.40 30.20 47.60 60.60


バブルソートは要素数10,000→20,000→40,000となるにつれて時間は約4倍になっているのでO(n^2)になっていると言って良いでしょう。
一方クイックソートは要素数10,000→20,000→40,000となるに従い、時間は2倍ちょっとになっているので、O(nlogn)になっているものと思われます。


と言うかクイックソート早いな。あんな適当に書いたコードでも結構早い。


続いて、Goを使ってAWSを操作してみます。
今回Goを勉強する理由の一つとして、AWSスクリプトで扱えるようにしたいというものがありました。
もちろんCLIPythonJavaのような他の言語でもAWSは操作できますが、Goは動作が軽いと聞いたので是非ともGoでやってみたいと思っていました。


まずAWSのパッケージを使うにはGITの導入が必要らしいので、以下のURLから入手してインストール。
https://git-scm.com/download/win


で、実際に使用する際には、

>set GOPATH=<適当なフォルダ、Goの実行フォルダで良い?>
>go get -u github.com/aws/aws-sdk-go
>go run aws.go

で実行できるっぽい。


個人的に一番ハマったのは認証部分で、Linuxだと~/.aws/credentialsにアクセスキー情報を書けば良いのですがWindowsだとどこに書けば良いのか分かりませんでした。
その後色々と調べた結果、環境変数にアクセスキー情報を書けば良いことが判明。

>set AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxx
>set AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxx

こんな感じでOK。


やり方が分かったら後はコードを書く。
使えるAPIの仕様(特に引数や戻り値)は以下のリファレンスを参照しました。
http://docs.aws.amazon.com/sdk-for-go/api/


今回作成したコードは以下の通りです。

ファイル名:aws.go
package main

import (
    "fmt"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/iam"
)

const (
)

func main() {
    svc := iam.New(session.New(), &aws.Config{})
    
    resp, error := svc.ListUsers(nil)
    if error != nil {
        panic(error)
    }
    
    fmt.Println("> Number of reservation sets: ", len(resp.Users))
    for i := 0; i < len(resp.Users); i++ {
        fmt.Println("UserNo: ", i)
        fmt.Println("UserName        : ", *(resp.Users[i].UserName))
        fmt.Println("Arn             : ", *(resp.Users[i].Arn))
        fmt.Println("CreateDate      : ", *(resp.Users[i].CreateDate))
        fmt.Println("UserId          : ", *(resp.Users[i].UserId))
        fmt.Println("Path            : ", *(resp.Users[i].Path))
    }
}


IAMでユーザ一覧を取ってくるだけの内容です。最初APIの使い方が分からず苦労しましたが、書いてしまえばとっても簡単。
実行結果は以下のとおり。

>go run aws.go
> Number of reservation sets:  1
UserNo:  0
UserName        :  TECRA
Arn             :  arn:aws:iam::<アカウントID>:user/TECRA
CreateDate      :  2016-05-04 13:19:28 +0000 UTC
UserId          :  <ユーザID>
Path            :  /


ちゃんとユーザ情報を取ってくる事ができました。


そんなわけで、今日はこれまで。
それでは、ごきげんよう。