主頁 >  其他 > [GO語言基礎] 五.順序控制陳述句和條件控制陳述句(if、else、switch)

[GO語言基礎] 五.順序控制陳述句和條件控制陳述句(if、else、switch)

2021-02-17 10:52:19 其他

作為網路安全初學者,會遇到采用Go語言開發的惡意樣本,因此從今天開始從零講解Golang編程語言,一方面是督促自己不斷前行且學習新知識;另一方面是分享與讀者,希望大家一起進步,前文介紹了Golang的運算,包括算術運算、邏輯運算、賦值運算、位運算及編程練習,這篇文章將詳細講解順序控制陳述句和條件控制陳述句, 這系列文章入門部分將參考“尚硅谷”韓順平老師的視頻和書籍《GO高級編程》,詳見參考文獻,并結合作者多年的編程經驗進行學習和豐富,且看且珍惜吧!后續會結合網路安全進行GO語言實戰深入,加油~

這些年我學過各種編程語言,從最早的C語言到C++,再到C#、PHP、JAVA,再到IOS開發、Python,到最新的GO語言,學得是真的雜,有時候覺得編程語言恰恰是最簡單的,而通過一門編程語言能夠解決實際問題或深入底層才是其價值所在,并且當我們學好一門編程語言后,其他編程語言都非常類似,殊途同歸,學起來也很迅速,

在這里插入圖片描述

原始碼下載地址:

  • https://github.com/eastmountyxz/Go-learning

前文參考:

  • [GO語言基礎] 一.為什么我要學習Golang以及GO語言入門普及
  • [GO語言基礎] 二.編譯運行、語法規范、注釋轉義及API標準庫知識普及
  • [GO語言基礎] 三.變數宣告、資料型別、識別符號及編程練習12題
  • [GO語言基礎] 四.算術運算、邏輯運算、賦值運算、位運算及編程練習
  • [GO語言基礎] 五.順序控制陳述句和條件控制陳述句(if、else、switch)

文章目錄

  • 一.順序控制陳述句
  • 二.條件控制陳述句
    • 1.單分支控制
    • 2.雙分支控制
    • 3.多分支控制
    • 4.嵌套分支
  • 三.switch分支控制
  • 四.編程練習
    • 1.題目
    • 2.答案
  • 五.總結


在程式中,程式運行的流程控制決定程式是如何執行的,也是大家必須要掌握的,主要有三大流程控制陳述句,這篇文章先介紹前兩個流程控制,

  • 順序控制
  • 分支控制
  • 回圈控制

一.順序控制陳述句

順序控制是指程式從上到下逐行地執行,中間沒有任何判斷和跳轉,其流程圖如下所示:

在這里插入圖片描述

下面舉個簡單的案例說明,代碼中沒有判斷,程式按照默認的流程執行,即順序控制,

package main
import "fmt"

func main() {
	//假如還有97天放假 問多少個星期多少天
	var num int = 97
	var week int
	var day int
	week = num / 7
	day = num % 7
	fmt.Printf("%d個星期零%d天 \n", week, day)

	//定義一個變數保存華氏溫度 轉換成攝氏溫度
	//攝氏溫度=5/9*(攝氏溫度-32)
	var huashi float32 = 134.2
	var sheshi float32
	sheshi = 5.0 / 9 * (huashi - 32)
	fmt.Printf("%v 對應的攝氏溫度=%v \n", huashi, sheshi)
}

輸出結果如下圖所示:

在這里插入圖片描述

注意,Golang中定義變數時采用合法的前向參考,比如正確形式:

func main() {
	var num1 int = 10          //宣告num1
	var num2 int = num1 + 20   //使用num1
	fmt.Println(num2)
}

錯誤形式:

func main() {
	var num2 int = num1 + 20   //使用num1
	var num1 int = 10          //宣告num1(x)
	fmt.Println(num2)
}

二.條件控制陳述句

分支控制是讓程式有選擇執行,包括三種常見形式:

  • 單分支
  • 雙分支
  • 多分支

1.單分支控制

基本語法如下:

if 條件運算式 {
	執行代碼塊
}

說明:當條件運算式為True時,就會執行括號中的代碼塊, 注意{}是必須有的,即使只寫一行代碼,對應的流程圖如下所示:

在這里插入圖片描述

案例分析:撰寫代碼實作輸入人的年齡,如果年齡大于18歲,則輸出“你的年齡大于18歲”,

package main
import "fmt"

func main() {
	//輸入年齡
	var age int
	fmt.Println("請輸入年齡:")
	fmt.Scanln(&age)

	//單分支判斷
	if age > 18 {
		fmt.Println("你的年齡大于18歲")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述

注意事項:

  • 在golang中支持在if陳述句直接定義一個變數,如下所示:
if n := 20; n > 5 {
	fmt.Println("定義變數的值數字大于5")
}

2.雙分支控制

基本語法如下:

if 條件運算式 {
	執行代碼塊1
} else {
	執行代碼塊2
}

說明:當條件運算式為True時,否則執行代碼塊2,注意{}是必須有的,即使只寫一行代碼, 對應的流程圖如下所示:

在這里插入圖片描述

案例分析:撰寫代碼實作輸入人的年齡,如果年齡大于18歲,則輸出“你的年齡大于18歲”;否則輸出“你的年齡小于等于18歲”,

package main
import "fmt"

func main() {
	//輸入年齡
	var age int
	fmt.Println("請輸入年齡:")
	fmt.Scanln(&age)

	//單分支判斷
	if age > 18 {
		fmt.Println("你的年齡大于18歲")
	} else {
		fmt.Println("你的年齡小于等于18歲")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述

注意事項:

  • 條件運算式是age > 18,執行代碼塊1和執行代碼塊2
  • 雙分支只會執行其中一個分支

條件陳述句嵌套
案例:對下列代碼,若有輸出,指出輸出結果,

package main
import "fmt"

func main() {
	var x int = 4
	var y int = 1
	
	//雙分支嵌套判斷
	if (x > 2) {
		if (y > 2) {
			fmt.Println(x + y)
			fmt.Println("執行陳述句:----a----")
		}
		fmt.Println("執行陳述句:----b----")
	} else {
		fmt.Println("x is", x, "y is", y)
		fmt.Println("執行陳述句:----c----")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述

條件判斷

  • 宣告兩個int32型變數并復制,判斷兩個數之和,如果大于等于50輸出
  • 宣告兩個float64型變數,判斷第一個數大于10.0,并且第二個數小于20.0輸出兩數之和
  • 宣告兩個int32型變數,判斷兩者之和是否能被3又能被5整除,輸出資訊
package main
import "fmt"

func main() {
	//判斷兩個數之和大于等于50
	var n1 int32 = 10
	var n2 int32 = 50
	if n1 + n2 >= 50 {
		fmt.Println("相加結果大于等于50")
	}

	//判斷第一個數大于10.0,并且第二個數小于20.0
	var n3 float64 = 11.0
	var n4 float64 = 17.0
	if n3 > 10.0 && n4 < 20.0 {
		fmt.Println("輸出兩數之和 =", (n3+n4))
	}
	
	//判斷兩者之和是否能被3又能被5整除
	var n5 int32 = 10
	var n6 int32 = 5
	if (n5 + n6) % 3 == 0 && (n5 + n6) % 5 ==0 {
		fmt.Println("能被3和5整除")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述

錯誤案例1:編譯錯誤,缺少括號{}

  • syntax error: unexpected newline, expecting { after if clause

在這里插入圖片描述

錯誤案例2:編譯錯誤,else不能換行

  • syntax error: unexpected else, expecting }

在這里插入圖片描述


3.多分支控制

基本語法如下:

if 條件運算式1 {
	執行代碼塊1
} else if 條件運算式2 {
	執行代碼塊2
}
...
 else {
 	執行代碼塊n
}

說明:

  • 先判斷條件運算式1是否成立,如果為True,就執行代碼塊1
  • 如果條件運算式1位False,就去判斷條件運算式2是否成立,如果條件運算式2成立,就執行代碼塊2
  • 依次類推,如果所有的條件運算式不成立,就執行else陳述句塊
  • else不是必須的
  • 注意:多分支陳述句只能有一個執行入口

對應的流程圖如下所示:

在這里插入圖片描述

案例分析:撰寫代碼實作考試成績判斷,如果成績大于等于90則為A,如果成績[80,90)則為B,依次類推不及格為E,

package main
import "fmt"

func main() {
	//輸入變數
	var score int
	fmt.Println("請輸入成績:")
	fmt.Scanln(&score)

	//多分支判斷
	if score >= 90 {
		fmt.Println("該同學成績為A")
	} else if score >=80 && score < 90 {
		fmt.Println("該同學成績為B")
	} else if score >=70 && score < 80 {
		fmt.Println("該同學成績為C")
	} else if score >=60 && score < 70 {
		fmt.Println("該同學成績為D")
	} else {
		fmt.Println("該同學成績為E")
	}
	fmt.Printf("成績為:%d", score)
}

輸出結果如下圖所示:

在這里插入圖片描述

注意事項:

  • 初學者需要注意多分支陳述句的條件判斷,經常會陷入判斷融合的情況,比如下圖只會輸出“ok1”,

在這里插入圖片描述

案例1:融合bool型別多分支判斷

package main
import "fmt"

func main() {
	//多分支判斷
	var b bool = true
	if b == false {
		fmt.Println("a")
	} else if b {
		fmt.Println("b")
	} else if !b {
		fmt.Println("c")
	} else {
		fmt.Println("d")
	}
}

輸出結果為“b”,如果將第一個判斷修改成“b=false”是否能編譯通過呢?答案是否,它會提示編譯錯誤,因為if條件運算式不能是賦值陳述句,

在這里插入圖片描述

案例2:輸入一個字符,判斷:

  • 它是否為大寫字母,如果是轉換成小寫;
  • 它是否為小寫字母,如果是轉換層大寫;
  • 否則,輸出原字符
package main
import "fmt"

func main() {
	var ch byte
	var res byte
	fmt.Println("請輸入字母:")
	fmt.Scanf("%c", &ch)

	//大小寫轉換
	if ch >= 'A' && ch <= 'Z' {
		res = ch + 32
	} else if ch >= 'a' && ch <= 'z' {
		res = ch - 32
	} else {
		res = ch
	}
	fmt.Printf("輸入字母:%c %v \n", ch, ch)
	fmt.Printf("輸出結果:%c %v \n", res, res)
}

輸出結果如下圖所示,這道題目非常棒,希望大家熟練掌握,知識點包括:

  • ASCII碼大小寫轉換方法
  • 多分支條件陳述句
  • char字符型變數輸入輸出

在這里插入圖片描述


4.嵌套分支

在一個分支結果中又完整嵌套另一個完整的分支結構,里面的分支結構稱為內層分支,外面的分支結構稱為外層分支,基本語法如下:

if 條件運算式 {
	if 條件運算式 {
		陳述句塊
	} else {
		陳述句塊
	}
	....
}

注意事項:

  • 嵌套分支不宜過多,建議控制在三層內

案例分析:

  • 參加百米運動會,如果用時8秒以內進入決賽,否則提示淘汰;并且根據性別提示進入男子組或女子組,我們輸入成績和性別進行相關判斷,
package main
import "fmt"

func main() {
	var sex string
	var second float64

	fmt.Println("請輸入秒數:")
	fmt.Scanln(&second)

	//嵌套分支
	if second <=8 {
		fmt.Println("請輸入性別:")
		fmt.Scanln(&sex)
		if sex == "男" {
			fmt.Println("進入決賽的男子組")
		} else if sex == "女" {
			fmt.Println("進入決賽的女子組")
		} else {
			fmt.Println("性別輸入錯誤")
		}
	} else {
		fmt.Println("淘汰未進入決賽")
	}
}

輸出結果如圖所示:

在這里插入圖片描述


三.switch分支控制

switch陳述句用于基于不同條件執行不同動作,每個case分支都是唯一的,從上往下逐一測驗,直到匹配為止,注意,匹配項后面不需要再加break

基本語法如下:

switch 運算式 {

case 運算式1, 運算式2, ...:
	陳述句塊1
case 運算式3, 運算式4, ...:
	陳述句塊2
	....
default:
    陳述句塊n
}

對應的流程圖如下所示:

  • switch的執行流程是先執行運算式,得到值,然后和case的運算式進行比較,如果相等,就匹配到;接著執行對應case的陳述句塊,然后退出switch控制,
  • 如果switch運算式的值沒有和任何case的運算式匹配成功,則執行default的陳述句塊,執行后退出switch的控制,
  • golang中的case后的運算式可以有多個,使用逗號間隔,
  • golang中的case陳述句塊不需要寫break,因為默認會有,即在默認情況下,當程式執行完case陳述句塊后,就直接退出該switch控制結構,

在這里插入圖片描述

下面簡單實作一個switch陳述句案例,請撰寫程式實作輸入某個字符,然后a表示周一,b表示周二,c表示周三,根據用戶的輸入依次顯示資訊,

package main
import "fmt"

func main() {
	var key byte
	fmt.Println("請輸入a到g的一個字符")
	fmt.Scanf("%c", &key)

	//switch陳述句
	switch key {
		case 'a':
			fmt.Println("今天星期一")
		case 'b':
			fmt.Println("今天星期二")
		case 'c':
			fmt.Println("今天星期三")
		case 'd':
			fmt.Println("今天星期四")
		case 'e':
			fmt.Println("今天星期五")
		case 'f':
			fmt.Println("今天星期六")
		case 'g':
			fmt.Println("今天星期天")
		default:
			fmt.Println("輸入有誤....")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述

注意事項:
(1) case和switch后是一個運算式,即常量值、變數、一個有回傳值的函式等

在這里插入圖片描述

(2) case后的各個運算式值的資料型別,必須和switch的運算式資料型別一致

在這里插入圖片描述

(3) case后面可以帶多個運算式,使用逗號間隔,如下圖所示:

在這里插入圖片描述

(4) case后的運算式如果是常量值,則要求不能重復

在這里插入圖片描述

(5) case后面不需要帶break,程式匹配到一個case后就會執行對應的代碼塊,然后退出switch,如果一個都匹配不到,則執行default

(6) default陳述句不是必須的

(7) switch后也可以不帶運算式,類似于if-else分支來使用;同時case中也可以對范圍進行判斷

package main
import "fmt"

func main() {
	//switch后不接運算式 類似于if-else分支來使用
	var age int = 10

	switch {
		case age == 10:
			fmt.Println("年齡為10")
		case age == 20:
			fmt.Println("年齡為20")
		default:
			fmt.Println("沒有匹配到")
	}

	//case中也可以對范圍進行判斷
	var score int = 90
	switch {
		case score > 90:
			fmt.Println("成績優秀...")
		case score >= 70 && score <= 90:
			fmt.Println("成績良好...")
		case score >=60 && score <70:
			fmt.Println("成績及格...")
		default:
			fmt.Println("不及格")
	}
}

(8) switch后也可以直接宣告定義變數,分好結束,但不推薦使用,

在這里插入圖片描述

(9) switch穿透fallthrough,如果在case陳述句塊后增加fallthrough,則會繼續執行下一個case,也叫switch穿透,

package main
import "fmt"

func main() {
	//switch穿透fallthrough
	var age int = 10

	switch age {
		case 10:
			fmt.Println("年齡為10")
			fallthrough   //默認只能穿透一層
		case 20:
			fmt.Println("年齡為20")
			fallthrough
		case 30:
			fmt.Println("年齡為30")
		default:
			fmt.Println("沒有匹配到")
	}

}

輸出結果如下圖所示:

在這里插入圖片描述

(10) Type Switch,switch陳述句還可以被用于type-switch來判斷某個interface(介面)變數中實際指向的變數型別,后續文章會補充interface,

package main
import "fmt"

func main() {
	//type-switch
	var x interface{}     //定義空介面
	var y = 10.0
	x = y

	switch i := x.(type) {
		case nil:
			fmt.Printf("x的型別是:%T", i)
		case int:
			fmt.Printf("x是int型")
		case float64:
			fmt.Printf("x是float64型")   //輸出結果
		case func(int) float64:
			fmt.Printf("x是func(int)型")
		case bool, string:
			fmt.Printf("x是bool或string型")
		default:
			fmt.Println("未知型別")
	}
}

最后簡單總結switch和if的區別:

  • 如果判斷的具體數值不多,而且符合整數、浮點數、字符、字串這幾種型別,建議使用switch陳述句,簡潔高效,
  • 其他情況:對區間判斷和結果為bool型別的判斷使用if,并且if的使用范圍更廣,
  • 作者個人習慣是使用if陳述句,很少用到switch陳述句,

四.編程練習

1.題目

(1) 判斷一個年份是否是閏年,閏年的條件是符合以下二者之一,

  • 年份能被4整除,但不能被100整除
  • 年份能被400整除

(2) 請分別使用if和switch陳述句實作成績判斷,輸出分數對應的等級,

  • [100, 90] => A
  • [80, 90) => B
  • [70, 80) => C
  • [60, 70) => D
  • [0, 60) => E

(3) 根據淡旺季的月份和年齡,實作一個票價系統,

  • 旺季:4-10月
    成人(18-60歲):60
    兒童(<18):半價
    老人(>60):1/3
  • 淡季
    成人:40
    其他:20

(4) 使用switch陳述句實作:根據用戶輸入月份,輸出對應春夏秋冬季節,

(5) 求ax^2+bx+c=0方程的根,a、b、c分別為函式的引數,如果b^2-4ac>0,則有兩個解;如果b^2-4ac=0,則有一個解;否則無解,

  • 提示:x1=(-b+sqrt(b^2-4ac))/2a
  • 提示:x2=(-b-sqrt(b^2-4ac))/2a

2.答案

(1) 判斷一個年份是否是閏年,閏年的條件是符合以下二者之一,

  • 年份能被4整除,但不能被100整除
  • 年份能被400整除

代碼如下:

package main
import "fmt"

func main() {
	//判斷閏年
	var year int
	fmt.Println("請輸入年份:")
	fmt.Scanln(&year)

	if (year % 4 == 0 && year % 100 !=0) || year % 400 == 0 {
		fmt.Println(year, "是閏年~")
	} else {
		fmt.Println(year, "不是閏年~")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述


(2) 請分別使用if和switch陳述句實作成績判斷,輸出分數對應的等級,

  • [100, 90] => A
  • [80, 90) => B
  • [70, 80) => C
  • [60, 70) => D
  • [0, 60) => E

代碼如下:

package main
import "fmt"

func main() {
	var score int
	fmt.Println("請輸入分數:")
	fmt.Scanln(&score)

	//if判斷
	if score >= 90 {
		fmt.Println("分數等級為A")
	} else if score >= 80 && score < 90 {
		fmt.Println("分數等級為B")
	} else if score >= 70 && score < 80 {
		fmt.Println("分數等級為C")
	} else if score >= 60 && score < 70 {
		fmt.Println("分數等級為D")
	} else {
		fmt.Println("不及格等級為E")
	}

	//switch判斷
	switch {
		case score > 90:
			fmt.Println("分數等級為A")
		case score >= 80 && score < 90:
			fmt.Println("分數等級為B")
		case score >=70 && score < 80:
			fmt.Println("分數等級為C")
		case score >=60 && score < 70:
			fmt.Println("分數等級為D")
		default:
			fmt.Println("不及格等級為E")
	}
}

輸出結果如下圖所示:
在這里插入圖片描述


(3) 根據淡旺季的月份和年齡,實作一個票價系統,

  • 旺季:4-10月
    成人(18-60歲):60
    兒童(<18):半價
    老人(>60):1/3
  • 淡季
    成人:40
    其他:20

代碼如下:

package main
import "fmt"

func main() {
	//出票系統
	var month byte
	var age byte
	var price float64 = 60.0

	fmt.Println("請輸入游玩月份:")
	fmt.Scanln(&month)
	fmt.Println("請輸入游客年齡:")
	fmt.Scanln(&age)

	if month >= 4 && month <= 10 {
		//旺季
		if age > 60 {
			fmt.Printf("%v月 票價 %v 年齡 %v \n", month, price / 3, age)
		} else if age >= 18 {
			fmt.Printf("%v月 票價 %v 年齡 %v \n", month, price, age)
		} else {
			fmt.Printf("%v月 票價 %v 年齡 %v \n", month, price / 2, age)
		}
	} else {
		//淡季
		if age >= 18 && age < 60 {
			fmt.Println("淡季成人票價 40")
		} else {
			fmt.Println("淡季兒童和老人票價 20")
		}
	}
}

輸出結果如下圖所示:

在這里插入圖片描述


(4) 使用switch陳述句實作:根據用戶輸入月份,輸出對應春夏秋冬季節,

代碼如下:

package main
import "fmt"

func main() {
	//季節判斷
	var month byte
	fmt.Println("請輸入月份:")
	fmt.Scanln(&month)

	switch month {
		case 3, 4, 5:
			fmt.Println("Spring")
		case 6, 7, 8:
			fmt.Println("Summer")
		case 9, 10, 11:
			fmt.Println("Autumn")
		case 12, 1, 2:
			fmt.Println("Winter")
		default:
			fmt.Println("Error Input")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述


(5) 求ax^2+bx+c=0方程的根,a、b、c分別為函式的引數,如果b^2-4ac>0,則有兩個解;如果b^2-4ac=0,則有一個解;否則無解,

  • 提示:x1=(-b+sqrt(b^2-4ac))/2a
  • 提示:x2=(-b-sqrt(b^2-4ac))/2a

注意,需要引入math.Sqrt(num)即可求平方根

package main
import "fmt"
import "math"

func main() {
	/* 
	 分析思路
	   1) a,b,c是給出的變數
	   2) 使用給出的數學公式和多分支陳述句計算
	   3) 匯入math包計算平方根
	*/
	var a float64
	var b float64
	var c float64
	fmt.Println("請輸入abc三個變數")
	fmt.Scanf("%f %f %f", &a, &b, &c)
	fmt.Printf("a=%v b=%v c=%v \n", a, b, c)

	m := b * b - 4 * a * c
	if m > 0 {
		x1 := (-b + math.Sqrt(m)) / (2 * a)
		x2 := (-b - math.Sqrt(m)) / (2 * a)
		fmt.Printf("x1=%v x2=%v", x1, x2)
	} else if m == 0 {
		x1 := (-b + math.Sqrt(m)) / (2 * a)
		fmt.Printf("x1=%v", x1)
	} else {
		fmt.Printf("無解")
	}
}

輸出結果如下圖所示:

在這里插入圖片描述


五.總結

寫到這里,這篇基礎性Golang文章介紹完畢,希望您喜歡!祝大家新年快樂,牛氣沖天,也希望自己能分享更優秀、更深入的文章,

  • 一.順序控制陳述句
  • 二.條件控制陳述句
    1.單分支控制
    2.雙分支控制
    3.多分支控制
    4.嵌套分支
  • 三.switch分支控制
  • 四.編程練習
    1.題目
    2.答案

Go基本運算和進制轉換了解后,后面的文章將詳細介紹Go語言的條件陳述句和回圈陳述句知識,并結合案例進行普及,希望這篇基礎性文章對您有幫助,寫得不好的地方還請海涵,同時非常感謝參考文獻中的大佬們的文章分享,尤其是韓順平老師,深知自己很菜,得努力前行,也希望自己能深入下去,未來四年好好研究Go編程語言,做更多實際工程,寫更好的文章,共勉!

源代碼下載地址:

  • https://github.com/eastmountyxz/Go-learning

2020年在github的綠瓷磚終于貼完了第一年提交2100余次,獲得1500多+stars,開源93個倉庫,300個粉絲,挺開心的,希望自己能堅持在github打卡五年,督促自己不斷前行,簡單總結下,最滿意的資源是YQ爆發時,去年2月分享的輿情分析和情感分析,用這系列有溫度的代碼為武漢加油;最高贊的是Python影像識別系列,也獲得了第一位來自國外開發者的貢獻補充;最花時間的是Wannacry逆向系列,花了我兩月逆向分析,幾乎成為了全網最詳細的該蠕蟲分析;還有AI系列、知識圖譜實戰、CVE復現、APT報告等等,當然也存在很多不足之處,希望來年分享更高質量的資源,也希望能將安全和AI頂會論文系列總結進來,真誠的希望它們能幫助到大家,感恩有你,一起加油~

在這里插入圖片描述

2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大資料分析、網路空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享論文的演算法實作,娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝,

在這里插入圖片描述

(By:娜璋AI之家 Eastmount 2021-02-16 星期二 夜于貴陽 https://blog.csdn.net/Eastmount)


參考文獻:

  • Go官網:https://golang.org/
  • 韓老師視頻:https://www.bilibili.com/video/BV1pt41127FZ
  • https://www.runoob.com/go/go-tutorial.html
  • Go中文網在線標準庫檔案:https://studygolang.com/pkgdoc
  • 《C程式設計》譚浩強老師
  • 《GO高級編程》

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260337.html

標籤:其他

上一篇:搜索技術——《演算法競賽入門到進階》

下一篇:二戰游戲 鋼鐵雄心 種草 1.10.2

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more