Package
-
package
math/rand的名字就是 rand. -
Exported name first letter is capital letter e.g.
math.Pi.
Functions
-
when defining function, types comes after the name
-
you can also write
x, y int -
a function can return multi type value
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
-
you can use nake return statement, but you should avoid doing it.
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
Types
-
all the types are
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for uint8
rune // alias for int32
// represents a Unicode code point
float32 float64
complex64 complex128
-
you should define a variable with its type, otherwise you should intialize it
var c, python, java = true, false, "no!"
-
Inside a function, the := short assignment statement can be used in place of a var declaration with implicit type.
-
use simple function for type convention
var i int = 42 var f float64 = float64(i) var u uint = uint(f) i := 42 f := float64(i) u := uint(f)
* defer can delay a function until other excuted, it follows a last-in-first-out order.
Some struct
Pointer
func main() {
i, j := 42, 2701
p := &i // point to i
fmt.Println(*p) // read i through the pointer
*p = 21 // set i through the pointer
fmt.Println(i) // see the new value of i
p = &j // point to j
*p = *p / 37 // divide j through the pointer
fmt.Println(j) // see the new value of j
}
output is : 42, 21, 73
==== Struct