Tuple Assignment
Type Assertion
Need use interface{} to declare a variable
Check concrete type by v,ok := x.(T)
If type "T" can't be assigned by x, will panic
Type Assertion
package main
import (
"fmt"
)
type Name string
func main() {
var x interface{} = "dsa"
v, ok := x.(string)
fmt.Printf("v:%s, ok:%t\n", v, ok)
var y interface{} = Name("aaa")
v, ok = y.(string)
fmt.Printf("v:%s, ok:%t\n", v, ok)
// panic
// v, ok = y.(float64)
// fmt.Printf("v:%s, ok:%t\n", v, ok)
}
Output
v:dsa, ok:true
v:, ok:false
| |
Type Assertion Panic
package main
import (
"fmt"
)
type Name string
func main() {
var x interface{} = "dsa"
v, ok := x.(string)
fmt.Printf("v:%s, ok:%t\n", v, ok)
var y interface{} = Name("aaa")
v, ok = y.(string)
fmt.Printf("v:%s, ok:%t\n", v, ok)
// panic
// v, ok = y.(float64)
// fmt.Printf("v:%s, ok:%t\n", v, ok)
}
Output
************ Building Go project: TestGo ************
with GOPATH: C:\Users\isaac.liao\Go;C:\Users\isaac.liao\eclipse-workspace\TestGo
>> Running: C:\Go\bin\go.exe install -v -gcflags "-N -l" declaration
declaration
# declaration
declaration\variables.go:19:8: cannot assign float64 to v (type string) in multiple assignment
^^^ Terminated, exit code: 2 ^^^
************ Build terminated. ************
|
Assignability
Only an assignable value can be assigned to a variable
Only assignable variable can be compared to another variable
package main
import (
"fmt"
)
type Name string
func main() {
y := "y"
x2 := "x"
// x := Name("x") //panic
// y2 := Name("y") //panic
// fmt.Printf("%t\n", x == x2) //panic
// fmt.Printf("%t\n", x == y) //panic
// fmt.Printf("%t\n", y == x) //panic
fmt.Printf("%t\n", y == x2)
fmt.Printf("%t\n", y == y)
}
|
Panic
|
沒有留言:
張貼留言