iT邦幫忙

0

[Golang]range 使用細節

  • 分享至 

  • xImage
  •  

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讲


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言