Go语言基础: Switch语句、Arrays数组、Slices切片 详细教程案例

文章目录

  • [一. Switch语句](#一. Switch语句)
    • [1. Default case](#1. Default case)
    • [2. Multiple expressions in case](#2. Multiple expressions in case)
    • [3. Expressionless switch](#3. Expressionless switch)
    • [4. Fallthrough](#4. Fallthrough)
    • [5. break](#5. break)
    • [6. break for loop](#6. break for loop)
  • [二. Arrays数组](#二. Arrays数组)
    • [1. when arrays are passed to functions as parameters](#1. when arrays are passed to functions as parameters)
    • [2. Iterating arrays using range](#2. Iterating arrays using range)
    • [3.Multidimensional arrays 多维数组](#3.Multidimensional arrays 多维数组)
  • [三. Slices切片](#三. Slices切片)
    • [1. Creating a slice](#1. Creating a slice)
    • [2. Modifying a slice](#2. Modifying a slice)
    • [3. Length and capacity of a slice](#3. Length and capacity of a slice)
    • [4. Creating a slice using make](#4. Creating a slice using make)
    • [5. Appending to a slice](#5. Appending to a slice)
    • [6. Passing a slice to a function](#6. Passing a slice to a function)
    • [7. Multidimensional slices](#7. Multidimensional slices)
    • [7. Memory Optimisation](#7. Memory Optimisation)

一. Switch语句

1. Default case

go 复制代码
	finger := 6
	fmt.Printf("Finger %d is ", finger)
	switch finger {
	case 1:
	    fmt.Println("Thumb")
	case 2:
	    fmt.Println("Index")
	case 3:
	    fmt.Println("Middle")
	case 4: // 不能出现相同的数字
	    fmt.Println("Ring")
	case 5:
	    fmt.Println("Pinky")
	default: //default case	如果没有则执行默认
	    fmt.Println("incorrect finger number")
	}
	
	/// 输出: Finger 6 is incorrect finger number

2. Multiple expressions in case

go 复制代码
	letter := "a"
	fmt.Printf("Letter %s is a ", letter)
	switch letter {
	case "a", "b", "c", "d":
	    fmt.Println("Vowel")
	default:
	    fmt.Println("No Vowel")
	}
	
	/// 输出 Letter a is a Vowel

3. Expressionless switch

go 复制代码
	num := 75
	switch { // expression is omitted
	case num >= 0 && num <= 50:
	    fmt.Printf("%d is greater than 0 and less than 50", num)
	case num >= 51 && num <= 100:
	    fmt.Printf("%d is greater than 51 and less than 100", num)
	case num >= 101:
	    fmt.Printf("%d is greater than 100", num)
	}
	/// 75 is greater than 51 and less than 100

4. Fallthrough

go 复制代码
	switch num := 25; {
	case num < 50:
	    fmt.Printf("%d is lesser than 50\n", num)
	    fallthrough		// 关键字
	case num > 100: // 当这句是错误的 也会继续运行下一句
	    fmt.Printf("%d is greater than 100\n", num)
	}
	
	///	25 is lesser than 50
	///	25 is greater than 100

5. break

go 复制代码
	switch num := -7; {
	case num < 50:
	    if num < 0 {
	        break		// 小于0就被break了
	    }
	    fmt.Printf("%d is lesser than 50\n", num)
	    fallthrough
	case num < 100:
	    fmt.Printf("%d is lesser than 100\n", num)
	    fallthrough
	case num < 200:
	    fmt.Printf("%d is lesser than 200", num)
}

6. break for loop

go 复制代码
	randloop:
		for {
			switch i := rand.Intn(100); {	// 100以内随机数
			case i%2 == 0:	// 能被2整除的i
				fmt.Printf("Generated even number %d", i)
				break randloop	// 必须添加break
			}
		}
	///  Generated even number 86

二. Arrays数组

go 复制代码
	var a [3]int //	int array with length 3
	a[0] = 11
	a[1] = 12
	a[2] = 13
	
	b := [3]int{15, 16, 17} // 注意声明了int类型就不能是别的类型
	
	c := [3]int{18}
	
	d := [...]int{19, 20, 21}
	
	e := [...]string{"USA", "China", "India", "Germany", "France"}
	f := e // a copy of e is assigned to f
	f[0] = "Singapore"
	fmt.Println("a is ", a)
	fmt.Println("b is ", b)
	
	fmt.Println(b) // [15 16 17]
	fmt.Println(a) // [11 12 13]
	fmt.Println(c) // [18 0 0]
	fmt.Println(d) // [19 20 21]
	fmt.Println(e) // [USA China India Germany France]
	fmt.Println(f) // [Singapore China India Germany France]
	fmt.Println(len(f))	// 5	Length of an array

1. when arrays are passed to functions as parameters

go 复制代码
    package main

    import "fmt"

    func changeLocal(num [5]int) {  
        num[0] = 22
        fmt.Println("inside function ", num)

    }
    func main() {  
        num := [...]int{33, 44, 55, 66, 77}
        fmt.Println("bebore passing to function", num)
        changeLocal(num) // num is passing by value
        fmt.Println("after passing to function", num)
    }

    // bebore passing to function [33 44 55 66 77]
    // inside function [22 44 55 66 77]
    // after passing to function [33 44 55 66 77]

2. Iterating arrays using range

go 复制代码
    a := [...]float64{13.14, 14.13, 15.20, 21, 52}
    for i := 0; i < len(a); i++ {
        fmt.Printf("%d th element of a is %.2f\n", i, a[i])
    }

	// 0 th element of a is 13.14
    // 1 th element of a is 14.13
    // 2 th element of a is 15.20
    // 3 th element of a is 21.00
    // 4 th element of a is 52.00


	a := [...]float64{13.14, 14.13, 15.20, 21, 52}
	sum := float64(0)
	for i, v := range a { //range returns both the index and value
		fmt.Printf("%d the element of a is %.2f\n", i, v)
		sum += v
	}
	fmt.Println("\nsum of all elements of a", sum)

	// 0 the element of a is 13.14
    // 1 the element of a is 14.13
    // 2 the element of a is 15.20
    // 3 the element of a is 21.00
    // 4 the element of a is 52.00

    // sum of all elements of a 115.47

3.Multidimensional arrays 多维数组

go 复制代码
    a := [...]float64{13.14, 14.13, 15.20, 21, 52}
    for i := 0; i < len(a); i++ {
        fmt.Printf("%d th element of a is %.2f\n", i, a[i])
    }

	// 0 th element of a is 13.14
    // 1 th element of a is 14.13
    // 2 th element of a is 15.20
    // 3 th element of a is 21.00
    // 4 th element of a is 52.00


	a := [...]float64{13.14, 14.13, 15.20, 21, 52}
	sum := float64(0)
	for i, v := range a { //range returns both the index and value
		fmt.Printf("%d the element of a is %.2f\n", i, v)
		sum += v
	}
	fmt.Println("\nsum of all elements of a", sum)

	// 0 the element of a is 13.14
    // 1 the element of a is 14.13
    // 2 the element of a is 15.20
    // 3 the element of a is 21.00
    // 4 the element of a is 52.00

    // sum of all elements of a 115.47

三. Slices切片

1. Creating a slice

go 复制代码
	c := []int{555, 666, 777}
	fmt.Println(c)		// [555 666 777]


	a := [5]int{76, 77, 78, 79, 80}
	var b []int = a[1:4] // creates a slice from a[1] to a[3]
	fmt.Println(b)		// [77 78 79]

2. Modifying a slice

go 复制代码
	darr := [...]int{57, 89, 90, 82, 100, 78, 67, 69, 59}
	dslice := darr[2:5]               // 90 82 100
	fmt.Println("array before", darr) // array before [57 89 90 82 100 78 67 69 59]
	for i := range dslice {
		dslice[i]++ // 每一位数字+1
	}
	fmt.Println("array after", darr) // array after [57 89 91 83 101 78 67 69 59]

		
	// 实例2
	numa := [3]int{78, 79, 80}
	nums1 := numa[:] //creates a slice which contains all elements of the array
	nums2 := numa[:]
	fmt.Println("array before change 1", numa) // [78 79 80]
	nums1[0] = 100
	fmt.Println("array after modification to slice nums1", numa) // [100 79 80]
	nums2[1] = 101
	fmt.Println("array after modification to slice nums2", numa) //  [100 101 80]

3. Length and capacity of a slice

go 复制代码
	fruitarray := [...]string{"apple", "orange", "grape", "mango", "water melon", "pine apple", "chikoo"}
	fruitslice := fruitarray[1:3]
	fmt.Printf("length of slice %d capacity %d", len(fruitslice), cap(fruitslice)) //length of fruitslice is 2 and capacity is 6
	fruitslice = fruitslice[:cap(fruitslice)]
	fmt.Println(fruitslice)     // [orange grape mango water melon pine apple chikoo]
	fmt.Println("After re-slicing length is", len(fruitslice), "and capacity is ", cap(fruitslice)) // After re-slicing length is 6 and capacity is  6

4. Creating a slice using make

go 复制代码
	package main
	
	import (  
	    "fmt"
	)
	
	func main() {  
	    i := make([]int, 5, 5)
	    fmt.Println(i)
	}

5. Appending to a slice

go 复制代码
	cars := []string{"Ferrari", "Honda", "Ford"}
	fmt.Println("cars:", cars, "has old length", len(cars), "and capacity", cap(cars)) //capacity of cars is 3
	cars = append(cars, "Toyota")
	fmt.Println("cars:", cars, "has new length", len(cars), "and capacity", cap(cars)) //capacity of cars is doubled to 6 容量自动变大

	// 实例2
	var names []string	//zero value of a slice is nil
	if names == nil { // nil == None
		fmt.Println("Slice is nil going to append")
		names = append(names, "John", "Like", "Lisa")
		fmt.Println("names contents:", names)		// names contents: [John Like Lisa]
	}

6. Passing a slice to a function

go 复制代码
	func SubtactOne(numbers []int) {
	for i := range numbers { // i = index numbers = values
		fmt.Println(i, numbers)
		numbers[i] -= 2 // 每次循环-2
		}
	}

	func main() {
	nos := []int{4, 5, 6}
	fmt.Println("slice before function call", nos) // [4 5 6]
	SubtactOne(nos)                                //function modifies the slice
	fmt.Println("slice after function call", nos)  //  [2 3 4]
    }

7. Multidimensional slices

go 复制代码
	pls := [][]string{
		{"C", "C--"},
		{"Python"},
		{"JavaScript"},
		{"Go", "Rust"},
	}
	for _, v1 := range pls {
		for _, v2 := range v1 {
			fmt.Printf("%s", v2)
		}
		fmt.Printf("\n")
	}

7. Memory Optimisation

go 复制代码
	func Countries() []string {
	countries := []string{"China", "USA", "Singapore", "Germany", "India", "Australia"} // len:6, cap:6
	neededCountries := countries[:len(countries)-2]                                     // len:4, cap:6
	countriesCpy := make([]string, len(neededCountries))                                // len:4, cap:4
	copy(countriesCpy, neededCountries)                                                 // copy the make cap , values is neededCountries
	return countriesCpy                                                                 // return list
	}
    func main() {
        countriesNeeded := Countries() // 赋值
        fmt.Println(countriesNeeded)   // [China USA Singapore Germany]
    }
相关推荐
问道飞鱼1 分钟前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
拓端研究室1 分钟前
R基于贝叶斯加法回归树BART、MCMC的DLNM分布滞后非线性模型分析母婴PM2.5暴露与出生体重数据及GAM模型对比、关键窗口识别
android·开发语言·kotlin
Code成立3 分钟前
《Java核心技术I》Swing的网格包布局
java·开发语言·swing
Auc247 分钟前
使用scrapy框架爬取微博热搜榜
开发语言·python
中草药z8 分钟前
【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)
java·数据库·spring boot·spring·bean·源码阅读
QQ同步助手14 分钟前
C++ 指针进阶:动态内存与复杂应用
开发语言·c++
信徒_16 分钟前
常用设计模式
java·单例模式·设计模式
凯子坚持 c20 分钟前
仓颉编程语言深入教程:基础概念和数据类型
开发语言·华为
神仙别闹21 分钟前
基于C#实现的(WinForm)模拟操作系统文件管理系统
java·git·ffmpeg
小爬虫程序猿22 分钟前
利用Java爬虫速卖通按关键字搜索AliExpress商品
java·开发语言·爬虫