//数组
/*
数组的长度是固定的,不可改变。
var s = [3]int{1, 2, 3} ---var s [3]int = [3]int{1, 2, 3}
q := [...]int{1, 2, 3}
如果...出现在标明数组长度的位置,那么数组的长度由初始化时数组里元素的个数决定。
需要注意的是[3]int和[2]int并不属于同一个数据类型
如果两个数组属于同一个数据类型,它们就可以用==来进行比较
m := [2]int{1} ---未初始化的部分会使用该元素类型的空值(int:0,string:"",指针:nil)
n := [...]int{1, 2}
m == n ---比较两个数组中的元素是否全相等
r := [...]{99: -1} ---定义了数组r,有100个元素,最后一个元素是-1,其余的是空值(0)。
当数组作为参数传递给函数时,函数将会复制整个数组。
*/
//slice
/*
slice通常写出[]T,其中元素类型都是T。
slice表示一个拥有相同类型元素的可变长度的而序列。
数组和slice紧密关联,slice用来访问数组里部分或者全部元素,而这个数组称为slice的底层数组。
slice有三个属性:指针,长度和容量。
指针指向底层数组可访问的第一个元素的地址。(所以这个元素可以不是底层数组的第一个元素)
长度指slice中的元素个数。( len(sliceName)返回长度 )
容量指指针指向的元素到底层数组最后一个元素的个数。( cap(sliceName)返回容量 )
显然一个底层数组可以对应多个slice,且slice之间可以重叠。
slice操作符s[i:j]
months := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
q := months[4, 7] ---[4 5 6]
所以q的len:3,cap:9
s := []int{1, 2, 3, 4, 5}
这种声明方式表示创建一个底层数组和一个slice。slice长度与容量相等,指针指向底层数组第一个元素。
内置函数make可以创建一个具有指定元素类型,长度和容量的slice。
其中容量参数可以省略,这样长度就和容量相等
make([]T, len)
make([]T, len, cap)
内置append函数用来将元素追加到slice的后面,增加slice的长度。
如果长度超出了容量,就新创建一个底层数组将之前的数据复制过去。
var x []int
x = append(x, 1)
x = append(x, 1, 2, 3)
x = append(x, x...) ---追加x中的所有元素
*/
//map
/*
map:拥有键值对元素的无序集合。
map[k]V 其中k是键的数据类型,V是值的数据类型。
ages := map[string]int {
"Tom": 31,
"Lisa": 33,
}
等价于
ages := make(map[string]int)
ages["Tom"] = 31
ages["Lisa"] = 33
delete(ages, "Tom") ---根据键来移除元素
age, ok := ages["Tom"]
查找键Tom对应的值,如果没有传回当前类型空值,ok记录是否成功查询到。
若没有给定的键在map中,就返回值类型的零值
*/
//结构体
/*
type Employee struct {
ID int
Name string
}
var tom Employee
结构体通过.来访问其内部成员
tom.ID = 12
tom.Name = "Tom"
等价于
tom := Employee{12, "Tom"}
需要注意的是指针也是通过.来访问的
tomPtr := &tom
tomPtr.Name = "TOM"
等价于
(*tomPtr).Name = "tom"
如果结构体的所有成员变量都可以比较,那么这个结构体就是可比较的。
可以用==或者!=。
*/
//for 循环
/*
在Go中只有for这一个循环结构
for {
body
}
表示死循环
for a <= b {
body
}
for i := 0; i <= 10; i++ {
body
}
for ; ; {
body
}
表示死循环
nums := []int{1, 2, 3, 4}
for i, j := range nums {
body
}
range nums返回两个参数,第一个是下标,第二个是对应下标的值。
不想使用可以用占位符_替换i或者j
*/
//switch
/*
基本用法
switch var {
case var1:
....
case var2:
....
....
....
....
default:
....
}
*/
package main
import "fmt"
func main() {
/* 定义局部变量 */
var grade string = "B"
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
fmt.Printf("你的等级是 %s\n", grade );
}
//if
/*
if a == b {
...
}else if a == c {
...
}else {
...
}
*/