@ -0,0 +1,41 @@ | |||
package main | |||
import "fmt" | |||
func getData() []interface{} { | |||
return []interface{}{ | |||
1, | |||
3.14, | |||
"hello", | |||
true, | |||
struct{}{}, | |||
} | |||
} | |||
func typeCheck(v interface{}) string { | |||
switch v.(type) { | |||
case string: | |||
return "string" | |||
case bool: | |||
return "bool" | |||
case float32, float64: | |||
return "float" | |||
case int, int32, int64: | |||
return "int" | |||
default: | |||
return "unknown" | |||
} | |||
} | |||
func main() { | |||
data := getData() | |||
for i := 0; i < len(data); i++ { | |||
fmt.Printf("%v is %v\n", data[i], typeCheck(data[i])) | |||
} | |||
} |
@ -0,0 +1,40 @@ | |||
package main | |||
import "fmt" | |||
type point struct { | |||
x int | |||
y int | |||
} | |||
func compare() (bool, bool) { | |||
point1 := struct { | |||
x int | |||
y int | |||
}{ | |||
10, | |||
10, | |||
} | |||
point2 := struct { | |||
x int | |||
y int | |||
}{} | |||
point2.x = 10 | |||
point2.y = 5 | |||
point3 := point{10, 10} | |||
return point1 == point2, point1 == point3 | |||
} | |||
func main() { | |||
a, b := compare() | |||
fmt.Println("point1 == point2:", a) | |||
fmt.Println("point1 == point3:", b) | |||
} |
@ -0,0 +1,65 @@ | |||
package main | |||
import "fmt" | |||
type name string | |||
type location struct { | |||
x int | |||
y int | |||
} | |||
type size struct { | |||
width int | |||
height int | |||
} | |||
type dot struct { | |||
name | |||
location | |||
size | |||
} | |||
func getDots() []dot { | |||
var dot1 dot | |||
dot2 := dot{} | |||
dot2.name = "A" | |||
dot2.x = 5 | |||
dot2.y = 6 | |||
dot2.width = 10 | |||
dot2.height = 20 | |||
dot3 := dot{ | |||
name: "B", | |||
location: location{ | |||
x: 13, | |||
y: 27, | |||
}, | |||
size: size{ | |||
width: 5, | |||
height: 7, | |||
}, | |||
} | |||
dot4 := dot{} | |||
dot4.name = "C" | |||
dot4.x = 101 | |||
dot4.location.y = 209 | |||
dot4.width = 87 | |||
dot4.size.height = 43 | |||
return []dot{dot1, dot2, dot3, dot4} | |||
} | |||
func main() { | |||
dots := getDots() | |||
for i := 0; i < len(dots); i++ { | |||
fmt.Printf("dot%v: %#v\n", i+1, dots[i]) | |||
} | |||
} |
@ -0,0 +1,26 @@ | |||
package main | |||
import ( | |||
"fmt" | |||
"math" | |||
) | |||
func convert() string { | |||
var i8 int8 = math.MaxInt8 | |||
i := 128 | |||
f64 := 3.14 | |||
m := fmt.Sprintf("int8 = %v -> int64 = %v\n", i8, int64(i8)) | |||
m += fmt.Sprintf("int = %v -> int8 = %v\n", i, int8(i)) | |||
m += fmt.Sprintf("int8 = %v -> float32 = %v\n", i8, float64(i8)) | |||
m += fmt.Sprintf("float64 = %v -> int = %v\n", f64, int(f64)) | |||
return m | |||
} | |||
func main() { | |||
fmt.Print(convert()) | |||
} |
@ -0,0 +1,29 @@ | |||
package main | |||
import ( | |||
"errors" | |||
"fmt" | |||
) | |||
func doubler(v interface{}) (string, error) { | |||
if i, ok := v.(int); ok { | |||
return fmt.Sprint(i * 2), nil | |||
} | |||
if s, ok := v.(string); ok { | |||
return s + s, nil | |||
} | |||
return "", errors.New("unsupported type passed") | |||
} | |||
func main() { | |||
res, _ := doubler(5) | |||
fmt.Println("5 :", res) | |||
res, _ = doubler("yum") | |||
fmt.Println("yum:", res) | |||
_, err := doubler(true) | |||
fmt.Println("true:", err) | |||
} |
@ -0,0 +1,62 @@ | |||
package main | |||
import ( | |||
"errors" | |||
"fmt" | |||
) | |||
func doubler(v interface{}) (string, error) { | |||
switch t := v.(type) { | |||
case string: | |||
return t + t, nil | |||
case bool: | |||
if t { | |||
return "truetrue", nil | |||
} | |||
return "falsefalse", nil | |||
case float32, float64: | |||
if f, ok := t.(float64); ok { | |||
return fmt.Sprint(f * 2), nil | |||
} | |||
return fmt.Sprint(t.(float32) * 2), nil | |||
case int: | |||
return fmt.Sprint(t * 2), nil | |||
case int8: | |||
return fmt.Sprint(t * 2), nil | |||
case int16: | |||
return fmt.Sprint(t * 2), nil | |||
case int32: | |||
return fmt.Sprint(t * 2), nil | |||
case int64: | |||
return fmt.Sprint(t * 2), nil | |||
case uint: | |||
return fmt.Sprint(t * 2), nil | |||
case uint8: | |||
return fmt.Sprint(t * 2), nil | |||
case uint16: | |||
return fmt.Sprint(t * 2), nil | |||
case uint32: | |||
return fmt.Sprint(t * 2), nil | |||
case uint64: | |||
return fmt.Sprint(t * 2), nil | |||
default: | |||
return "", errors.New("unsupported type passed") | |||
} | |||
} | |||
func main() { | |||
res, _ := doubler(-5) | |||
fmt.Println("-5: ", res) | |||
res, _ = doubler(5) | |||
fmt.Println("5: ", res) | |||
res, _ = doubler("yum") | |||
fmt.Println("yum: ", res) | |||
res, _ = doubler(true) | |||
fmt.Println("true:", res) | |||
res, _ = doubler(float32(3.14)) | |||
fmt.Println("3.14:", res) | |||
} |