| @ -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) | |||
| } | |||