| @@ -0,0 +1,136 @@ | |||||
| package main | |||||
| import ( | |||||
| "fmt" | |||||
| "strconv" | |||||
| ) | |||||
| type myFloat = float64 | |||||
| type myint int | |||||
| // func (m myFloat) double() myFloat { | |||||
| // } | |||||
| type person struct { | |||||
| age int | |||||
| name string | |||||
| } | |||||
| type student struct { | |||||
| age int // try swapping these fields | |||||
| name string | |||||
| } | |||||
| func (m myint) double() myint { | |||||
| return m * 2 | |||||
| } | |||||
| func main() { | |||||
| var a uint8 = 1 | |||||
| var b uint16 = 2 | |||||
| var c uint32 = 3 | |||||
| var d uint64 = 4 | |||||
| var e int8 = 1 | |||||
| var f int16 = 2 | |||||
| var g int32 = 3 | |||||
| var h int64 = 4 | |||||
| var i float32 = 1.1 | |||||
| var j float64 = 1.2 | |||||
| var k bool = true | |||||
| var l byte = 'c' | |||||
| var m byte = 99 | |||||
| var n rune = '😀' | |||||
| var o rune = 128512 | |||||
| var p string = "hello" | |||||
| var arr = [5]int{} | |||||
| var slice = []int{} | |||||
| var maps = map[int]int{} | |||||
| type empty struct{} | |||||
| var x = empty{} | |||||
| var y interface{} = x | |||||
| var function = func() int { | |||||
| return 42 | |||||
| } | |||||
| var aliasInt myint = 1 | |||||
| var aliasFloat myFloat = 5.0 | |||||
| fmt.Printf("Type of a=%T, b=%T, c=%T, d=%T\n", a, b, c, d) | |||||
| fmt.Printf("Type of e=%T, f=%T, g=%T, h=%T\n", e, f, g, h) | |||||
| fmt.Printf("Type of i=%T, j=%T\n", i, j) | |||||
| fmt.Printf("Type of k=%T\n", k) | |||||
| fmt.Printf("Type of l=%T, m=%T, n=%T, o=%T\n", l, m, n, o) | |||||
| fmt.Printf("Type of p=%T\n", p) | |||||
| fmt.Printf("Type of arr=%T\n", arr) | |||||
| fmt.Printf("Type of arr=%T\n", slice) | |||||
| fmt.Printf("Type of arr=%T\n", maps) | |||||
| fmt.Printf("Type of x=%T\n", x) | |||||
| fmt.Printf("Type of y=%T\n", y) | |||||
| fmt.Printf("Type of function=%T\n", function) | |||||
| fmt.Printf("Type of aliasInt=%T, aliasFloat=%T\n", aliasInt, aliasFloat) | |||||
| conversion() | |||||
| definedTypeConversion(aliasInt) | |||||
| definedTypeConversion(5) | |||||
| takesInt(5) | |||||
| // takesInt(aliasInt) // this does not work | |||||
| takesFloat(5) | |||||
| takeInt64(5) | |||||
| takeInt8(5) // try passing > 128 | |||||
| } | |||||
| func conversion() { | |||||
| var i int = 355 // type int | |||||
| f := float64(i) // type float64 | |||||
| b := i != 0 // type bool | |||||
| s := strconv.Itoa(i) | |||||
| by := byte(i) | |||||
| ui8 := 250 | |||||
| i8 := int8(ui8) | |||||
| fmt.Printf("%d\t%f\t%t\t%s\t%c\t%d\t%d\n", i, f, b, s, by, ui8, i8) | |||||
| p := person{age: 20, name: "john"} | |||||
| std := student{age: 15, name: "paul"} | |||||
| p2 := person(std) | |||||
| s2 := student(p) | |||||
| // p2 := *(*person)(unsafe.Pointer(&std)) | |||||
| // s2 := *(*student)(unsafe.Pointer(&p)) | |||||
| fmt.Printf("Type of p=%T, std=%T, p2=%T, s2=%T\n", p, std, p2, s2) | |||||
| } | |||||
| func definedTypeConversion(mi myint) { | |||||
| fmt.Printf("Type of mi=%T\n", mi) | |||||
| } | |||||
| func takesInt(i int) { | |||||
| fmt.Printf("Type of i=%T\n", i) | |||||
| } | |||||
| func takesFloat(f float32) { | |||||
| fmt.Printf("Type of i=%T\n", f) | |||||
| } | |||||
| func takeInt8(i int8) { | |||||
| fmt.Printf("Type of i=%T\n", i) | |||||
| } | |||||
| func takeInt64(i int64) { | |||||
| fmt.Printf("Type of i=%T\n", i) | |||||
| } | |||||