Go言語について
This commit is contained in:
parent
ce14672744
commit
a4a53616ba
11
README.md
11
README.md
@ -1,3 +1,14 @@
|
|||||||
# go-common-code
|
# go-common-code
|
||||||
|
|
||||||
Go言語の共通モジュールを作成する
|
Go言語の共通モジュールを作成する
|
||||||
|
|
||||||
|
|
||||||
|
## Go言語の特徴
|
||||||
|
|
||||||
|
* シンプルで学習コストが低い構造
|
||||||
|
* コンパイル言語で高速
|
||||||
|
* 並行処理を軽量に扱える (goroutine と channel)
|
||||||
|
* クロスコンパイルが容易 (Linux, Windows, macOS などへ簡単に出力可能)
|
||||||
|
* 静的型付け
|
||||||
|
* クラスを持たず、構造体とメソッドでオブジェクト指向的な書き方ができる
|
||||||
|
* 標準ライブラリが強力で小さなバイナリにまとまる
|
||||||
243
readme/go_howto.md
Normal file
243
readme/go_howto.md
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
# Go言語の書き方
|
||||||
|
|
||||||
|
## Go言語の基本まとめ
|
||||||
|
|
||||||
|
## インポートと標準ライブラリ
|
||||||
|
|
||||||
|
ファイルの先頭で必要なパッケージを import する。
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
よく使う標準ライブラリ
|
||||||
|
|
||||||
|
* fmt: 文字列表示、フォーマット
|
||||||
|
* time: 日付、時間
|
||||||
|
* os: 環境変数、ファイル操作
|
||||||
|
* strings: 文字列操作
|
||||||
|
* net/http: HTTPサーバ、クライアント
|
||||||
|
* io/ioutil または io: 入出力処理
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 基本構文
|
||||||
|
|
||||||
|
### main 関数
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("hello")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 変数宣言
|
||||||
|
|
||||||
|
```go
|
||||||
|
var a int = 10
|
||||||
|
b := 20 // 型推論
|
||||||
|
var s string = "text"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 定数
|
||||||
|
|
||||||
|
```go
|
||||||
|
const Pi = 3.14
|
||||||
|
```
|
||||||
|
|
||||||
|
### 関数定義
|
||||||
|
|
||||||
|
```go
|
||||||
|
func add(x int, y int) int {
|
||||||
|
return x + y
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
返り値を複数返すことも可能
|
||||||
|
|
||||||
|
```go
|
||||||
|
func swap(a string, b string) (string, string) {
|
||||||
|
return b, a
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 分岐と繰り返し処理
|
||||||
|
|
||||||
|
### if文
|
||||||
|
|
||||||
|
```go
|
||||||
|
if x > 10 {
|
||||||
|
fmt.Println("big")
|
||||||
|
} else if x == 10 {
|
||||||
|
fmt.Println("equal")
|
||||||
|
} else {
|
||||||
|
fmt.Println("small")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### switch文
|
||||||
|
|
||||||
|
```go
|
||||||
|
switch n {
|
||||||
|
case 1:
|
||||||
|
fmt.Println("one")
|
||||||
|
case 2, 3:
|
||||||
|
fmt.Println("two or three")
|
||||||
|
default:
|
||||||
|
fmt.Println("other")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### for文 (Goの唯一のループ構文)
|
||||||
|
|
||||||
|
```go
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
fmt.Println(i)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
条件のみ
|
||||||
|
|
||||||
|
```go
|
||||||
|
for x < 10 {
|
||||||
|
x++
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
無限ループ
|
||||||
|
|
||||||
|
```go
|
||||||
|
for {
|
||||||
|
fmt.Println("loop")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 配列、スライス、マップ
|
||||||
|
|
||||||
|
### 配列
|
||||||
|
|
||||||
|
固定長
|
||||||
|
|
||||||
|
```go
|
||||||
|
var arr [3]int = [3]int{1, 2, 3}
|
||||||
|
```
|
||||||
|
|
||||||
|
### スライス
|
||||||
|
|
||||||
|
可変長配列 (Goではこちらが主に使われる)
|
||||||
|
|
||||||
|
```go
|
||||||
|
nums := []int{1, 2, 3}
|
||||||
|
nums = append(nums, 4)
|
||||||
|
```
|
||||||
|
|
||||||
|
### マップ (オブジェクトのようなキーと値)
|
||||||
|
|
||||||
|
```go
|
||||||
|
m := map[string]int{
|
||||||
|
"apple": 100,
|
||||||
|
"banana": 200,
|
||||||
|
}
|
||||||
|
|
||||||
|
v := m["apple"]
|
||||||
|
m["orange"] = 300
|
||||||
|
```
|
||||||
|
|
||||||
|
### for range
|
||||||
|
|
||||||
|
```go
|
||||||
|
for key, value := range m {
|
||||||
|
fmt.Println(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
for index, value := range nums {
|
||||||
|
fmt.Println(index, value)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 構造体とオブジェクト (Goはクラスを持たない)
|
||||||
|
|
||||||
|
* Goには「クラス」も「継承」もない
|
||||||
|
* 構造体だがメソッドを持てる
|
||||||
|
* 「埋め込み(Embedding)」という仕組みで 継承に近いこと はできる
|
||||||
|
|
||||||
|
### 構造体 (class の代わり)
|
||||||
|
|
||||||
|
```go
|
||||||
|
type User struct {
|
||||||
|
Name string
|
||||||
|
Age int
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
インスタンス化
|
||||||
|
|
||||||
|
```go
|
||||||
|
u := User{Name: "Taro", Age: 20}
|
||||||
|
fmt.Println(u.Name)
|
||||||
|
```
|
||||||
|
|
||||||
|
### メソッド (構造体に紐づく関数)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func (u User) Greet() string {
|
||||||
|
return "Hello " + u.Name
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
呼び出し
|
||||||
|
|
||||||
|
```go
|
||||||
|
msg := u.Greet()
|
||||||
|
fmt.Println(msg)
|
||||||
|
```
|
||||||
|
|
||||||
|
### ポインタレシーバー (値を変更できる)
|
||||||
|
|
||||||
|
```go
|
||||||
|
func (u *User) AddAge() {
|
||||||
|
u.Age++
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. インターフェース (GoのOOP的な仕組み)
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Greeter interface {
|
||||||
|
Greet() string
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
構造体がメソッドを持てば自然に実装扱いになる
|
||||||
|
|
||||||
|
```go
|
||||||
|
func greeting(g Greeter) {
|
||||||
|
fmt.Println(g.Greet())
|
||||||
|
}
|
||||||
|
|
||||||
|
greeting(u)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 必要な要素をコンパクトにまとめた完全版です
|
||||||
|
|
||||||
|
もし「Webサーバーの基本」「goroutine の書き方」「ディレクトリ構成の例」なども知りたい場合は続けて作成できます。
|
||||||
12
readme/go_install.md
Normal file
12
readme/go_install.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Go言語をインストールする
|
||||||
|
|
||||||
|
Macの場合
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install go
|
||||||
|
go version
|
||||||
|
|
||||||
|
# 環境変数を確認
|
||||||
|
go env GOPATH
|
||||||
|
go env GOBIN
|
||||||
|
```
|
||||||
11
src/hello.go
Normal file
11
src/hello.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// src/hello.go
|
||||||
|
// A simple Go program that prints "Hello, World!" to the console.
|
||||||
|
// go run src/hello.go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("Hello, World!")
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user