#### function
– Named return values
names should be used to document the meaning of the return values.
func split(sum int)(x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main(){
fmt.Println(split(17))
}
$ go build hello.go && ./hello
7 10
### Variables
The var statement declares a list of variables, as in function argument lists, the type is last.
var c, python, java bool
func main(){
var i int
fmt.Println(i, c, python, java)
}
initializer
short variable
L inside a function, the := short assignment statement can be used in place of var declaration with implicit type.
var i, j int = 1, 2
func main(){
var c, python, java = true, false, "no!"
k := 3
fmt.Println(i, j, k, c, python, java)
}
$ go build hello.go && ./hello
1 2 3 true false no!
Basic types
L bool, string, int, uint, byte, rune, float32, float64, complex64, complex128
import (
"fmt"
"math/cmplx"
)
var (
ToBe bool = false
MaxInt uint64 = 1<<64 -1
z complex128 = cmplx.Sqrt(-5 + 12i)
)
func main(){
fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
fmt.Printf("Type: %T Value: %v\n", z, z)
}
$ go build hello.go && ./hello
Type: bool Value: false
Type: uint64 Value: 18446744073709551615
Type: complex128 Value: (2+3i)
Zero values
package main
import "fmt"
func main(){
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
$ go build hello.go && ./hello
0 0 false “”
Type conversions
– The expression T(v) converts the value v to the type T.
import (
"fmt"
"math"
)
func main(){
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
$ go build hello.go && ./hello
3 4 5
Type inference
– The variable’s type is inferred from the value on the right hand side.
func main(){
v := 42
fmt.Printf("v is of type %T\n", v)
}
$ go build hello.go && ./hello
v is of type int
Constants
– constants are declared like variables, but with the const keyword.
const Pi = 3.14
func main(){
const World = "世界"
fmt.Println("Hello", World)
fmt.Println("Hello", Pi, "Day")
const Truth = true
fmt.Println("Go rules", Truth)
}
$ go build hello.go && ./hello
Hello 世界
Hello 3.14 Day
Go rules true
Numeric Constants
const (
Big = 1 << 100
Small = Big >> 99
)
func needInt(x int) int {return x*10 + 1}
func needFloat(x float64) float64 {
return x * 0.1
}
func main(){
fmt.Println(needInt(Small))
fmt.Println(needFloat(Small))
fmt.Println(needFloat(Big))
}
$ go build hello.go && ./hello
21
0.2
1.2676506002282295e+29
ふう…
英語だと変な脳みそ使うね