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