LoginSignup
0
1

More than 3 years have passed since last update.

Go言語初心者メモ

Last updated at Posted at 2019-08-30

概要

知ったことをメモする。
随時追記予定。

言語の特徴

  • Googleが開発した言語
  • 静的型付け言語
  • コンパイル言語
  • メモリ管理が安全
  • 並行処理が得意
  • C言語に似ている
  • 2019年9月現在日本では、Go言語を扱う開発者は希少であり市場価値が高い
  • Go言語を扱う開発者は比較的ベテランのエンジニアが多いように感じる
  • 便利機能とかは豊富ではない。原始的なアプローチが多い
  • サクッとプロトタイプを開発するのはRailsやLaravelに劣るが、速度を求めるなら適している

学習方法

ライブラリ

Left align Right align
realize ホットリロード
goose DBマイグレーション
siris Webアプリケーションフレームワーク
go-cmp 値比較
pprof プロファイリング
guregu/null 変数にnullが入ってきたときに型のデフォルト値にするのではなくnullとして扱えるようにする
hashicorp/golang-lru LRUキャッシュ
gorm ORM
julienschmidt/httprouter ルーティング
kr/pty unix操作するやつ
labstack/echo Webサーバー
go-urn URNパーサー

Log出力

import "log"

func main() {
    log.Print("hoge")
}

実行結果

# go run main.go
2019/08/30 09:20:52 hoge

echoのサーバー起動

import "github.com/labstack/echo/v4"

func main() {
    e := echo.New()
}
# go run main.go
   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.5
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:8081

Classがない

structを使う。

ジェネリクスがない

ArrayとSliceがある

繰り返す際はrangeを使う。

変数名の命名は慣例的に短い

1~3文字の変数名とかがよくある。

外部のパッケージから利用するエクスポートする関数や変数は先頭文字を大文字にしなければならない

例:

import (
    "fmt"
)

func main() {
    fmt.Println("Hello World")
}

↑の Println とか

「例外」はない

エラーハンドリングはerrorインタフェースを用いて行う。

example.go
v, err := hoge.Fuga()
if err != nil {
    // エラー時の処理
}

&(アドレス演算子)

値のポインタ

変数の宣言

var s = "文字列"
s := "文字列"

↑どちらも同じ挙動となる。
変数の初期化の際は := で宣言すると var を省略できる。
※ただし後者の宣言方法は関数内でのみ使用できる。

複数の同じ型の変数を宣言する場合、型を省略して書ける

var firstName, lastName string

型推論してくれる

var firstName, lastName = "yamada", "tarou"

変数は型ごとにゼロ値(デフォルト値)が決まっている

数値型(int,floatなど): 0
bool型: false
string型: "" (空文字列( empty string ))

テスト

デフォルトで用意されている、 'testing' を用いる。
テストコードはテスト対象のプロダクトコードと同じディレクトリに作成する。

ファイル名は_testのサフィックスをつける。

例:

example.go
example_test.go

.envファイルで定義した環境変数を参照する

godotenv というライブラリを使う。

ライブラリのインストール

# go get github.com/joho/godotenv

使用

.env
# データベースにログインするユーザー名
DB_USER: root
main.go
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }

    DB_USER := os.Getenv("DB_USER")

関数

引数

同じ型の引数を複数個受け取る場合、引数の型は省略できる。
例:

func add(x, y int) int {
    return x + y
}

x, y int でも x int, y int でも良い。

戻り値

関数は複数の戻り値を返却できる

例:

func hoge() (string, error) {
}

↑括弧で戻り値を複数指定できる。

戻り値を変数名で指定する

例:

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

return の変数名を省略できる。

型変換

型変換

例:

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1