goto語句_11. Go語言流程控制:goto 無條件跳轉

90807f10b11c2e542e38393ff5956b3f.png

本文原文:http://golang.iswbm.com

Github:https://github.com/iswbm/GolangCodingTime

Go里的流程控制方法還是挺豐富,整理了下有如下這么多種:

  • if - else 條件語句
  • switch - case 選擇語句
  • for - range 循環語
  • goto 無條件跳轉語句
  • defer 延遲執行

前面三種,我已經都講過了,今天要講講 goto 的無條件跳轉。

很難想象在 Go 居然會保留 goto,因為很多人不建議使用 goto,所以在一些編程語言中甚至直接取消了 goto。

我感覺 Go 既然保留,一定有人家的理由,只是我目前還沒感受到。不管怎樣,咱還是照常學習吧。

0. 基本模型

goto 顧言思義,是跳轉的意思。

goto 后接一個標簽,這個標簽的意義是告訴 Go程序下一步要執行哪里的代碼。

所以這個標簽如何放置,放置在哪里,是 goto 里最需要注意的。

goto 標簽;
...
...
標簽: 表達式;

1. 最簡單的示例

goto 可以打破原有代碼執行順序,直接跳轉到某一行執行代碼。

import "fmt"func main() {goto flagfmt.Println("B")
flag:fmt.Println("A")}

執行結果,并不會輸出 B ,而只會輸出 A

A

2. 如何使用?

goto 語句通常與條件語句配合使用。可用來實現條件轉移, 構成循環,跳出循環體等功能。

這邊舉一個例子,用 goto 的方式來實現一個打印 1到5 的循環。

import "fmt"func main() {i := 1
flag:if i <= 5 {fmt.Println(i)i++goto flag}
}

輸出如下

1
2
3
4
5

再舉個例子,使用 goto 實現 類型 break 的效果。

import "fmt"func main() {i := 1for {if i > 5 {goto flag}fmt.Println(i)i++}
flag:
}

輸出如下

1
2
3
4
5

最后再舉個例子,使用 goto 實現 類型 continue的效果,打印 1到10 的所有偶數。

import "fmt"func main() {i := 1
flag:for i <= 10 {if i%2 == 1 {i++goto flag}fmt.Println(i)i++}
}

輸出如下

2
4
6
8
10

3. 注意事項

goto語句與標簽之間不能有變量聲明,否則編譯錯誤。

import "fmt"func main() {fmt.Println("start")goto flagvar say = "hello oldboy"fmt.Println(say)
flag:fmt.Println("end")
}

編譯錯誤

.main.go:7:7: goto flag jumps over declaration of say at .main.go:8:6

好了,今天的文章就到這里了。

若今天的分享對你有幫助,不如點個贊,支持一下?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260369.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260369.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[BT5]信息收集1-2 Dnsmap

0.工具介紹 dnsmap is mainly meant to be used by pentesters during the information gathering/enumeration phase of infrastructure security assessments. During the enumeration stage, the security consultant would typically discover the target companys IP netb…

httpf發送 json_Java用HttpClient3發送http/https協議get/post請求,發送map,json,xml,txt數據...

使用的是httpclient 3.1&#xff0c;使用"httpclient"4的寫法相對簡單點&#xff0c;百度&#xff1a;httpclient https post當不需要使用任何證書訪問https網頁時&#xff0c;只需配置信任任何證書其中信任任何證書的類MySSLProtocolSocketFactory主要代碼&#xff…

分頁優化的四種方式

轉自&#xff1a;http://www.orczhou.com/index.php/2009/03/four-way-pager-display/ 很久以前讀了一篇關于分頁的文章&#xff0c;后來越想越有道理&#xff0c;最近又重新找出來&#xff0c;并做了翻譯&#xff0c;原文參考:Four ways to optimize paginated displays. 翻譯…

使用 VMControl 2.4 實現多網絡的 Power 服務器捕捉和系統部署

VMControl 作為 IBM Systems Director 的一個高級管理器&#xff0c;提供了一系列的管理功能幫助 Power 管理員快速捕獲部署虛擬機系統&#xff0c;進行虛擬化環境的管理。而現代的數據中心&#xff0c;出于安全性&#xff0c;網路負載等多重因素的考慮&#xff0c;一般會存在有…

windows python安裝_window 安裝 python

官網地址下載安裝包點擊下載 會自動識別你當前的系統&#xff0c;或者點擊你需要安裝的平臺或者選擇其他版本執行安裝高級選項說明&#xff1a;Install for all users 所有用戶可使用Associate files with Python 關聯PY相關的文件Create shortcuts for installed applications…

iOS應用內付費(IAP)開發步驟列表

iOS應用內付費(IAP)開發步驟列表 前兩天和服務端同事一起&#xff0c;完成了應用內付費&#xff08;以下簡稱IAP, In app purchase&#xff09;的開發工作。步驟繁多&#xff0c;在此把開發步驟列表整理如下。因為只是步驟列表&#xff0c;所以并不含詳細的說明教程&#xff0c…

【unity3d--初始學習五--c#腳本對xml文件的創建和解析】

本人用c#編寫腳本。 創建xml文件時&#xff0c;主要用到System.Xml包中的XmlDocument,XmlNode,XmlElement。下面是創建xml文檔的一般步驟&#xff1a; XmlDocument docnew XmlDocument(); //<?xml version"1.0"?> XmlNode xmlnoddoc.CreateNode(XmlNodeType.…

python計算機視覺編程(全)(強烈推薦)_推薦一個計算機視覺圖書:python計算機視覺編程...

編輯部的主頁&#xff1a;好像沒啥用每章的代碼&#xff0c;github上面的&#xff1a;中文版github上面&#xff0c;英文版&#xff1a;項目主頁&#xff1a;中文在線的書&#xff1a;然后下載安裝安裝好了以后&#xff0c;點擊自動的編輯器&#xff1a;新建工程&#xff0c;插…

mysql工具的使用_產品操作MySQL入門篇-工具使用

MYSQL本資料為產品崗位作為日常工作參考&#xff0c;語言口語化At 2019/4/15 By David.Yang數據庫怎么登錄/管理&#xff1f;登錄數據庫的方式有多種&#xff0c;比如本地Client登錄、通過數據庫管理工具登錄、通過瀏覽器訪問數據庫端WEB軟件登錄。通過各種方式登錄后&#xff…

在windows下運行spark

1.下載spark:spark-2.0.0-bin-hadoop2.7.tgz 2.解壓至D:\bigdata\spark-2.0.0-bin-hadoop2.7 3.配置環境變量 HADOOP_HOME:D:\bigdata\hadoop-2.7.2 SPARK_HOME:D:\bigdata\spark-2.0.0-bin-hadoop2.7 Path中添加&#xff1a;%HADOOP_HOME%\bin;%SPARK_HOME%\bin; 4.運行 先運行…

UIView使用UIMotionEffect效果

UIView使用UIMotionEffect效果 這個效果在模擬器上看不了,所以無法截圖. UIViewMotionEffect.h UIViewMotionEffect.m // // UIViewMotionEffect.h // // Copyright (c) 2014年 Nick Jensen. All rights reserved. //#import <UIKit/UIKit.h>interface UIView (Moti…

JavaSE_04異常處理

1. exception [ksep()n; ek-] n. 例外&#xff1b;異議 2. throw [θr] vt. 投&#xff1b;拋&#xff1b;擲 vi. 拋&#xff1b;投擲 n. 投擲&#xff1b;冒險 3. throws [θrz] n. 曲拐&#xff08;throw的復數形式&#xff09; v. 投&#xff1b;拋&#xff08;throw的三單形…

關于html和javascript在瀏覽器中的加載順序問題的討論

轉自&#xff1a;http://www.cnblogs.com/beyondstorm/archive/2008/09/17/1292940.html 前一陣子橫掃了javascript&#xff0c;當時自我感覺良好。現在一想&#xff0c;又覺得沒什么。今天的任務是把asp.net ajax中客戶端頁面生命周期那一章研究完。然而&#xff0c;因為這一章…

java 觀察者模式_Java技術干貨分享:深入理解觀察者模式原理與技術

來源&#xff1a;編程技術精選觀察者模式(Observer Pattern)也叫做發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式。這個模式的一個最重要的作用就是解耦。也就是將被觀察者和觀察者進行解耦&#xff0c;使得他們之間的依賴性更小&#xff0c;甚至做到毫無依賴。…

python導入pyecharts錯誤沒有pyecharts_python報No module named 'pyecharts'的錯誤怎么辦?

問&#xff1a;導包的時候報No module named pyecharts的錯誤怎么辦&#xff1f;答&#xff1a;報上述錯誤一般是因為pyecharts這個包沒有下載成功&#xff0c;下面給大家介紹一下pyecharts庫的安裝與使用方法&#xff01;pyecharts是Python的數據可視化庫&#xff0c;可以幫助…

iOS開發:AFNetworking、MKNetworkKit和ASIHTTPRequest比較

轉&#xff1a;http://www.xue5.com/Mobile/iOS/747036.html 之前一直在使用ASIHTTPRequest作為網絡庫&#xff0c;但是由于其停止更新&#xff0c;iOS7上可能出現更多的問題&#xff0c;于是決定更換網絡庫。 目前比較流行的網絡庫主要有AFNetworking和MKNetworkKit&#xff…

java .listfiles_Java File.listFiles()

全屏Java Java File.listFiles()方法具有以下語法。public File [] listFiles()示例在下面的代碼顯示如何使用File.listFiles()方法。import java.io.File;// At: W w W. y I i ba I.C o mpublic class Main {public static void main(String[] args) {// create new fileFile …

基礎入門_Python-內建函數.運維開發中eval內建函數的最佳實踐?

簡單介紹:說明: 在指定命名空間中計算參數字符串的有效表達式,并返回一個對象,Help on built-in function eval in module __builtin__:eval(...)eval(source[, globals[, locals]]) -> valueEvaluate the source in the context of globals and locals.The source may be a…

java簡單畢設_計算機畢業設計之自定義畢設課題需要如何確定工作量

“ 真正讓導師滿意的不是眾多普通的功能&#xff0c;而是那一抹有創意的充滿著生活氣息的小功能。”自定義畢設課題&#xff0c;我覺得這是一種體現學生創新的一種很好的手段&#xff0c;但是有一些學生卻因為腦海中沒有積累足夠多的專業知識以及也沒有對現實生活進行足夠的思考…

C#基礎系列第五篇

前言&#xff1a; 完全是我在學習過程中記錄的筆記&#xff0c;只不過分享一下讓很多剛開始學習.net編程的人能夠很快的學會C#語言 多態的一些說明(1) 多態就是為了程序的可擴展性 (2)多態的使用&#xff1a;將不同的對象當作父類來看&#xff0c;屏蔽掉各個對象間的不同&#…