日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Go語言pointer及switch?fallthrough實戰詳解_Golang

作者:王中陽Go ? 更新時間: 2022-08-10 編程語言

前言

今天繼續為大家更新Go語言學習記錄的文章。

首先說明pointer指針switch是兩個并沒有直接關系的知識點,放在一篇文章中將的原因是,這兩個知識點在學習和使用的過程中往往被大家忽視。

pointer

go語言不存在指針操作,只有2個符號: &取內存地址 *根據內存地址取值

應用

n := 18
// 取地址
fmt.Println(&n)
fmt.Println(*&n)

打印結果:

查詢內存地址的類型

p := &n
// 根據地址取值
fmt.Printf("%T\n", p) // 打印結果是*int,即int類型的指針
m := *p
fmt.Println(m) //根據地址取值

打印結果:

我們發現打印的結果是:*int,即int類型的指針

nil pointer

var a1 *int     //nil pointer
fmt.Println(a1) //<nil>

var a2 = new(int)
fmt.Println(a2)  //內存地址 0xc000108010
fmt.Println(*a2) //0 根據內存地址取值 沒有值返回0

*a2 = 100        //根據內存地址賦值
fmt.Println(*a2) //100

打印結果:

小結

  • 對變量進行取地址操作(&),可以獲得這個變量的指針變量
  • 指針變量的值是指針地址(內存地址)
  • 對指針變量進行取值操作(*),可以獲得這個指針變量指向原變量的值,即通過內存地址取值。

switch

我們往往習慣于使用if判斷,switch可以簡化我們的if判斷。

switch的作用和if是一樣的,都是進行條件判斷,引入switch的原因是能簡化我們的if判斷,讓代碼的可讀性更強。

可讀性更好

舉個栗子:

if判斷來判斷手指的名稱:

finger :=2
if finger==1 {
   fmt.Println("大拇指")
}else if finger==2 {
   fmt.Println("食指")
}else if finger==5 {
   fmt.Println("小拇指")
}else {
   fmt.Println("無效")
}

switch判斷手指名稱

finger := 2
switch finger {
case 1:
   fmt.Println("大拇指")
case 2:
   fmt.Println("食指")
case 5:
   fmt.Println("小拇指")
default:
   fmt.Println("無效")
}

對比之下立竿剪影:switch case 這種方式可讀性更好。

case后支持多個參數

舉個栗子:奇偶數判斷

switch n := 3; n {
case 1, 3, 5, 7, 9:
   fmt.Println("奇數")
case 2, 4, 6, 8, 10:
   fmt.Println("偶數")
}

case后加判斷

舉個栗子:

age := 29
switch {
case age < 18:
   fmt.Println("好好學習Z")
case age > 18 && age < 60:
   fmt.Println("好好上班")
case age > 60:
   fmt.Println("希望不用繼續上班了,哈哈")
default:
   fmt.Println(age)
}

注意:當在case后加判斷時,switch后面不需要傳入參數,否則會報錯:類型不匹配。

fallthrough

使用建議

在一個 switch 塊內,每個 case 無需聲明 break 來終止 , 如果想順序執行使用 fallthrough ;在一個switch塊內,都必須包含一個 default 語句并且放在最后,即使它什么代碼也沒有。

package main

import "fmt"

func main() {

    switch {
    case false:
            fmt.Println("false1")
            fallthrough
    case true:
            fmt.Println("true1")
            fallthrough
    case false:
            fmt.Println("false2")
            fallthrough
    case true:
            fmt.Println("true2")
    case false:
            fmt.Println("false3")
            fallthrough
    default:
            fmt.Println("default case")
    }
}

總結

相信大家閱讀完這篇文章對go語言中的指針有了更深刻的理解

至于switch,只要我們心里有這個概念即可:switch作用和if一樣,當我們意識到需要寫多個if判斷時,改用switch實現,往往會是比較好的實踐。

原文鏈接:https://juejin.cn/post/7072502044170387492

欄目分類
最近更新