例如import "math/rand",可以看到rand目录下的go文件的package包名都是rand
通过import关键字实现包的引入,有两种方式:分解组合导入;多个import分别导入,推荐使用分解组合导入的形式
//组合形式,推荐使用
import (
"fmt"
"math"
)
//多import分别导入,不推荐使用
import "fmt"
import "math"
//多参数
//多返回值
//参数类型相同,可省略前面的类型定义
func compute(x,y int)(int,int) {
return y,x
}
//指定返回值a,b
func swap(x int,y int)(a,b int) {
a = x
b = y
return
}
package main
import "fmt"
//包级别,多参数定义,类型在最后
var c, python, java bool
func main() {
//函数级别
var i int
fmt.Println(i, c, python, java)
}
// 不省略类型的初始值
var i ,j int = 0,1
func test() {
//省略类型的初始值,自动采用初始值的类型
var c, python, java = true, false, "no!"
fmt.Println(i,j,c,python,java)
}
//无效定义,包层级定义短变量出错
k := 1
func shortVariables() {
//短变量定义在函数体内
i,j := 0,1
fmt.Println("i: " ,i," j: ",j)
}
注意点,int、unit、unitptr在32位操作系统上是32位,在64位操作系统上是64位,当我们需要定义整数类型时,一般默认使用int类型即可,除非我们需要特定大小或者无符号类型的整数类型。
定义的变量,在没有给定严格的初始化值的时候,默认的初始值为“0”值
类型推导:不论是使用 := 的语法定义变量,还是使用var 的语法定义变量,变量的类型都是依赖等号右侧的值的类型,因此有两种推导方式
func typeInference() {
var i int = 1
//j右侧的i确定了类型
var j = i
//右侧为数值类型
k := 0
z := "0"
fmt.Printf("j type: %T\n k type: %T\n z type : %T\n ",j,k,z)
}
//数值类型,没有指定具体类型
const BIG = 1<<100
const SMALL = BIG >> 99
func numericConstants() {
//small int类型
needInt(SMALL)
//small 上下文推导float类型
needFloat(SMALL)
needFloat(BIG)
}
func needFloat(x float32) {
fmt.Println(x)
}
func needInt(x int) {
fmt.Println(x)
}
到这里,我们已经学完了go语言的基本相关语法,后续将学习流程控制语法