概要

  • 言語機能や文法などの要素を極限まで削ったコンパクトなプログラミング言語
  • 改良されたC
    • 厳密に定義された多数の基本型
    • パッケージによる名前空間の導入
    • ガベージコレクタによるメモリ管理
  • コンパイル言語
  • コンパイル速度が速い ... コードの修正→テスト実行のサイクルを快適に回すことに貢献
  • マルチプラットフォームで動作
  • OSへの非依存
    • OSの標準的なライブラリに依存しない実行ファイルを生成
    • OSが提供する共有ライブラリを使わない代わりに、自前で相当する機能をすべて保持する必要があるため、実行ファイルサイズは大きくなる
  • ガーベジコレクタ機能を備える
  • 並行処理に強い
    • goroutine
    • channel
  • ポインタ型はあるが、ポインタ演算機能はない
  • 簡潔性を目指して、以下の機能を外した
    • オブジェクト指向
    • 例外機構
    • ジェネリクス ... v1.18 で導入

導入事例

学習

Goにないもの、どうする?

クラス

  • クラスという概念は存在しない
  • クラス・オブジェクトが全く使えない。というわけではなく、構造体・インターフェースに置き換えることが出来、疑似的にクラスのように利用することが可能になる
  • Go言語は継承の使用を避け、 継承ではなくコンポジションを選択するという原則 に厳密に従っている
  • Goは、これを達成するのに、構造体とインターフェース間の部分型(is-a)とオブジェクトコンポジション(has-a)の関係を利用している

例外処理

他言語からの乗り換え

from PHP

from JavaScript

トレンド

バージョン

  • Goは年に2回、2月と8月に新しいバージョンをリリースする

1.20

1.19 (2022/8)

1.18 (2022/3)

1.19

主な機能追加

go get

モジュール

コンテキスト

ジェネリクス

DDD

ORM

sqlx

pop

gorm

ライブラリ

ロギング 

log

zap

Excel

Excelize

PDF

gopdf

モバイル開発

Go mobile

Go Cloud

GoDoc?

ツール

gore, gocode, pp

$ go get github.com/motemen/gore/cmd/gore
$ go get github.com/mdempsky/gocode
$ go get github.com/k0kubun/pp

ghq

goimports

$ go get golang.org/x/tools/cmd/goimports

golint

  • 静的解析ツール
$ go get golang.org/x/lint/golint

gox

  • クロスコンパイルツール
$ go get github.com/mitchellh/gox

クロスコンパイル

常駐システム

マイクロサービス

開発会社

トラブルシューティング

no required module provides package

go mod

go mod tidy

but does not contain package


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-04-14 (金) 17:36:30 (428d)