Go 言語の型アサーションの構文形式は次のとおりです。
value, ok := x.(T)
このうち、x はインターフェースのタイプを表し、T は特定のタイプを表します (インターフェースのタイプである場合もあります)。
このアサーション式は、x の値 (つまり、value) とブール値 (つまり、ok) を返します。これらは、x が T 型であるかどうかを判断するために使用できます。
- T が具象型の場合、型アサーションは x の動的型が具象型 T と等しいかどうかをチェックします。チェックが成功した場合、型アサーションによって返される結果は、型が T である x の動的値です。
- T がインターフェイス型の場合、型アサーションは x の動的型が T を満たすかどうかをチェックします。チェックが成功した場合、x の動的値は抽出されず、戻り値は型 T のインターフェイス値になります。
- T の型に関係なく、x が nil インターフェイス値の場合、型アサーションは失敗します。
サンプルコードは次のとおりです。
package main
import (
"fmt"
)
func main() {
var x interface{}
x = 10
value, ok := x.(int)
fmt.Print(value, ",", ok)
}
操作の結果は次のようになります。
10,true
2 番目のパラメーターが受信されない場合 (上記のコードでは問題ありません)、アサーションが失敗したときに直接パニックが発生することに注意してください。 x が nil の場合もパニックになります。
サンプルコードは次のとおりです。
package main
import (
"fmt"
)
func main() {
var x interface{}
x = "こんにちは"
value := x.(int)
fmt.Println(value)
}
操作の結果は次のようになります。
panic: interface conversion: interface {} is string, not int
型アサーションはスイッチでも使用できます。サンプルコードは次のとおりです。
package main
import (
"fmt"
)
func main() {
var a int
a = 10
getType(a)
}
func getType(a interface{}) {
switch a.(type) {
case int:
fmt.Println("aの型はintです")
case string:
fmt.Println("aの型はstringです")
case float64:
fmt.Println("aの型はfloatです")
default:
fmt.Println("未知の型です")
}
}
操作の結果は次のようになります。
aの型はintです






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)





