[Golang]range 使用细节

1. range 表达式的值
当for语句被执行的时候,在range关键自右边的number1会先被求值(下面程序码)。而这个位置上的代码被称为range表达式。
range表达式的结果值可以是array、pointer to an array、slice、string、map、channel(channel permitting receive operations 比如:chan int or - chan<- int)。

package main

import "fmt"

func main() {
	numbers1 := [...]int{1, 2, 3, 4, 5, 6}
	for i, e := range numbers1 {
		fmt.Println(i,e)
	}
	fmt.Println()

	for i := range numbers1 {
		fmt.Println(i)
	}
	fmt.Println()
}

https://play.golang.org/p/GDBWAZwZZ5N

numbers1 := [...]int{1, 2, 3, 4, 5, 6}
for i, e := range numbers1

对於不同种类的range表达式结果值,for语句的变数,数量可以不一样。
number1是一个array,那变数就可以有两个,第一个变数是索引值(i),第二个变数是元素值(e)。

numbers1 := [...]int{1, 2, 3, 4, 5, 6}
for i := range numbers1

在这个状况下,如果只写一个变数,得到的就会是索引值(i)。

2. slice为引用类型,array为值类型
值类型:变数直接储存值。(同属於值类型的包含,基础数据类型、结构体类型。)
引用类型:变数储存的是一个地址,而这个地址储存最终的值。(同属於引用类型的包含,字典、通道、函数类型。)

package main

import "fmt"

func main() {
	numbers1 := [...]int{1, 2, 3, 4, 5, 6}
	maxIndex1 := len(numbers1) - 1
	for i, e := range numbers1 {
		if i == maxIndex1 {
			numbers1[0] += e
		} else {
			numbers1[i+1] += e
		}
	}
	fmt.Println(numbers1)
	fmt.Println()

	numbers2 := []int{1, 2, 3, 4, 5, 6}
	maxIndex2 := len(numbers2) - 1
	for i, e := range numbers2 {
		if i == maxIndex2 {
			numbers2[0] += e
		} else {
			numbers2[i+1] += e
		}
	}
	fmt.Println(numbers2)
}

https://play.golang.org/p/79dR8P2bQCW

参考来源

郝林-Go语言核心36讲


<<:  FortiGate 60E 设置虚拟服务器

>>:  CISSP很难考吗?

.Net Core Web Api_笔记20_api结合ADO.NET资料库操作part8_新闻文章查询

在大量数据同时表格陈列於画面上时通常 都会需要有一些关键字查询的机制 新增Search的Action...

Day 5: LeetCode 88. Merge Sorted Array

Tag:随意刷-[50-100] LeetCode Problem Source: 88. Merg...

Day14. 时光时光慢些吧,让世界慢下来 - TimeScale

昨天看到运镜这词,大家是不是会想到拍电影呢?今天的主题也是跟电影有关的(?),大家看电影的时候,遇到...

Day 11 - 除了写程序之外还要访谈厂商之体验

昨天的文章有提到计画案有部分的厂商是需要去挖掘的,也因此今天会来分享一个计画案出现前与厂商面谈的心得...

[重构倒数第23天] - Tab 的 page 加入 router

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...