Go言語について

This commit is contained in:
ry.yamafuji 2025-12-07 19:26:52 +09:00
parent ce14672744
commit a4a53616ba
4 changed files with 278 additions and 1 deletions

View File

@ -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
View 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
View 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
View 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!")
}