SlideShare a Scribd company logo
1 of 8
Download to read offline
Goの文法の実例と解説
オリジナルサイト
Learn X in Y minutes
http://learnxinyminutes.com/docs/go/
オリジナルソース
learngo.go
http://learnxinyminutes.com/docs/files/learngo.go
ブロック分け
全体で約20のセクションで構成されており、順番に処理を呼び出す記述になっています。
少々長いので、いくつかのブロックに分けて「記述して実行」して行きます。
セクション一覧(ブロックは「記述して実行」する単位)
「Hello world!」
package main
import ()
func main()
「複数の引数や戻り値」
func beyondHello()
func learnMultiple(x, y int) (sum, prod int)
「様々な型」
func learnTypes()
「メモリー割り当て」
func learnMemory() (p, q *int)
「フロー制御」
func expensiveComputation() float64
func learnFlowControl()
「遅延実行」
func learnDefer() (ok bool)
「インターフェース」と「構造体」
type Stringer interface
type pair struct
func (p pair) String() string
func learnInterfaces()
「可変引数」
func learnVariadicParams(myStrings ...interface{})
「エラーハンドリング」
func learnErrorHandling()
「同時実行処理」
func inc(i int, c chan int)
func learnConcurrency()
「Webアプリケーション」
func learnWebProgramming()
func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request)
実際にやってみよう!
テキストエディターでlearngo01.goをUTF-8(BOMなし)で作成します。
「Hello world!」
learngo01.go
package main
import (
"fmt"
// m "math"
// "net/http"
// "strconv"
)
func main() {
fmt.Println("Hello world!")
//beyondHello()
}
実行する前にgo fmtコマンドでフォーマットを整形するとよいでしょう。
フォーマットの整形
~$ go fmt learngo01.go
learngo01.go
go runコマンドで実行してみましょう。
ソースの実行
~$ go run learngo01.go
Hello world!
以降、learngo01.goにコードの差分を繰り返し「記述して実行」して行きますので、差分を残
したい場合は、ファイルをコピーした後、コピーしたファイルに追記して行って下さい。
ファイルのコピー
~$ cp learngo01.go learngo02.go
~$ ls
learngo01.go learngo02.go
以降、便宜上、追加していく差分の内容を「learngo連番.go」で表示してあります。
また、資料の性質上、資料のソースをそのまま「記述して実行」するとエラーになりますの
で、その際は、
● 各関数の呼び出しがコメントアウトされているので有効にする。
● import句のパッケージ定義がコメントアウトされているので有効にする。
などを行って下さい。
「複数の引数や戻り値」
learngo02.go
func beyondHello() {
var x int
x = 3
y := 4
sum, prod := learnMultiple(x, y)
fmt.Println("sum:", sum, "prod:", prod)
// learnTypes()
}
func learnMultiple(x, y int) (sum, prod int) {
return x + y, x * y
}
「様々な型」
learngo03.go
func learnTypes() {
s := "Learn Go!"
s2 := `A "raw" string literal
can include line breaks.`
g := 'Σ'
f := 3.14195
c := 3 + 4i
var u uint = 7
var pi float32 = 22. / 7
n := byte('n')
var a4 [4]int
a3 := [...]int{3, 1, 5}
s3 := []int{4, 5, 9}
s4 := make([]int, 4)
var d2 [][]float64
bs := []byte("a slice")
// p, q := learnMemory()
// fmt.Println(*p, *q)
m := map[string]int{"three": 3, "four": 4}
m["one"] = 1
_, _, _, _, _, _, _, _, _ = s2, g, f, u, pi, n, a3, s4, bs
fmt.Println(s, c, a4, s3, d2, m)
// learnFlowControl()
}
「メモリー割り当て」
learngo04.go
func learnMemory() (p, q *int) {
p = new(int)
s := make([]int, 20)
s[3] = 7
r := -2
return &s[3], &r
}
「フロー制御」
learngo05.go
func expensiveComputation() float64 {
return m.Exp(10)
}
func learnFlowControl() {
if true {
fmt.Println("told ya")
}
if false {
// Pout.
} else {
// Gloat.
}
x := 42.0
switch x {
case 0:
case 1:
case 42:
case 43:
}
for x := 0; x < 3; x++ {
fmt.Println("iteration", x)
}
for {
break
continue
}
if y := expensiveComputation(); y > x {
x = y
}
xBig := func() bool {
return x > 10000
}
fmt.Println("xBig:", xBig())
x = 1.3e3
fmt.Println("xBig:", xBig())
goto love
love:
// learnDefer()
// learnInterfaces()
}
「遅延実行」
learngo06.go
func learnDefer() (ok bool) {
defer fmt.Println("deferred statements execute in reverse (LIFO) order.")
defer fmt.Println("nThis line is being printed first because")
return true
}
「インターフェース」と「構造体」
learngo07.go
type Stringer interface {
String() string
}
type pair struct {
x, y int
}
func (p pair) String() string {
return fmt.Sprintf("(%d, %d)", p.x, p.y)
}
func learnInterfaces() {
p := pair{3, 4}
fmt.Println(p.String())
var i Stringer
i = p
fmt.Println(i.String())
fmt.Println(p)
fmt.Println(i)
// learnVariadicParams("great", "learning", "here!")
}
「可変引数」
learngo08.go
func learnVariadicParams(myStrings ...interface{}) {
for _, param := range myStrings {
fmt.Println("param:", param)
}
fmt.Println("params:", fmt.Sprintln(myStrings...))
// learnErrorHandling()
}
「エラーハンドリング」
learngo09.go
func learnErrorHandling() {
m := map[int]string{3: "three", 4: "four"}
if x, ok := m[1]; !ok {
fmt.Println("no one there")
} else {
fmt.Print(x)
}
if _, err := strconv.Atoi("non-int"); err != nil {
fmt.Println(err)
}
// learnConcurrency()
}
「同時実行処理」
learngo10.go
func inc(i int, c chan int) {
c <- i + 1
}
func learnConcurrency() {
c := make(chan int)
go inc(0, c)
go inc(10, c)
go inc(-805, c)
fmt.Println(<-c, <-c, <-c)
cs := make(chan string)
ccs := make(chan chan string)
go func() { c <- 84 }()
go func() { cs <- "wordy" }()
select {
case i := <-c:
fmt.Printf("it's a %T", i)
case <-cs:
fmt.Println("it's a string")
case <-ccs:
fmt.Println("didn't happen.")
}
// learnWebProgramming()
}
「Webアプリケーション」
learngo11.go
func learnWebProgramming() {
err := http.ListenAndServe(":8080", pair{})
fmt.Println(err)
}
func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("You learned Go in Y minutes!"))
}

More Related Content

What's hot

BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
apg4b 4.05 ポインタ
apg4b 4.05 ポインタapg4b 4.05 ポインタ
apg4b 4.05 ポインタAPG4b
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Relations Team
 
for文
for文for文
for文APG4b
 
while文
while文while文
while文APG4b
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
プログラムの実行順序
プログラムの実行順序プログラムの実行順序
プログラムの実行順序APG4b
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Joe_noh
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式digitalghost
 
入力
入力入力
入力APG4b
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Joe_noh
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11nekko1119
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングsatoshimurakumo
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回Joe_noh
 
String representation in py3k
String representation in py3kString representation in py3k
String representation in py3kAtsuo Ishimoto
 

What's hot (19)

BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
apg4b 4.05 ポインタ
apg4b 4.05 ポインタapg4b 4.05 ポインタ
apg4b 4.05 ポインタ
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
for文
for文for文
for文
 
コルーチンの使い方
コルーチンの使い方コルーチンの使い方
コルーチンの使い方
 
while文
while文while文
while文
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
プログラムの実行順序
プログラムの実行順序プログラムの実行順序
プログラムの実行順序
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
 
入力
入力入力
入力
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 
Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -Elixirだ 第1回 - 基礎だ -
Elixirだ 第1回 - 基礎だ -
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
Elixirだ 第2回
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回
 
String representation in py3k
String representation in py3kString representation in py3k
String representation in py3k
 

Viewers also liked

セミナー 起業20130407
セミナー 起業20130407セミナー 起業20130407
セミナー 起業20130407Yoichi Inoue
 
LA ONE KITCHEN menu
LA ONE KITCHEN menuLA ONE KITCHEN menu
LA ONE KITCHEN menuWen Li Chang
 
18 silabus x-sim-dig
18 silabus x-sim-dig18 silabus x-sim-dig
18 silabus x-sim-digAl Agso
 
εφηβοι παχυσαρκια
εφηβοι παχυσαρκιαεφηβοι παχυσαρκια
εφηβοι παχυσαρκιαamitsikaris
 
у истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdfу истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdfNatalya Solomina
 
Innovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex systemInnovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex systemIan McCarthy
 
Hãy biến ước mở của bạn thành triệu đô với Internet
Hãy biến ước mở của bạn thành triệu đô với InternetHãy biến ước mở của bạn thành triệu đô với Internet
Hãy biến ước mở của bạn thành triệu đô với InternetĐình Tuấn Phạm
 
Rks sentra balok b
Rks sentra balok bRks sentra balok b
Rks sentra balok bkreasi tk
 
Andzej[prezentacja]ok
Andzej[prezentacja]okAndzej[prezentacja]ok
Andzej[prezentacja]okRoom1809
 
Aanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.netAanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.netImran Ahmed Farooq
 
Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]sabbioso
 
Great Places to Work
Great Places to WorkGreat Places to Work
Great Places to WorkKalpana PM
 

Viewers also liked (19)

セミナー 起業20130407
セミナー 起業20130407セミナー 起業20130407
セミナー 起業20130407
 
Lampiran
LampiranLampiran
Lampiran
 
LA ONE KITCHEN menu
LA ONE KITCHEN menuLA ONE KITCHEN menu
LA ONE KITCHEN menu
 
18 silabus x-sim-dig
18 silabus x-sim-dig18 silabus x-sim-dig
18 silabus x-sim-dig
 
εφηβοι παχυσαρκια
εφηβοι παχυσαρκιαεφηβοι παχυσαρκια
εφηβοι παχυσαρκια
 
FOA _Certificate
FOA _CertificateFOA _Certificate
FOA _Certificate
 
у истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdfу истоков Ниж Поволжья.pdf
у истоков Ниж Поволжья.pdf
 
Inklusi-Eksklusi
Inklusi-EksklusiInklusi-Eksklusi
Inklusi-Eksklusi
 
Innovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex systemInnovation in manufacturing as an evolutionary complex system
Innovation in manufacturing as an evolutionary complex system
 
Hãy biến ước mở của bạn thành triệu đô với Internet
Hãy biến ước mở của bạn thành triệu đô với InternetHãy biến ước mở của bạn thành triệu đô với Internet
Hãy biến ước mở của bạn thành triệu đô với Internet
 
1419379686
14193796861419379686
1419379686
 
My biodata
My biodataMy biodata
My biodata
 
Rks sentra balok b
Rks sentra balok bRks sentra balok b
Rks sentra balok b
 
Carbonio
CarbonioCarbonio
Carbonio
 
Rka
RkaRka
Rka
 
Andzej[prezentacja]ok
Andzej[prezentacja]okAndzej[prezentacja]ok
Andzej[prezentacja]ok
 
Aanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.netAanchal digest january 2011 www.aiourdubooks.net
Aanchal digest january 2011 www.aiourdubooks.net
 
Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]Capitale - Enciclopedia Einaudi [1982]
Capitale - Enciclopedia Einaudi [1982]
 
Great Places to Work
Great Places to WorkGreat Places to Work
Great Places to Work
 

Similar to Goの文法の実例と解説

Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.ContextAkira Takahashi
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Kota Mizushima
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理Yuto Matsukubo
 
Flow.js
Flow.jsFlow.js
Flow.jsuupaa
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話Moriyoshi Koizumi
 
setTimeout関数の楽しみ
setTimeout関数の楽しみsetTimeout関数の楽しみ
setTimeout関数の楽しみmtkn
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 

Similar to Goの文法の実例と解説 (20)

Actor&stm
Actor&stmActor&stm
Actor&stm
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
大人のお型付け
大人のお型付け大人のお型付け
大人のお型付け
 
明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理明日から使える気になるGo言語による並行処理
明日から使える気になるGo言語による並行処理
 
Clojure
ClojureClojure
Clojure
 
Flow.js
Flow.jsFlow.js
Flow.js
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話
 
PHP language update 201211
PHP language update 201211PHP language update 201211
PHP language update 201211
 
setTimeout関数の楽しみ
setTimeout関数の楽しみsetTimeout関数の楽しみ
setTimeout関数の楽しみ
 
pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
Scope Exit
Scope ExitScope Exit
Scope Exit
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Gocon2013
Gocon2013Gocon2013
Gocon2013
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 

More from Ryuji Iwata

開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パートRyuji Iwata
 
私のMicrosoft Azure 2023
私のMicrosoft Azure 2023私のMicrosoft Azure 2023
私のMicrosoft Azure 2023Ryuji Iwata
 
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たことRyuji Iwata
 
Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]Ryuji Iwata
 
Dapr new building block: Distributed lock
Dapr new building block: Distributed lockDapr new building block: Distributed lock
Dapr new building block: Distributed lockRyuji Iwata
 
オープンセミナー岡山2022殿の13人
オープンセミナー岡山2022殿の13人オープンセミナー岡山2022殿の13人
オープンセミナー岡山2022殿の13人Ryuji Iwata
 
FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介Ryuji Iwata
 
私の趣味TechとICTコミュニティ
私の趣味TechとICTコミュニティ私の趣味TechとICTコミュニティ
私の趣味TechとICTコミュニティRyuji Iwata
 
Goールを再確認しよう!
Goールを再確認しよう!Goールを再確認しよう!
Goールを再確認しよう!Ryuji Iwata
 
Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介Ryuji Iwata
 
技術を学ぶその前にあったもの
技術を学ぶその前にあったもの技術を学ぶその前にあったもの
技術を学ぶその前にあったものRyuji Iwata
 
DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]Ryuji Iwata
 
私の趣味Tech活動報告
私の趣味Tech活動報告私の趣味Tech活動報告
私の趣味Tech活動報告Ryuji Iwata
 
Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]Ryuji Iwata
 
卒業Goは何してた?
卒業Goは何してた?卒業Goは何してた?
卒業Goは何してた?Ryuji Iwata
 
受験の予約は余裕を持って
受験の予約は余裕を持って受験の予約は余裕を持って
受験の予約は余裕を持ってRyuji Iwata
 
GoでAzureのRDBMSサービスを操作
GoでAzureのRDBMSサービスを操作GoでAzureのRDBMSサービスを操作
GoでAzureのRDBMSサービスを操作Ryuji Iwata
 
Goでイケる!Azureサービスの紹介
Goでイケる!Azureサービスの紹介Goでイケる!Azureサービスの紹介
Goでイケる!Azureサービスの紹介Ryuji Iwata
 
「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たことRyuji Iwata
 

More from Ryuji Iwata (20)

開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
開発・インフラ・コラボレーティブ担当者目線で読み解く、Build 2023 の注目トピック - 開発パート
 
私のMicrosoft Azure 2023
私のMicrosoft Azure 2023私のMicrosoft Azure 2023
私のMicrosoft Azure 2023
 
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
私なりのArchitect’s Guide to Data Model Optimizationと知り得たこと
 
Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]Azure App ServiceのGo紹介 [2022年12月版]
Azure App ServiceのGo紹介 [2022年12月版]
 
Dapr new building block: Distributed lock
Dapr new building block: Distributed lockDapr new building block: Distributed lock
Dapr new building block: Distributed lock
 
オープンセミナー岡山2022殿の13人
オープンセミナー岡山2022殿の13人オープンセミナー岡山2022殿の13人
オープンセミナー岡山2022殿の13人
 
FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介FaaSなAzure FunctionsのGo紹介
FaaSなAzure FunctionsのGo紹介
 
私の趣味TechとICTコミュニティ
私の趣味TechとICTコミュニティ私の趣味TechとICTコミュニティ
私の趣味TechとICTコミュニティ
 
Goールを再確認しよう!
Goールを再確認しよう!Goールを再確認しよう!
Goールを再確認しよう!
 
Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介Microsoft/Azure x Goのご紹介
Microsoft/Azure x Goのご紹介
 
技術を学ぶその前にあったもの
技術を学ぶその前にあったもの技術を学ぶその前にあったもの
技術を学ぶその前にあったもの
 
DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]DaprのGo紹介 [機能紹介編]
DaprのGo紹介 [機能紹介編]
 
私の趣味Tech活動報告
私の趣味Tech活動報告私の趣味Tech活動報告
私の趣味Tech活動報告
 
Goについて
GoについてGoについて
Goについて
 
Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]Go入門ハンズオン [基礎編]
Go入門ハンズオン [基礎編]
 
卒業Goは何してた?
卒業Goは何してた?卒業Goは何してた?
卒業Goは何してた?
 
受験の予約は余裕を持って
受験の予約は余裕を持って受験の予約は余裕を持って
受験の予約は余裕を持って
 
GoでAzureのRDBMSサービスを操作
GoでAzureのRDBMSサービスを操作GoでAzureのRDBMSサービスを操作
GoでAzureのRDBMSサービスを操作
 
Goでイケる!Azureサービスの紹介
Goでイケる!Azureサービスの紹介Goでイケる!Azureサービスの紹介
Goでイケる!Azureサービスの紹介
 
「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと「Gopher道場 #8」で知り得たこと
「Gopher道場 #8」で知り得たこと
 

Goの文法の実例と解説

  • 1. Goの文法の実例と解説 オリジナルサイト Learn X in Y minutes http://learnxinyminutes.com/docs/go/ オリジナルソース learngo.go http://learnxinyminutes.com/docs/files/learngo.go ブロック分け 全体で約20のセクションで構成されており、順番に処理を呼び出す記述になっています。 少々長いので、いくつかのブロックに分けて「記述して実行」して行きます。 セクション一覧(ブロックは「記述して実行」する単位) 「Hello world!」 package main import () func main() 「複数の引数や戻り値」 func beyondHello() func learnMultiple(x, y int) (sum, prod int) 「様々な型」 func learnTypes() 「メモリー割り当て」 func learnMemory() (p, q *int) 「フロー制御」 func expensiveComputation() float64 func learnFlowControl() 「遅延実行」 func learnDefer() (ok bool) 「インターフェース」と「構造体」 type Stringer interface type pair struct
  • 2. func (p pair) String() string func learnInterfaces() 「可変引数」 func learnVariadicParams(myStrings ...interface{}) 「エラーハンドリング」 func learnErrorHandling() 「同時実行処理」 func inc(i int, c chan int) func learnConcurrency() 「Webアプリケーション」 func learnWebProgramming() func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) 実際にやってみよう! テキストエディターでlearngo01.goをUTF-8(BOMなし)で作成します。 「Hello world!」 learngo01.go package main import ( "fmt" // m "math" // "net/http" // "strconv" ) func main() { fmt.Println("Hello world!") //beyondHello() } 実行する前にgo fmtコマンドでフォーマットを整形するとよいでしょう。 フォーマットの整形 ~$ go fmt learngo01.go learngo01.go
  • 3. go runコマンドで実行してみましょう。 ソースの実行 ~$ go run learngo01.go Hello world! 以降、learngo01.goにコードの差分を繰り返し「記述して実行」して行きますので、差分を残 したい場合は、ファイルをコピーした後、コピーしたファイルに追記して行って下さい。 ファイルのコピー ~$ cp learngo01.go learngo02.go ~$ ls learngo01.go learngo02.go 以降、便宜上、追加していく差分の内容を「learngo連番.go」で表示してあります。 また、資料の性質上、資料のソースをそのまま「記述して実行」するとエラーになりますの で、その際は、 ● 各関数の呼び出しがコメントアウトされているので有効にする。 ● import句のパッケージ定義がコメントアウトされているので有効にする。 などを行って下さい。 「複数の引数や戻り値」 learngo02.go func beyondHello() { var x int x = 3 y := 4 sum, prod := learnMultiple(x, y) fmt.Println("sum:", sum, "prod:", prod) // learnTypes() } func learnMultiple(x, y int) (sum, prod int) { return x + y, x * y } 「様々な型」
  • 4. learngo03.go func learnTypes() { s := "Learn Go!" s2 := `A "raw" string literal can include line breaks.` g := 'Σ' f := 3.14195 c := 3 + 4i var u uint = 7 var pi float32 = 22. / 7 n := byte('n') var a4 [4]int a3 := [...]int{3, 1, 5} s3 := []int{4, 5, 9} s4 := make([]int, 4) var d2 [][]float64 bs := []byte("a slice") // p, q := learnMemory() // fmt.Println(*p, *q) m := map[string]int{"three": 3, "four": 4} m["one"] = 1 _, _, _, _, _, _, _, _, _ = s2, g, f, u, pi, n, a3, s4, bs fmt.Println(s, c, a4, s3, d2, m) // learnFlowControl() } 「メモリー割り当て」 learngo04.go func learnMemory() (p, q *int) { p = new(int) s := make([]int, 20) s[3] = 7 r := -2 return &s[3], &r }
  • 5. 「フロー制御」 learngo05.go func expensiveComputation() float64 { return m.Exp(10) } func learnFlowControl() { if true { fmt.Println("told ya") } if false { // Pout. } else { // Gloat. } x := 42.0 switch x { case 0: case 1: case 42: case 43: } for x := 0; x < 3; x++ { fmt.Println("iteration", x) } for { break continue } if y := expensiveComputation(); y > x { x = y } xBig := func() bool { return x > 10000 } fmt.Println("xBig:", xBig()) x = 1.3e3 fmt.Println("xBig:", xBig()) goto love love:
  • 6. // learnDefer() // learnInterfaces() } 「遅延実行」 learngo06.go func learnDefer() (ok bool) { defer fmt.Println("deferred statements execute in reverse (LIFO) order.") defer fmt.Println("nThis line is being printed first because") return true } 「インターフェース」と「構造体」 learngo07.go type Stringer interface { String() string } type pair struct { x, y int } func (p pair) String() string { return fmt.Sprintf("(%d, %d)", p.x, p.y) } func learnInterfaces() { p := pair{3, 4} fmt.Println(p.String()) var i Stringer i = p fmt.Println(i.String()) fmt.Println(p) fmt.Println(i) // learnVariadicParams("great", "learning", "here!") } 「可変引数」
  • 7. learngo08.go func learnVariadicParams(myStrings ...interface{}) { for _, param := range myStrings { fmt.Println("param:", param) } fmt.Println("params:", fmt.Sprintln(myStrings...)) // learnErrorHandling() } 「エラーハンドリング」 learngo09.go func learnErrorHandling() { m := map[int]string{3: "three", 4: "four"} if x, ok := m[1]; !ok { fmt.Println("no one there") } else { fmt.Print(x) } if _, err := strconv.Atoi("non-int"); err != nil { fmt.Println(err) } // learnConcurrency() } 「同時実行処理」 learngo10.go func inc(i int, c chan int) { c <- i + 1 } func learnConcurrency() { c := make(chan int) go inc(0, c) go inc(10, c) go inc(-805, c) fmt.Println(<-c, <-c, <-c) cs := make(chan string)
  • 8. ccs := make(chan chan string) go func() { c <- 84 }() go func() { cs <- "wordy" }() select { case i := <-c: fmt.Printf("it's a %T", i) case <-cs: fmt.Println("it's a string") case <-ccs: fmt.Println("didn't happen.") } // learnWebProgramming() } 「Webアプリケーション」 learngo11.go func learnWebProgramming() { err := http.ListenAndServe(":8080", pair{}) fmt.Println(err) } func (p pair) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("You learned Go in Y minutes!")) }