#你好,Golang!
Let's Go
链接:
包
- GO程序是由包组成的
- 程序从main包开始执行
- 包名与导入路径的最后一个元素一致
导入
- 使用分组导入语句会好过多行多行语句
import (
"fmt"
"math"
)//分组导入
import "fmt"
import "math"
导出名
- 当导入一个包时,你只能使用开放的名字,包的外部任何无法访问不开放的名字
- 在Go中,如果一个名字以大写字母开头,那么它就是已导出的。未以大写字母开头,则是未导出的
函数
- 函数可以有一到多个参数
- 类型是追加在函数名后面的(这一点要注意!)
func add(x int,y int, z int) int{//这一点和C/C++有点不一样
return x+y+z
}
- 当两个或多个形参的类型一样,除最后一个类型以外,其它的都可以省略.
func add(x, y int, z bool) int {
return x+y
}
- 一个函数可以返回多个参数.
func swap(x int, y string) (string, int) {
return y, x
}
命名返回值
- 返回值可以被命名,它们被视为定义在函数顶部的变量
- 没有参数的return语句返回已命名的返回值
func Subtract(x,y int)(z int){
z = x -y
return
}
变量和初始化Variables and Initializers
- var语句可以定义多个变量
- 和函数的参数列表一样,参数在后面
- var语句可以出现在包或函数级别
- 变量的定义可以包含初始值每个变量对应一个
- 如果初始值已存在可以省略类型
- 变量会从初始值中获取类型
import "fmt"
var i, j int = 1, 2
func main() {
var c, python, java = true, false, "no!"
fmt.Println(i, j, c, python, java)
}
短变量定义
- 函数内, := 短变量定义可以替代 有明确类型的var 定义
- 函数外,每个语句必须以以关键字开始(var,func等等) 所以:=结构不可以使用
import "fmt"
// i := 1 This is not avalible!
func main() {
var i, j int = 1, 2
k := 3
e,t := "OJ","Bk"
c, python, java := true, false, "no!"
fmt.Println(e,t)
fmt.Println(i, j, k, c, python, java)
}
基础类型
- 变量的定义可以分组到一个块中,像导入语句一样
bool
string
int int8 int16 int32 int64
byte//alias for uint8
rune//alias for int32;represents a Unicode code point
float32 float64
complex64 complex128
import (
"fmt"
"math/cmplx"
)
var (
a bool = false
b string ="Hi,Go!"
c int = -12345
d uint64 = 1<<64 - 1
e byte = 123
f rune = 2
g float32 = 1.5
h complex128 = cmplx.Sqrt(-5 + 12i)
)
func main() {
fmt.Printf("Type: %T Value: %v\n", a, a)
fmt.Printf("Type: %T Value: %v\n", b, b)
fmt.Printf("Type: %T Value: %v\n", c, c)
fmt.Printf("Type: %T Value: %v\n", d, d)
fmt.Printf("Type: %T Value: %v\n", e, e)
fmt.Printf("Type: %T Value: %v\n", g, g)
fmt.Printf("Type: %T Value: %v\n", h, h)
}
零值
没有明确初始值的变量声明会被赋予零值
func main() {
var i int // 0
var f float64 // 0
var b bool // false
var s string // ""
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
类型转换
表达时将 T(v) 将值的类型转换为类型 T
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))//float64(值)
var z uint = uint(f)
fmt.Println(x, y, z)
}
常量
- 除了关键字key,常量和变量的定义一样
const pi = 3.14
func main(){
const d = 1
}