{}const=>[]async()letfn</>var
開発バックエンド実践

Go での最初のスクリプトは 10 分で完了します。最小限の CLI とビルド 🐹

500ページのドキュメントを読むのにうんざりしていませんか?Go mod initから完成したバイナリまで、ゼロからGoで動作するCLIツールを作成します。水なし、ミームとクロスコンパイルあり。

К

Kodik

著者

2分で読める

「なぜGoを選んだのですか?」と聞かれました。
「私のPythonスクリプトがコーヒーを淹れるよりも長くかかったからです」と私は答えました。

さて、正直に言いましょう。あなたはおそらくすでにGoについて500回聞いたことがあるでしょう。あなたは、それが速いこと、Docker、Kubernetes、そしてプロダクションで回転するものの半分が書かれていると言われました。あなたはうなずき、そして次のJavaScriptプロジェクトでいつものVS Codeを開きました。

ステップ0:インストール(まだの場合)

go.dev/dlにアクセスして、インストーラーをダウンロードします。もしくは、もっと文化的な方法で:

# macOS
brew install go

# Ubuntu/Debian
sudo apt install golang-go

# Windows(スクープ経由)
scoop install go

確認事項:

$ go version
go1.22.x(またはそれ以降)は、すべてOKを意味します👍

もしバージョンを見たなら、おめでとうございます。あなたは「Goを試すつもりだった」人々の90%よりも先に進んでいます。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

ステップ1:プロジェクトを作成する

mkdir my-first-go-cli
cd my-first-go-cli
go mod init my-first-go-cli

go mod initは、npm initまたはpip initの類似物です。依存関係を追跡するファイル go.mod を作成します。はい、Go にはモジュールシステムが標準で用意されています。はい、動作します。はい、私も驚きました。

ステップ2:コードを書く(最も面白い部分)

ファイル main.go を作成します。

package main

import (
    "fmt"
    "os"
    "strings"
    "time"
)

func main() {
    args := os.Args[1:]

    if len(args) == 0 {
        fmt.Println("🐹 Hi! I'm your first Go-CLI!")
        fmt.Println()
        fmt.Println("Use:")
        fmt.Println("  greet <name>     — say hello")
        fmt.Println("  time            — current time")
        fmt.Println("  reverse <text> — flip the line")
        fmt.Println()
        fmt.Println("Example: my-first-go-cli greet Alex")
        return
    }

    command := strings.ToLower(args[0])

    switch command {
    case "greet":
        if len(args) < 2 {
            fmt.Println("❌ Enter a name! Example: greet Gofer")
            return
        }
        name := strings.Join(args[1:], " ")
        fmt.Printf("👋 Hi %s! Welcome to the world of Go!\n", name)

    case "time":
        now := time.Now()
        fmt.Printf("🕐 Now: %s\n", now.Format("15:04:05 02.01.2006"))
        fmt.Printf("📅 Day of the week: %s\n", russianWeekday(now.Weekday()))

    case "reverse":
        if len(args) < 2 {
            fmt.Println("❌ Specify the text! Example: reverse Hello")
            return
        }
        text := strings.Join(args[1:], " ")
        fmt.Printf("🔄 Result: %s\n", reverseString(text))

    default:
        fmt.Printf("🤷 Unknown command: %s\n", command)
        fmt.Println("Run without arguments to see help.")
    }
}

func reverseString(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

func russianWeekday(w time.Weekday) string {
    days := map[time.Weekday]string{
        time.Monday:    "Monday",
        time.Tuesday:   "Tuesday",
        time.Wednesday: "Wednesday",
        time.Thursday:  "Thursday",
        time.Friday:    "Friday",
        time.Saturday:  "Saturday",
        time.Sunday:    "Sunday",
    }
    return days[w]
}

何が起こっているのか(慌てないでください):

  • package mainはエントリーポイントです。Go では、すべては main から始まります。

  • os.Argsはコマンドライン引数です。os.Args[0]はプログラム名、[1:]はその他です。

  • switchは、他の言語のswitchと同じですが、breakはありません。はい、Goは自動的に失敗しません。ありがとう、Go。🙏

  • []rune — Unicodeで文字列を正しく反転させるため(さもなければキリル文字が分離されます)。

ステップ3:起動

# 実行するだけ
go run main.go

# チームと
go run main.go greet Гофер
go run main.go time
go run main.go reverse "Go is a thrill"

それは機能します。 初回から。500 MBのnode_modulesなし。仮想環境なし。ただ動くだけです。

ステップ4:バイナリを収集する 🔨

そして、ここからがGoの魔法の始まりです。

go build -o mycli main.go

すべて。1つのファイル。1つのバイナリ。依存関係はありません。友人に送っても、Go、Python、Node.jsなどをインストールしなくても実行できます。

クロスコンパイル(上級者向けボーナス)

Macを使用してWindowsでコンパイルしたいですか?簡単です:

# WindowsGOOS = windows GOARCH = amd64 go build - o mycli.exe main.go

# LinuxGOOS = linux GOARCH = amd64 go build - o mycli - linux main.go

# macOS (Apple Silicon)GOOS=darwin GOARCH=arm64 go build -o mycli-mac main.go

2つの環境変数を使用すると、あらゆるプラットフォームに対応したバイナリが得られます。Dockerなし。CI/CDなし。単にgo buildです。Pythonでこれを実行してみてください。私は待っています。☕

どこに進むべきですか?

  • flag — フラグ解析用の組み込みパッケージ (--name, --verbose)

  • cobra — 重要なCLIアプリケーション用のライブラリ(kubectlはこのライブラリを使用して記述されています)

  • ルーチンとチャネル — だからこそ、みんなGoが大好き

  • net/http — Go で API サーバーを書くのは、ピザを注文するより簡単です

📱毎日スキルをレベルアップしたいですか?

もしあなたがこのテーマに興味を持って、 実践を通じてプログラミングを学ぶ — Kodikアプリをチェックしてください。そこで、問題を解いたり、インタラクティブなコースを受講したり、実際にコードを書いたりできます。ビデオを見るだけではありません(どうなるかは誰もが知っています😅)。

また、当社には 開発者向けテレグラムチャンネル — 定期的に役立つ投稿、タスク分析、チートシート、ミーム(それらなしではどこへも行けません)が公開されます。すでに2000人以上の開発者が参加しているため、地下鉄に乗っている間やデプロイを待っている間に、素材を繰り返し、脳を鍛えるのに最適な方法です。

コーディック + Telegramチャンネル = 開発者として成長したい人、そして「後で読む」ブックマークを集めたい人のためのコンボ。 🚀

さて、お湯はまだ沸いていませんか?時間内に終わりました。お茶を淹れて、最初のGorutinを書いてください。お疲れさまでした。🐹☕

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要