今回は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をもっと詳しくなりたい方に
golang学習のために筆者が実際に受講したUdemy教材をまとめています。
golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。
【入門】golangの学習におすすめの本/書籍7選
これから業務でgolangを使うことになった方、これからgolangを使ってキャリアを歩んでいきたいという方でどのように学習していこうか悩んでいる方もいるかと思います。 ...