見出し画像

golangで「invalid operation ~」というエラーが出たときの原因と対処法

今回はgolangで「invalid operation ~」というエラーが出たときの原因と解決策について紹介していきます。


golangで「invalid operation ~」というエラーが出た

golangで開発を行っていると「invalid operation ~」というエラーに遭遇します。

このエラーを直訳すると無効な操作いう意味となります。では具体的にどんなときに発生するエラーか見ていきましょう。


「invalid operation ~」の原因と対処法

「invalid operation ~」と言っても様々なシチュエーションで発生します。


異なる型の値を==で比較しようとしている

golangでは異なる型の値を「==」の比較演算子で比較しようとするとエラーになります。

func main() {
	var a int
	if a == nil {
		print(a)
	}
}

上記のコードでは数値とnilを比較しようとしています。

int型の場合は宣言時にゼロ値で初期化されます。intにはnilが入らず0が入ります。そのため上記のコードを実行すると以下のエラーが出力されます。

main.go:4:10: invalid operation: a == nil (mismatched types int and untyped nil)

このエラーを解消するにはnilではなく0で比較する必要があります。

func main() {
	var a int
	if a == 0 {
		print(a)
	}
}

上記コードを実行すると0が出力されます。

ちなみにstringの比較においてもnilを使用することはできません。

func main() {
	var a string
	if a == nil {
		print(a)
	}
}

stringのゼロ値は""であるため、比較する場合は""を指定しましょう。

func main() {
	var a string
	if a == "" {
		print(a)
	}
}



ポインタ型ではない変数にポインタでアクセスしようとしている

ポインタ型ではない変数にポインタでアクセスしようとすると「invalid operation ~」というエラーが発生します。

func main() {
	a := 1
	fmt.Println(*a)
}
main.go:7:15: invalid operation: cannot indirect a (variable of type int)

上記エラーを解消するにはポインタでアクセスすることを止めるか、変数をポインタで渡す場合は&を付けてアドレスを取得するようにします。

func main() {
	a := 1
	fmt.Println(a)
}
func main() {
	b := 1
	a := &b
	fmt.Println(*a)
}

どちらも実行結果は1が出力されます。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?