mirror of https://github.com/tinygo-org/tinygo.git
wasmstm32webassemblymicrocontrollerarmavrspiwasiadafruitarduinocircuitplayground-expressgpioi2cllvmmicrobitnrf51nrf52nrf52840samd21tinygo
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.1 KiB
63 lines
1.1 KiB
// This file tests interface types and interface builtins.
|
|
|
|
package main
|
|
|
|
// Test interface construction.
|
|
|
|
func simpleType() interface{} {
|
|
return 0
|
|
}
|
|
|
|
func pointerType() interface{} {
|
|
// Pointers have an element type, in this case int.
|
|
var v *int
|
|
return v
|
|
}
|
|
|
|
func interfaceType() interface{} {
|
|
// Interfaces can exist in interfaces, but only indirectly (through
|
|
// pointers).
|
|
var v *error
|
|
return v
|
|
}
|
|
|
|
func anonymousInterfaceType() interface{} {
|
|
var v *interface {
|
|
String() string
|
|
}
|
|
return v
|
|
}
|
|
|
|
// Test interface builtins.
|
|
|
|
func isInt(itf interface{}) bool {
|
|
_, ok := itf.(int)
|
|
return ok
|
|
}
|
|
|
|
func isError(itf interface{}) bool {
|
|
// Interface assert on (builtin) named interface type.
|
|
_, ok := itf.(error)
|
|
return ok
|
|
}
|
|
|
|
func isStringer(itf interface{}) bool {
|
|
// Interface assert on anonymous interface type.
|
|
_, ok := itf.(interface {
|
|
String() string
|
|
})
|
|
return ok
|
|
}
|
|
|
|
type fooInterface interface {
|
|
String() string
|
|
foo(int) byte
|
|
}
|
|
|
|
func callFooMethod(itf fooInterface) uint8 {
|
|
return itf.foo(3)
|
|
}
|
|
|
|
func callErrorMethod(itf error) string {
|
|
return itf.Error()
|
|
}
|
|
|