函数
package main
import "fmt"
func add (x int , y int) int {
return x + y
}
func main(){
fmt.Println(add(11 , 12))
}
参数类型相同时可以缩写
package main
import "fmt"
func add (x, y int) int {
return x + y;
}
func main(){
fmt.Println(add(11 , 12))
}
返回值
多值返回
package main
import "fmt"
func swap(x , y string) (string , string){
return x , y
}
func main(){
a , b:=swap("hello","world")
fmt.Println(a , b)
}
命名返回
package main
import "fmt"
func split(sum int) (x, y int){
x = sum/2
y = sum/1
return
}
func main(){
fmt.Println(split(17))
}
变量
var语句可以出现在包或函数级别。
package main
import "fmt"
var c , py , java
func main(){
var i int
fmt.Println(i, c, py, java)
}
初始化
package main
import "fmt"
var i , j int = 1, 2
func main(){
var c, py, java = true, false, "no!"
fmt.Println(i, j, c, python, java)
}
短变量声明
package main
import "fmt"
func main(){
var i , j int = 1, 2
k := 3
c, py, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
基本类型
go的基本类型有bool, int, string,int16. int32, int64, uint, uint8, uint16, uint32, uint64, uintptr
package main
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)
}
零值
没有明确初始值的变量声明会被赋予它们的 零值。
零值是:
- 数值类型为
0, - 布尔类型为
false, - 字符串为
""(空字符串)。
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 在不同类型的项之间赋值时需要显式转换。
package main
import "fmt"
func main(){
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
i :=42
f :=float64(i)
u :=uint(f)
}
类型推导
package main
import "fmt"
func main() {
v := 42 // 修改这里!
s := "hi"
fmt.Printf("v is of type %T\n", v)
}
常量
常量的声明与变量类似,只不过是使用 const 关键字。
常量可以是字符、字符串、布尔值或数值。
常量不能用 := 语法声明。
package main
import "fmt"
func main() {
const World = "世界"
fmt.Println("Hello", World)
const Truth = true
fmt.Println("Go rules?", Truth)
}
数值常量
数值常量是高精度的 值,一个未指定类型的常量由上下文来决定其类型。
package main
import "fmt"
const(
a = 1 << 10
b = 2 >> 10
)
func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
return x * 0.1
}
func main(){
fmt.Println(needInt(a))
fmt.Println(needFloat(a))
fmt.Println(needFloat(b))
}