SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
JavaScript経験者のためのGo言語入門
shoarai
_shoarai
アジェンダ
このスライドの目的
Goの特徴
Goの言語仕様
Goツール
まとめ
2
このスライドの目的
JavaScript経験者がGoを書くきっかけなること
3
アジェンダ
このスライドの目的
Goの特徴
Goの言語仕様
Goツール
まとめ
4
Goの特徴
言語仕様がシンプル
静的型付け
処理速度が速い
クロスコンパイルが可能
並行処理が可能
5
Goは言語仕様がシンプル
Go
ループはforのみ、whileがない
ifの{}が省略できない
forやifの()がいらない
三項演算子がない            など
JavaScript
ECMAScript6、それ以前、AltJSなど言語仕様が多種多様...
ループ1つとっても、for、forEach、for in、$.each、$.map ... orz
6
Goが提供していないもの
他の多くの言語で提供しているものが、Goにはない
暗黙の数値変換
コンストラクタ
デストラクタ
演算子オーバーロード
デフォルトのパラメータ値
継承
ジェネリクス
例外
マクロ
関数アノテーション
スレッドローカルな領域
7
Goは静的型付け
Go
静的型付けであり、コンパイル時に型をチェックする。
JavaScript
動的型付けであり、実行しないと型がチェックできない。
8
Goは処理速度が速い
Go
バイナリにコンパイルされるため、処理速度が速い。
JavaScript
インタプリタ言語なので、比較的遅い。
9
クロスコンパイルが可能
Go
OSとCPUアーキテクチャを指定して、クロスコンパイルできる。
JavaScript
Webブラウザがあれば動く。
10
並行処理が可能
Go
go func() と書くだけで、関数funcが別スレッドで動く。
JavaScript
Web Workersで可能。
11
つまりGoは...
学習・デバッグ・速度向上・環境対応にかかる時間を減らし、
何を創るか?に集中できる。
12
アジェンダ
このスライドの目的
Goの特徴
Goの言語仕様
Goツール
まとめ
13
Goの言語仕様1/3
以下の内容について説明します。
Setup
Hello World
パッケージと関数
変数宣言
if
ループ
switch
14
Setup
インストール
公式サイトからインストールできる。
あるいは、Homebrewからもインストールできる
$ brew install go
環境設定
$ export GOROOT=$HOME/go
$ export PATH=$PATH:$GOROOT/bin
15
Hello World
helloworld.go
// このファイルが属するパッケージ名
package main
// 利用するパッケージ名
import "fmt"
// mainパッケージのmain関数からプログラムが実行される
func main() {
fmt.Println("Hello, 世界")
}
実行
$ go run helloworld.go
> Hello, 世界
16
パッケージと関数
Go
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
JavaScript
(function(main, win) {
main.main = function() {
win.alert("Hello, 世界");
};
}(main | main = {}, window));
17
変数宣言
Go
// どちらもsは、空文字
s := "" // 初期値から型が推測される
var s string // 型のゼロ値が設定される
// 以下のようにも書ける
var s = ""
var s string = ""
JavaScript
let s = ""; // ES6
var s = ""; // 関数ブロックスコープ
18
if
Go
x := 1
if x > 0 {
// ...
} else x < 0 {
// ...
}
JavaScript
var x = 1;
if (x > 0) {
// ...
} else (x < 0) {
// ...
}
19
ループ
Go
strs := {"あ", "い"}
for i := 0; i < len(strs); i++ {
// ...
}
JavaScript
var strs = ["あ", "い"];
for (var i = 0; i < strs.length; i++) {
// ...
}
20
ループ(range)
Go
strs := {"あ", "い"}
for i, s := range strs {
// ...
}
JavaScript
var strs = ["あ", "い"];
strs.forEach(function(s, i) {
// ...
});
21
ループ(条件のみ)
Go
for count < 10 {
// ...
}
// 無限ループ
for {
// ...
}
JavaScript
while (count < 10) {
// ...
}
// 無限ループ
while (true) {
// ...
} 22
switch
Go
x := 0
switch x {
case 0:
num = 1
// breakは不要
case 1:
num = 3
default:
num = -1
}
return num // 1
23
ここまでで
Goは基本的な構文が、少ない単語で書けます。
()や;は不要、ループはforのみ。
whileも、憎きdo whileもありません。
24
Goの言語仕様2/3
以下の内容について説明します。
データ型
コンポジット型
関数宣言
遅延関数呼び出し
エラー処理
パニック
25
データ型
Go JavaScript
整数 int, int8, int6 number
正の整数 uint, uint8, uint16, uint32, uint64 number
ポインタ uintptr -
浮動小数 float32, float64 number
複素数 complex64, complex128 -
ブーリアン bool bool
バイト byte -
文字 rune string
文字列 string string
エラー error - 26
コンポジット型(配列・マップ)
Go
a := [3]int{1, 2, 3} // 配列(長さが固定)
b:= []int{0, 1, 2, 3, 4, 5} // スライス(長さが可変)
c := map[string]int { // 文字列からintへのマップ
"a": 1,
"b": 2,
}
JavaScript
var a = [1, 2, 3]; // ※長さが固定はない
var b = [1, 2, 3, 4, 5];
var c = { // マップをオブジェクトで表現
"a": 1,
"b": 2
}; 27
コンポジット型(構造体)
Go
// 構造体型の宣言
type Employee struct {
ID int
Name string
}
// 構造体変数の宣言
alice := Employee{0, "alice"}
JavaScript
// 構造体をオブジェクトで表現
var alice = {
ID: 0,
Name: "alice"
};
28
関数宣言
Go
// 引数と戻り値それぞれの型を宣言する
func hypot(x, y float64) float64 {
return math.Sqrt(x*x, y*y)
}
fmt.Println(hypot(3, 4)) // "5"
JavaScript
function hypot(x, y) {
return math.Sqrt(x*x, y*y);
}
console.log(hypot(3, 4)); // "5"
29
関数宣言(可変個引数)
Go
func sum(vals ...int) int {
total := 0
for _, val := range vals {
total += val
}
return total
}
JavaScript
// 可変個引数はES6のみ
function sum(...vals) {
var total = 0
vals.forEach(function(val, i) {
total += val;
});
return total;
}
30
遅延関数呼び出し
正常な完了でも異常な完了でも、関数の最後に到達するまで関数
の呼び出しが遅延される。
Go
func lookup(key string) int {
mu.Lock()
// lookup関数が完了する直前に呼ばれる
defer mu.Unlock()
// ...
return m[key]
}
Javascript
なし
31
エラー処理
Go
Goでは、関数ごとにエラー処理を行う。
resp, err := html.parse(text)
if err != nil {
return err
}
JavaScript
tryで複数の関数のエラーをまとめて扱えるため、エラーと関数の
関連がわかりにくい。
try {
parseHtml(text);
parseJson(json);
} catch (err) {
throw err;
} 32
パニック
パニックとは、例えば境界外への配列アクセス、nilポインタによ
る参照など、実行時の誤りが検出された時に発生する。
Go
func Reset(x *Buffer) {
if x == null {
panic("x is nill")
}
x.element = x
}
JavaScript
なし
33
Go言語の仕様3/3
メソッド
インタフェース
並行処理
34
メソッド宣言
Go
type Point struct{ X, Y float64 }
func (p *Point) ScaleBy(factor float64) {
p.X *= factor
p.Y *= factor
}
JavaScript
function Point(x, y) {
this.X = x;
this.Y = y;
}
Point.prototype.ScaleBy= function(factor) {
this.X *= factor;
this.Y *= factor;
};
35
メソッド呼び出し
Go
p := Point{1, 2} // 初期化
p.ScaleBy(10) // X=10, Y=20
JavaScript
var p = new Point(1, 2);// 初期化
p.ScaleBy(10); // X=10, Y=20
36
インタフェース
Goでは、インタフェースが持つ関数と同じ名前・同じ型の関数が
あれば、暗黙的にそのインタフェースの振る舞い要件を満たす。
type Getter interface {
GetText() string
}
type Text struct {
text string
}
func (t Text) GetText() string {
return t.text
}
// Text型はGetter型の変数に代入できる
var getter Getter
getter = Text{"test"}
fmt.Println(getter.GetText()) // "test"
37
並行処理
Goには、並行処理の仕組みとしてゴルーチンとチャネルがあ
る。
38
並行処理(ゴルーチン)
Goでは、並行に実行される個々の動作をゴルーチン、
main関数を呼び出すゴルーチンをメインゴルーチンといいます。
HTTP Server
// メインゴルーチンがmain関数を呼び出す
func main() {
l, _ := net.Listen("tcp", "localhost:8000")
for {
// クライアントの接続要求を待つ
conn, _ := l.Accept()
// メインゴルーチンが新たなゴルーチンを生成する
go handleConn(conn)
}
}
func handleConn(c net.Conn) {
// 接続ごとの処理を行う...
}
39
並行処理(チャネル)
1つのゴルーチンが他のゴルーチンへ値を送ることができる通信の
仕組みをチャネルといいます。
func main() {
// int型のチャネルを作成する
ch := make(chan int)
// 生成されたゴルーチンはチャネルに値を送信し続ける
go func() {
for x := 0; ; x++ {
ch <- x
}
}()
// メインゴルーチンはチャネルの値を受信し、出力し続ける
for {
fmt.Printf(<-ch) // 0123456...
}
}
40
アジェンダ
このスライドの目的
Goの特徴
Goの言語仕様
Goツール
まとめ
41
Goの標準ツール
ドキュメンテーション
コンパイル
コードの整形
テスト
ベンチマーク        など
42
ドキュメンテーション
# 例:timeパッケージのドキュメントを表示する
$ go doc time
> package time // import "time"
>
> Package time provides functionality for measuring and display
>
> The calendrical calculations always assume a Gregorian calend
>
> const ANSIC = "Mon Jan _2 15:04:05 2006" ...
> const Nanosecond Duration = 1 ...
> ...
43
コンパイル
# 実行ファイルを生成する
$ go build helloworld.go
# 実行する
$ ./helloworld
> Hello, 世界
44
クロスコンパイル
# Linux、32ビット用の実行ファイルを生成する
$ GOOS=linux GOARCH=386 go build helloworld.go
# 実行する
$ ./helloworld
> Hello, 世界
45
コードの整形
package main
import "fmt"
func main () {
fmt.Println("Hello, 世界");
}
↓        ↓
$ go fmt main.go
↓  整形  ↓
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
46
テスト
package word
// テストに使用するパッケージ
import "testing"
// Test...から始める
func TestIsPalindrome(t *testing.T) {
// 回文チェックの関数
if !IsPalindrome("kayak") {
// エラー報告
t.Error(`IsPalindrome("kayak") = false`)
}
}
実行結果
$ go test
> PASS
> ok gopl.io/ch11/word2 2.430s
合計の処理時間:2.430 秒 47
ベンチマーク
func BenchmarkIsPalindrome(b *testing.B) {
for i := 0; i < b.N; i++ {
IsPalindrome("kayak")
}
}
実行結果
$ go test -bench=.
> BenchmarkIsPalindrome-4 3000000 605 ns/op
> PASS
> ok gopl.io/ch11/word2 2.430s
使用するコア数:4(設定可能)
実行回数:300,000(処理時間が安定する回数が推定される)
個々の処理時間:605 ナノ秒
合計の処理時間:2.430 秒
48
アジェンダ
このスライドの目的
Goの特徴
Goの言語仕様
Goツール
まとめ
49
まとめ
Goは、構文が非常にシンプルで学びやすいです。
環境構築も簡単なので、ぜひ一度動かしてみてください。
50
より詳しく
この本で、本スライドの内容がより精細に学べます。
Amazon
51

Weitere ähnliche Inhalte

Was ist angesagt?

アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~gree_tech
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Takuya Iwatsuka
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Scott Wlaschin
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術Kohsuke Yuasa
 
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -Naoki Nagazumi
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDeleteYu Yamada
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSYoshifumi Kawai
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかYoshifumi Kawai
 

Was ist angesagt? (20)

アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
Java8でRDBMS作ったよ
Java8でRDBMS作ったよJava8でRDBMS作ったよ
Java8でRDBMS作ったよ
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
 
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
やってはいけない空振りDelete
やってはいけない空振りDeleteやってはいけない空振りDelete
やってはいけない空振りDelete
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
 

Ähnlich wie JavaScript経験者のためのGo言語入門

G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweightgintenlabo
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみたina job
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみようHiroki Itô
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
Vim の話
Vim の話Vim の話
Vim の話cohama
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGParsfumokmm
 

Ähnlich wie JavaScript経験者のためのGo言語入門 (20)

Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Dsl&Builder
Dsl&BuilderDsl&Builder
Dsl&Builder
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
ggplot2をつかってみよう
ggplot2をつかってみようggplot2をつかってみよう
ggplot2をつかってみよう
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Vim の話
Vim の話Vim の話
Vim の話
 
今日からはじめるGPars
今日からはじめるGPars今日からはじめるGPars
今日からはじめるGPars
 

JavaScript経験者のためのGo言語入門