2013年02月10日

130209に #gdgkobe で #golang の発表させて頂きました。

内容は、Go言語でWebアプリの作り方です。

公式ページの Writing Web Applicationsを分かりやすく解説したつもりです。

posted by やし at 15:40 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2013年01月15日

#golang html/template: 構造体メンバにスライスがあるとき、html側でスライスの要素を指定するには?

先に答えを書くと、 indexを使います。

例えば、goファイル内で次のように構造体のメンバにスライスHotelsを定義した場合、

・goファイル

type Body struct {
	PagingInfo PagingInfo `xml:"SimpleHotelSearch>paginginfo"`
	Hotels     []Hotel    `xml:"SimpleHotelSearch>hotel"`
}

htmlファイルでは、次のように記述します。

・htmlファイル

[]Hotelsの0番目の要素は{{index .Hotels 0}}です。 // Hotels[0]と同じ意味です。

参考

text/templateパッケージのFunctions
http://golang.org/pkg/text/template/#hdr-Functions
text/templateパッケージのテストソース(indexで検索)
http://golang.org/src/pkg/text/template/exec_test.go
stackoverflow: golang html/template: how to index a slice element?
http://stackoverflow.com/questions/12701452/golang-html-template-how-to-index-a-slice-element
posted by やし at 20:22 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年12月23日

「プログラミング言語Goフレーズブック」と「基礎からわかる Go言語」を読みました。 #golang

2012/10/4発売の「プログラミング言語Goフレーズブック」(以下、フレーズブック)と 2012/11/21発売の「基礎からわかる Go言語」(以下、基礎Go)をようやく読み終えました。

続きを読む
タグ:golang
posted by やし at 15:05 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年09月06日

golangからMySQLを使うには

まえおき

今回はMacにMySQLをインストールして、golangからアクセスしてみます。

MacにMySQLをインストールする方法はググればわかるので、MySQLがインストールされているものとします。

golangからMySQLにかぎらずデータベースにアクセスするライブラリを、 すでに多くの人が作ってくれているので、そのライブラリのどれかを使わせてもらいます。 (go-wikiにいろいろあります。)

ここでは、mymysqlというライブラリを使ってmysqlにアクセスしてみます。

準備

まずは、mymysqlをインストールしましょう。

$ go get github.com/ziutek/mymysql/thrsafe
$ go get github.com/ziutek/mymysql/autorc
$ go get github.com/ziutek/mymysql/godrv

次に、mysqlを起動して

% mysql -u root -p

データベース、ユーザーを作って、パスワードを設定します。

mysql> create database mymysqltest;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on mymysqltest.* to mymysqltestuser@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> set password for mymysqltestuser@localhost = password("TestPassw9");
Query OK, 0 rows affected (0.00 sec)

サンプルを編集して実行して確認する

次にmymysqlのサンプルを編集して実行してみます。サンプルの場所は

$GOPATH/src/github.com/ziutek/mymysql/examples/simple.go

で、編集箇所は、サンプルからユーザーとデータベース名を変更しているので、

user := "mymysqltestuser"
dbname := "mymysqltest"

のように変更します。あとは、実行すると、

% go run $GOPATH/src/github.com/ziutek/mymysql/examples/simple.go
Connect to tcp:127.0.0.1:3306... OK
Drop A table if exists... OK
Create A table... OK
Insert int A... OK
Select from A...
Row: 0
 name:  ''         <nil>}
 number: 0          {<nil>}
Row: 1
 name:  '1*10= 10' []byte{0x31, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x31, 0x30}}
 number: 100        {[]byte{0x31, 0x30, 0x30}}
Row: 2
 name:  '2*10= 20' []byte{0x32, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x32, 0x30}}
 number: 200        {[]byte{0x32, 0x30, 0x30}}
Row: 3
 name:  '3*10= 30' []byte{0x33, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x33, 0x30}}
 number: 300        {[]byte{0x33, 0x30, 0x30}}
Row: 4
 name:  '4*10= 40' []byte{0x34, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x34, 0x30}}
 number: 400        {[]byte{0x34, 0x30, 0x30}}
Row: 5
 name:  ''         <nil>}
 number: 0          {<nil>}
Row: 6
 name:  '6*10= 60' []byte{0x36, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x36, 0x30}}
 number: 600        {[]byte{0x36, 0x30, 0x30}}
Row: 7
 name:  '7*10= 70' []byte{0x37, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x37, 0x30}}
 number: 700        {[]byte{0x37, 0x30, 0x30}}
Row: 8
 name:  '8*10= 80' []byte{0x38, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x38, 0x30}}
 number: 800        {[]byte{0x38, 0x30, 0x30}}
Row: 9
 name:  '9*10= 90' []byte{0x39, 0x2a, 0x31, 0x30, 0x3d, 0x20, 0x39, 0x30}}
 number: 900        {[]byte{0x39, 0x30, 0x30}}
Remove A... OK
Close connection... OK

という感じになります。db.Query("drop table A")を実行している箇所をコメントアウトして、 mysql側でselect * from A;とした結果は、

mysql> select * from A;
+----------+--------+
| name     | number |
+----------+--------+
| NULL     |   NULL |
| 1*10= 10 |    100 |
| 2*10= 20 |    200 |
| 3*10= 30 |    300 |
| 4*10= 40 |    400 |
| NULL     |   NULL |
| 6*10= 60 |    600 |
| 7*10= 70 |    700 |
| 8*10= 80 |    800 |
| 9*10= 90 |    900 |
+----------+--------+
10 rows in set (0.00 sec)

となっていたので、golangからmysqlへアクセスしていることが分かったと思います。

posted by やし at 20:54 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年09月01日

Go言語のソースファイルをVimでシンタックスハイライトするには

設定方法は$GOROOT/misc/vim/readme.txtに書かれている。

  mkdir -p $HOME/.vim/ftdetect
  mkdir -p $HOME/.vim/syntax
  mkdir -p $HOME/.vim/autoload/go
  ln -s $GOROOT/misc/vim/ftdetect/gofiletype.vim $HOME/.vim/ftdetect/
  ln -s $GOROOT/misc/vim/syntax/go.vim $HOME/.vim/syntax
  ln -s $GOROOT/misc/vim/autoload/go/complete.vim $HOME/.vim/autoload/go
  echo "syntax on" >> $HOME/.vimrc

これだけ実行すれば、シンタックスハイライトされる。

これを実行するのはめんどくさいという方のために、上のコマンドをコピーしただけですが、シェルスクリプトファイルを置きました。ダウンロードして、実行権限($chmod +x govim.sh)付けて、$./govim.shと実行してください。

コマンドが分かる人にはわかると思いますが、やってることをちょっと説明すると、ホームディレクトリに.vimディレクトリとかファイル作って、シンボリックリンク貼って、.vimrcファイルを作ってsyntax onと記述してるだけ。(すでに.vimrcファイルがある場合も追記になるので安心。)

タグ:golang
posted by やし at 20:12 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年08月27日

120825にGDGKOBEのGo言語勉強会で発表してきた

資料です。
Go言語の特徴の一つであるスライス(slice)についてです。

サンプルコード
https://github.com/kwmt/120825_GDGKOBE_GO/tree/master/example

Go Playground
http://play.golang.org/

タグ:golang
posted by やし at 00:42 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年08月09日

golangのvimのシンタックスハイライトの設定方法

golangのvimのシンタックスハイライトの設定方法は

$GOROOT/misc/vim/readme.txt

に記載あり。

またubuntuでは

「Sorry, the command is not available in this version: syntax on」

と出たので、下記を参考させてもらったら、できた。
http://www.kano4.com/105


vimでgolangのシンタックスハイライト


以上。
タグ:golang
posted by やし at 22:57 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年07月09日

golangで文字列を数値に変換するには?

与えられた文字列が数値と判断できる場合に、数値として返して欲しい時、次の関数がある。

strconvパッケージの

func ParseInt(s string, base int, bitSize int) (i int64, err error)
s:数値に変換したい文字列
base:何進数とか(10進数なら10)
bitSize:何ビットとして認識してほしいか
    (0, 8, 16, 32, 64はそれぞれint, int8, int16, int32,int64に対応)

このParseIntをラップして短くしてるのが、

func Atoi(s string) (i int, err error) {
	i64, err := ParseInt(s, 10, 0)
	return int(i64), err
}

です。ParseIntの戻り値はint64でしたが、Atoiの戻り値はintです。

使い方は、こんな感じ。

i, _ := strconv.Atoi("100")
j, _ := strconv.Atoi("200")
i = i+j  // i,jはintなので計算ができる
fmt.Printf("i=%d\n", i)
// i=300

参考

Package strconv
http://golang.org/pkg/strconv/
タグ:golang Go言語
posted by やし at 21:22 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年07月07日

golangで数値を文字列に変換するには?

import "strconv"
strNum := strconv.FormatUint(num, 10)

FormatUint関数の引数 numuint64で、10は何者かよく分からなかったけど、10進数のこと。strNumstringとなります。

2つ目の引数10が良くわかないと書いたけど、下記のコードで確かめたら10進数だとわかった。例えば、1つ目の数値を123とします。

package main

import (
	"fmt"
	"strconv"
)

func main(){
	fmt.Println("(i, strNum)")
	for i:=2; i < 37; i++ {
		strNum := strconv.FormatUint(uint64(123), i)
		fmt.Printf("(%d, %s)\n",i,strNum)
	}
}

結果、下記のようになった。

(i, strNum)
(2, 1111011)
(3, 11120)
(4, 1323)
(5, 443)
(6, 323)
(7, 234)
(8, 173)
(9, 146)
(10, 123)
(11, 102)
(12, a3)
(13, 96)
(14, 8b)
(15, 83)
(16, 7b)
(17, 74)
(18, 6f)
(19, 69)
(20, 63)
(21, 5i)
(22, 5d)
(23, 58)
(24, 53)
(25, 4n)
(26, 4j)
(27, 4f)
(28, 4b)
(29, 47)
(30, 43)
(31, 3u)
(32, 3r)
(33, 3o)
(34, 3l)
(35, 3i)
(36, 3f)

ソースにもあるけど、ii < 2またはi > 37だとpanicになります。

タグ:golang
posted by やし at 00:00 | Comment(1) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2012年07月06日

golangでかかった処理時間を計算するには?

start := time.Now();
// 処理
end := time.Now();
fmt.Printf("%f秒\n",(end.Sub(start)).Seconds())

end.Sub(start) は、end - start

Seconds()関数は、float64を返します。

タグ:golang
posted by やし at 22:02 | Comment(1) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。