1. 数组的声明和零值
声明语句:
var myArray [4]int
零值:数字类型初始化为0,string初始化为空串,bool初始化为false
package main
import "fmt"
func main() {
var myArray [4]int
fmt.Printf("myArray: %v\n", myArray) //myArray: [0 0 0 0]
赋值:下标赋值
package main
import "fmt"
func main() {
var myArray [4]string
myArray[0] = "ddd"
myArray[1] = "ccc"
myArray[2] = "aaa"
myArray[3] = "bbb"
fmt.Printf("myArray: %v\n", myArray) //myArray: [ddd ccc aaa bbb]
}
2. 数组字面量和短变量声明
如果实现知道数组里面的值,就可以在声明的时候顺便初始化了。和 java 的区别就是不需要 new,语法格式有些不一样。
var nodes [7]int = [7]int{1,2,3,4,5,6,7};
短变量声明:
notes := [7]string{"a", "b", "c", "d", "e", "f", "g"};
注意一点是如果你声明数组的时候是在不同行赋值的,那么结尾要加上一个逗号
notes := [7]string{
"a",
"b",
"c",
"d",
"e",
"f",
"g",//这个括号是必须的
};
3. 循环里面访问数组
注意下标越界问题:
package main
import "fmt"
func main() {
notes := [7]string{
"a",
"b",
"c",
"d",
"e",
"f",
"g",//这个括号是必须的
};
for i := 0; i <= 6; i++{
fmt.Println(i, notes[i])
//0 a
//1 b
//2 c
//3 d
//4 e
//5 f
//6 g
}
}
4. 使用len函数检查数组长度
len(数组) = 数组长度
,这里注意下面使用 < 而不是 <=,避免越界
func main() {
notes := [7]string{"a", "b", "c", "d", "e", "f", "g"};
for i := 0; i < len(notes); i++{
fmt.Print(i, notes[i], " ") //0a 1b 2c 3d 4e 5f 6g
}
}
5. 使用 for…range 安全遍历数组
格式:for index, value := range notes{}
index就是保存每个元素索引的遍历,value就是用来保存每个变量的值,range是关键字,notes是要处理的数组
package main
import "fmt"
func main() {
notes := [7]string{"a", "b", "c", "d", "e", "f", "g"};
for index, value := range notes{
fmt.Print(index, value, " ") //0a 1b 2c 3d 4e 5f 6g
}
}
上面的遍历中,如果 index 或者 value 不想要使用,那么可以用空白标识符
for _, value := range notes{
fmt.Print(value, " ") //a b c d e f g
}
案例1:使用 range 遍历求得数组中的数字之和
package main
import "fmt"
func main() {
ints := [7]int{1,2,3,4,5,6,7}
sum := 0
for _, pks := range ints{
sum += pks
}
fmt.Printf("sum: %v\n", sum) //sum: 28
}
案例2:使用 range 遍历求得数组中的数字平均值
package main
import (
"fmt"
)
func main() {
ints := [7]float64{1.0,2.0,3.0,4.0,5.0,6.0,7.0}
sum := 0.0
for _, pks := range ints{
sum += pks
}
sampleCount := float64(len(ints));
fmt.Printf("Average: %0.2f\n", sum/sampleCount) //Average: 4.00
}
6. 读取文本文件
基础代码
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
file, err := os.Open("five/data.txt")
if err != nil{
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan(){ //循环读取,每次从文件只能读取一行,一直读取到文件结尾
fmt.Println(scanner.Text()) //获取读取的这行
//71.8
//56.2
//89.5
}
err = file.Close() //关闭文件
if err != nil{
log.Fatal(err)
}
if scanner.Err() != nil{
log.Fatal(scanner.Err())
}
}
修改一下,读入数组中
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
)
func main() {
file, err := os.Open("five/data.txt")
if err != nil{
log.Fatal(err)
}
var strs [3]float64
var index int = 0 //下标
scanner := bufio.NewScanner(file)
for scanner.Scan(){ //从文件只能读取一行
f, err := strconv.ParseFloat(scanner.Text(), 64)
if err != nil{
log.Fatal(err)
}
strs[index] = f
index++
}
err = file.Close()
if err != nil{
log.Fatal(err)
}
if scanner.Err() != nil{
log.Fatal(scanner.Err())
}
//最后打印出来
fmt.Printf("strs: %v\n", strs)
//strs: [71.8 56.2 89.5]
}
如有错误,欢迎指出!!!!