Go言語について
This commit is contained in:
parent
ce14672744
commit
a4a53616ba
11
README.md
11
README.md
@ -1,3 +1,14 @@
|
||||
# go-common-code
|
||||
|
||||
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