Posted:
| Categories:
golang
| Tags:
golang
はじめに
Go の静的解析ツール golangci-lint を Neovim や VS Code で使っている際、以下のようなエラーが発生しました:
Error: unknown flag: --out-format
このエラーの原因と対応、そして環境に適したインストール方法についてまとめます。
エラーの原因
2024年3月以降、golangci-lint の v2 系(例:v2.0.2)がリリースされました。このバージョンでは、内部構成が大幅にリファクタされ、従来の CLI オプション(--out-format など)が変更・削除されています。
そのため、VS Code や Neovim のプラグインが --out-format を使おうとすると、互換性のないエラーになります。
参考:
解決策:安定版 v1.55.2 にダウングレードする
✅ インストール手順
まず、誤ってインストールされた v2.x を削除(任意):
rm /mnt/nfs/home/exampleuser/go/Linux/x86_64/bin/golangci-lint
次に、v1.55.2 を明示してインストール:
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
| sh -s -- -b /mnt/nfs/home/exampleuser/go/Linux/x86_64/bin v1.55.2
✅ バージョン確認
出力例:
golangci-lint has version 1.55.2 built from ...
なぜ GOBIN をカスタマイズしていたのか?
私の環境では、アーキテクチャ(x86 or arm)ごとにバイナリの配置先を分けたいため、GOBIN を以下のように指定していました:
Read more...Posted:
| Categories:
neovim
| Tags:
golang,
neovim,
nvim-dap
この記事では、Neovim で Golang のデバッグ環境を構築する手順について紹介します。
具体的には、Delve を利用した nvim-dap の設定や、動的に CLI 引数を入力する方法、さらに視覚的にデバッグ情報を表示する nvim-dap-ui の導入方法について解説します。
必要なツールと前提条件
- Neovim: v0.10.5
- Go: Go の実行環境および go.mod で管理されたプロジェクトが必要です。
- Delve: Golang 用デバッガである Delve をインストールしてください。
go install github.com/go-delve/delve/cmd/dlv@latest
- LazyVim / lazy.nvim
- Neovim の設定管理ツールとして LazyVim を使用しています。
- プラグイン
nvim-dap の基本設定
まずは、nvim-dap を LazyVim の仕組みを利用して設定します。
以下のサンプル設定では、Go 用のアダプタとして Delve を利用し、単一ファイル実行と動的な CLI 引数入力の2種類のデバッグ構成を用意しています。
-- ~/.config/nvim/lua/plugins/nvim-dap.lua
return {
"mfussenegger/nvim-dap",
event = "VeryLazy", -- lazy.nvim の遅延読み込みイベント
config = function()
local dap = require("dap")
-- Go 用のアダプタ設定(Delve を利用)
dap.adapters.go = {
type = "executable",
command = "dlv",
args = { "dap" },
}
-- デバッグ構成の定義
dap.configurations.go = {
{
type = "go",
name = "Launch file",
request = "launch",
program = "${file}",
cwd = "${workspaceFolder}",
},
{
type = "go",
name = "Launch file (with arguments)",
request = "launch",
program = "${file}",
cwd = "${workspaceFolder}",
args = function()
local input = vim.fn.input("Enter CLI arguments: ")
return vim.split(input, " ", { trimempty = true })
end,
},
{
type = "go",
name = "Launch package (with arguments)",
request = "launch",
program = "${workspaceFolder}", -- パッケージ全体をビルド対象にする
cwd = "${workspaceFolder}",
args = function()
local input = vim.fn.input("Enter CLI arguments: ")
return vim.split(input, " ", { trimempty = true })
end,
},
{
type = "go",
name = "Debug tests",
request = "launch",
mode = "test",
program = "${file}",
},
}
-- キーマッピングの設定例
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
vim.keymap.set("n", "<leader>dc", dap.continue, { desc = "Start Debugging" })
vim.keymap.set("n", "<leader>di", dap.step_into, { desc = "Step Into" })
vim.keymap.set("n", "<leader>do", dap.step_over, { desc = "Step Over" })
vim.keymap.set("n", "<leader>dO", dap.step_out, { desc = "Step Out" })
end,
}
ポイント
- program と cwd の設定
- 単一ファイルの場合は ${file}、複数ファイルを含むパッケージの場合は ${workspaceFolder} を指定します。
- 動的 CLI 引数入力
- args を関数にして、デバッグ開始時にユーザーから CLI 引数を入力させるようにしています。
nvim-dap-ui の導入と設定
続いて、視覚的にデバッグ情報を表示するために nvim-dap-ui を設定します。
nvim-dap-ui は nvim-dap に依存するため、LazyVim の設定では dependencies を指定しておきます。
Read more...Posted:
| Categories:
neovim
| Tags:
golang,
neotest,
neovim
この記事では、Neovim で Golang のテストを実行するまでの手順を紹介します
必要なツールと前提条件
- Neovim: v0.10.5
- Go: Go の実行環境および go.mod で管理されたプロジェクトが必要です。
- LazyVim / lazy.nvim
- Neovim の設定管理ツールとして LazyVim を使用しています。
- プラグイン
neotest の基本設定
私はrafi/vim-configを利用しています。
“extras” plugins として lazyvim.plugins.extras.test.core がリストの中にありました。
:LazyExtras でLazyVimのメニューを出し、testで検索、xで有効、neovimの再起動でインストールされました。
neotest 使い方
<leader> t でテスト関連のメニューが開き
- t テストファイルを開いた状態で実行すると、そのテストファイルの内容が実行される
- T と押すと全てのテストが実行
まずは、nvim-dap を LazyVim の仕組みを利用して設定します。
以下のサンプル設定では、Go 用のアダプタとして Delve を利用し、単一ファイル実行と動的な CLI 引数入力の2種類のデバッグ構成を用意しています。
-- ~/.config/nvim/lua/plugins/nvim-dap.lua
return {
"mfussenegger/nvim-dap",
event = "VeryLazy", -- lazy.nvim の遅延読み込みイベント
config = function()
local dap = require("dap")
-- Go 用のアダプタ設定(Delve を利用)
dap.adapters.go = {
type = "executable",
command = "dlv",
args = { "dap" },
}
-- デバッグ構成の定義
dap.configurations.go = {
{
type = "go",
name = "Launch file",
request = "launch",
program = "${file}",
cwd = "${workspaceFolder}",
},
{
type = "go",
name = "Launch file (with arguments)",
request = "launch",
program = "${file}",
cwd = "${workspaceFolder}",
args = function()
local input = vim.fn.input("Enter CLI arguments: ")
return vim.split(input, " ", { trimempty = true })
end,
},
{
type = "go",
name = "Launch package (with arguments)",
request = "launch",
program = "${workspaceFolder}", -- パッケージ全体をビルド対象にする
cwd = "${workspaceFolder}",
args = function()
local input = vim.fn.input("Enter CLI arguments: ")
return vim.split(input, " ", { trimempty = true })
end,
},
{
type = "go",
name = "Debug tests",
request = "launch",
mode = "test",
program = "${file}",
},
}
-- キーマッピングの設定例
vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
vim.keymap.set("n", "<leader>dc", dap.continue, { desc = "Start Debugging" })
vim.keymap.set("n", "<leader>di", dap.step_into, { desc = "Step Into" })
vim.keymap.set("n", "<leader>do", dap.step_over, { desc = "Step Over" })
vim.keymap.set("n", "<leader>dO", dap.step_out, { desc = "Step Out" })
end,
}
ポイント
- program と cwd の設定
- 単一ファイルの場合は ${file}、複数ファイルを含むパッケージの場合は ${workspaceFolder} を指定します。
- 動的 CLI 引数入力
- args を関数にして、デバッグ開始時にユーザーから CLI 引数を入力させるようにしています。
nvim-dap-ui の導入と設定
続いて、視覚的にデバッグ情報を表示するために nvim-dap-ui を設定します。
nvim-dap-ui は nvim-dap に依存するため、LazyVim の設定では dependencies を指定しておきます。
Read more...Posted:
| Categories:
Golang
| Tags:
Chromecast,
Golang
google home に喋らせる
vishen / go-chromecastを用いて
Linux マシンから 手軽に GoogleHome に WaveNet 音声で喋らせた。
下記のようにワンライナーで喋らせることができる。
~/go/bin/go-chromecast --device-name shosai tts "こんばんは" --google-service-account=home-hogehoge.json --voice-name ja-JP-Wavenet-B --speaking-rate 1.05 --pitch 0.9
日本語サポート
サポートされている音声と言語で
| 音声名 | 性別 |
|---|
| ja-JP-Wavenet-A | 女性 |
| ja-JP-Wavenet-B | 女性 |
| ja-JP-Wavenet-C | 女性 |
| ja-JP-Wavenet-D | 女性 |
go-chromecast インストール
go get -u github.com/vishen/go-chromecast
Google Cloud Text-to-Speech を使うための設定
Cloud Text-to-Speechの画面に移動。
[有効にする]を選択する。
次に go-chromecast から Text-to-Speech を使えるように API キーを作成する

使用する API の設定

アカウント詳細。ここでは特に何も設定せず、完了を押した

サービスアカウントをクリックして、そのサービスアカウント用の秘密鍵を作成する

秘密鍵がダウンロードされた

秘密鍵を Linux マシンにコピーして鳴らす
go-chromecast コマンドで家の中にある Google Home をリスト化、その Google Home を鳴らす。
Read more...Posted:
| Categories:
golang
| Tags:
golang
Goのバージョンを上げたい
go mod edit -go=1.20 # 1.20に上げたい
go get -u ./… # 依存パッケージを更新
go mod tidy # 不要なパッケージを削除
go list -m all # パッケージのバージョンを確認
まとめると
go mod edit -go=1.20 && go get -u ./... && go mod tidy && go list -m all
zipファイルを展開する
// zipファイルを展開する
// パスワードがかかっている場合もある
// 引数にはzipファイルのパスと展開先のディレクトリを指定
func dellArchive(path string, newDir string) {
// ファイル名からパスワードを推測
re := regexp.MustCompile(`対象ファイル_(\d*).zip`)
password := ""
if s := re.FindStringSubmatch(path) ; len(s) > 0{
password = "hogehoge"
}
// zipファイルを開く
r, err := zip.OpenReader(path)
if err != nil {
log.Fatal(err)
}
defer r.Close()
for _, f := range r.File {
if f.IsEncrypted() {
f.SetPassword(password)
}
r, err := f.Open()
if err != nil {
log.Fatal(err)
}
// ファイルの中身を読み込み
buf, err := ioutil.ReadAll(r)
if err != nil {
log.Fatal(err)
}
defer r.Close()
// fmt.Printf("Size of %v: %v byte(s)\n", f.Name, len(buf))
// ファイル書き出し
createDir(newDir)
fileName,_ := Sjis2Utf8(f.Name)
err = ioutil.WriteFile(filepath.Join(newDir, fileName), buf, 0644)
if err != nil {
log.Fatal(err)
}
break
}
}
OpenAiをgolangから使うライブラリ
参考