【Java轉Go】快速上手學習筆記(二)之基礎篇一

目錄

  • 創建項目
    • 數據類型
    • 變量常量
    • 類型轉換
    • 計數器
    • 鍵盤交互
    • 流程控制
    • 代碼
    • 運算符

創建項目

上篇我們安裝好了Go環境,和用IDEA安裝Go插件來開發Go項目:【Java轉Go】快速上手學習筆記(一)之環境安裝篇 。

這篇我們開始正式學習Go語言。我是看B站的視頻邊學邊看著視頻敲代碼的,所以代碼筆記也是按照視頻講的順序來寫的。

(然后還有個點需要說明一下,就是我這個筆記應該是只適合有其他編程語言基礎的人看,如果沒有其他語言基礎,還是要找視頻或資料系統的學習)

首先是創建一個項目:

在這里插入圖片描述
在這里插入圖片描述

項目創建好后,new一個Go File。
在這里插入圖片描述

數據類型

這里先說一下go的數據類型,主要分為四大類:布爾類、數字類、字符串類、派生類

布爾類就是true、false;數字類就是浮點數和整型;字符串類就字符串咯;派生類就比較多了,包括了指針類型(Pointer)、 數組類型、結構化類型(struct)、Channel 類型、函數類型、切片類型、接口類型(interface)、 Map 類型

在這里插入圖片描述

go中,所有數據類型都有一個默認值(零值),整型、浮點默認值是0,字符串類型默認是空字符串,布爾類型默認是false。

變量常量

在這里插入圖片描述

package mainimport "fmt"// 這里是全局變量
var num int = 100/*
這個是main函數,這是go語言啟動的入口
*/
func main() {fmt.Print("hello!world!") // 不換行打印fmt.Println("我是符華呀~")     // 換行打印fmt.Println("我是" + "符華呀") // 字符串連接,用+實現,打印的是:我是符華呀~// var 變量名 數據類型var name string = "符華" // 定義一個字符串變量var age int = 20       // 定義一個int變量name = "赤鳶"            // 改變name變量的值fmt.Println(name, age) // 打印name和age值,多個值直接用逗號隔開// 不過像版本較高的sdk,其實定義變量的時候,不用指定數據類型也可以,會自動識別,例如://var name,age,a,b = "符華",20,1.56,true
}

在這里插入圖片描述

注意,Go語言是不用寫分號的(編譯的時候會默認幫我們加分號),一行就是在最后默認加一個分號,一句代碼就是一行,不可以把多句代碼寫在一行。

在這里插入圖片描述

不過要是非得寫一行,一句代碼用分號分隔也是可以的,但是不建議這么寫。而且我用的idea,我這么寫后,會自動幫我格式化分成兩行并且把分號去掉了。

在這里插入圖片描述
當我們要拼接一個長字符串的時候,需要換行,這時,我們需要把換行的加號保留在上一行
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
除了用var聲明變量外,還可以用 := 聲明短變量。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

類型轉換

go中,基本數據類型的類型轉換必須顯示轉換(強制轉換),不能自動轉換。 轉換的表達式:T(v),T表示數據類型,v表示要轉換的變量。轉換時,被轉換的是變量存儲的值,變量本身的數據類型并沒有發生變化。

在這里插入圖片描述
其他類型轉string,使用 fmt.Sprintf
在這里插入圖片描述
在這里插入圖片描述

計數器

在這里插入圖片描述

鍵盤交互

在這里插入圖片描述

流程控制

流程控制語句:if、switch、for

if這個沒啥好說的,就是 if、else、else if,這個和Java一樣。

在這里插入圖片描述

在這里插入圖片描述

代碼

上面說到的代碼全在這里了,大家可以復制下來,自己從上到下一個一個去執行一遍(放開注釋),加深下印象。

package mainimport ("fmt"
)// 這里是全局變量
var num int = 100/*
這個是main函數,這是go語言啟動的入口
*/
func main() {fmt.Print("hello!world!") // 不換行打印fmt.Println("我是符華呀~")     // 換行打印fmt.Println("我是" + "符華呀") // 字符串連接,用+實現,打印的是:我是符華呀~// var 變量名 數據類型//var name string = "符華" // 定義一個字符串變量//var age int = 20       // 定義一個int變量//name = "赤鳶"            // 改變name變量的值//fmt.Println(name, age) // 打印name和age值,多個值直接用逗號隔開// 不過像版本較高的sdk,其實定義變量的時候,不用指定數據類型也可以,會自動識別,例如://var name,age,a,b = "符華",20,1.56,true// 字符串除了用雙引號,還可以用反單引號,也就是 `這里是內容`// 當我們有一個比較復雜的字符串時,用雙引號遇到特殊字符需要轉義,而且拼接比較麻煩,這時我們可以用反單引號var str = "abc\nabc"str = `abc\nabc`str = `package mainimport "fmt"func main() {fmt.Print("hello!world!") // 不換行打印fmt.Println("我是符華呀~")     // 換行打印fmt.Println("我是" + "符華呀") // 字符串連接,用+實現,打印的是:我是符華呀~var name string = "符華" // 定義一個字符串變量var age int = 20       // 定義一個int變量fmt.Println(name, age) // 打印name和age值,多個值直接用逗號隔開}`fmt.Println(str)/*定義多個變量*///var (//	name     string//	age      int//	addreass string//)//name = "符華"//age = 20//addreass = "惠州市"//fmt.Println(name, age, addreass)/*短變量初始化聲明,推導聲明寫法,可以用 := 自動識別變量類型,全局變量不能用短變量定義只能在函數內部使用,不能隨便到處聲明。由于使用了:=,而不是賦值的=,因此推導聲明寫法的左值變量必須是沒有定義過的變量。*///var name = "李四" // 不能先用var聲明了變量后,又用 := 去聲明//name := "張三"//age := 20//name = "符華"//fmt.Println(name, age)//fmt.Printf("%T,%T", name, age) // 按照指定的格式輸出,這里%T意思的類型,也就是打印這兩個變量的類型//var num int = 100//fmt.Printf("num:%d,內存地址:%p", num, &num) // %d表示數字,%p表示變量內存地址,然后取內存地址用 &變量名//num = 200//fmt.Printf("num:%d,內存地址:%p", num, &num)/*變量的交換*///var a int = 100//var b int = 200//b, a = a, b//fmt.Println(a, b)/*自增、自減:自增、自減只能作為表達式使用,而不能用于賦值語句。*///a := 1//a++//a--//var b intb = a++ // 這里是錯誤的用法//fmt.Println(b)/*匿名變量,用 _ 表示,本身是一個特殊標識符,被稱為空白標識符,表示任何類型都可以賦值給它,但任何賦值都將被拋棄使用匿名變量時,只需要在變量聲明的地方使用下劃線替換即可。*///a, _ := test() // 只需要取第一個返回值,所以第二個返回值用匿名變量接收//_, b := test() // 只需要取第二個返回值,所以第一個返回值用匿名變量接收//fmt.Println(a, b)/*常量定義*///const name1 string = "常量1" // 顯式定義//const name2 = "常量2"        // 隱式定義//const a, b, c = 3.14, "符華", false//fmt.Println(name1)//fmt.Println(name2)//fmt.Println(a, b, c)/*計數器:iota,每次在const關鍵字出現時,將被重置為0,const中每新增一行常量聲明將使iota計數一次(+1)*///const (//	a = iota  // 默認iota=0//	b         // iota=1//	c         // iota=2//	d = "hhh" // 輸出hhh,但是iota會繼續計數,iota=3//	e         // 輸出hhh,iota=4//	f = iota  // iota=5//	g = iota  // iota=6//	h         // iota=7//	i = "hhh" // 輸出hhh,iota=8//)//const (//	j = iota // 這里iota將重置為0//	k        // iota=1//)//fmt.Println(a, b, c, d, e, f, g, h, i, j, k)//var isFlag bool = true//fmt.Printf("%T\n%t\n", isFlag, isFlag)//var f1 float64 = 3.14//fmt.Printf("%T,%.2f\n", f1, f1) // %f表示輸出對應浮點數值,%.2f表示保留兩位小數(四舍五入)//var str string = "字符串"//fmt.Printf("%T,%s\n", str, str) // %s表示輸出對應字符串值//v1 := 'A'//v2 := "A"//fmt.Printf("%T,%d\n", v1, v1)//fmt.Printf("%T,%s\n", v2, v2)/*類型轉換:基本數據類型的類型轉換必須顯示轉換(強制轉換),不能自動轉換。轉換的表達式:T(v),T表示數據類型,v表示要轉換的變量。轉換時,被轉換的是變量存儲的值,變量本身的數據類型并沒有發生變化。*///a := 5.52//b := 3//c := int(a)//d := float64(b)//fmt.Printf("%T\n", a)//fmt.Printf("%T\n", b)//fmt.Printf("%T\n", c)//fmt.Printf("%T\n", d)// 其他類型轉stringnum1 := 100    // 整型num2 := 100.23 // 浮點isFlag := true // 布爾char := 'a'    // charvar str stringstr = fmt.Sprintf("%d", num1)fmt.Printf("類型=%T,值=%v\n", str, str)str = fmt.Sprintf("%f", num2)fmt.Printf("類型=%T,值=%v\n", str, str)str = fmt.Sprintf("%t", isFlag)fmt.Printf("類型=%T,值=%v\n", str, str)str = fmt.Sprintf("%c", char)fmt.Printf("類型=%T,值=%v\n", str, str)// string轉其他類型,用 strconv 包下對應的函數,如:ParseBool()、ParseInt()、ParseFloat/*輸入:鍵盤交互*///var x int//var y float64//fmt.Println("請輸入兩個數 1、整數 2、浮點數") 通過操作地址,將輸入的值賦值給變量//fmt.Scanln(&x, &y) // 等待鍵盤輸入//fmt.Println(x, y)//fmt.Println("請輸入一個字符串") 在io中,可以使用bufio包來讀取輸入的內容//reader := bufio.NewReader(os.Stdin)//s1, _ := reader.ReadSlice('\n')//fmt.Println("讀出的內容為:", s1)/*局部變量*///temp := 100           // func函數體里的局部變量//if b := 1; b <= 100 { // 這里定義了一個b變量,只作用于if語句里面//	temp := 50        // 這定義的是if語句內的局部變量,到了if語句外是不能使用的//	fmt.Println(temp) // 局部變量,就近原則//	fmt.Println(b)//}//fmt.Println(temp) // 這打印的是100//fmt.Println(num)/*switch:每寫一個case,不用寫break,除非使用了fallthrough穿透*///a := false//switch a {//case false://	fmt.Println("1、case條件為false")//	fallthrough // case穿透,不管下一個case的條件是否滿足,都會執行//case true://	if a == false {//		break // 中止case穿透//	}//	fmt.Println("2、case條件為true")//}//var score int = 90//switch score {//case 90://	fmt.Println("A")//	fallthrough // case穿透,不管下一個case的條件是否滿足,都會執行//case 80://	fmt.Println("B")//	fallthrough//case 50, 60, 70://	fmt.Println("C")//default://	fmt.Println("D")//}/*for循環*/// 計算1到10的數字之和//sum := 0//for i := 1; i <= 10; i++ {//	sum += i//}//fmt.Println(sum)// 無限循環//for {//	fmt.Println(0)//}//for j := 0; j < 5; j++ {//	for i := 0; i < 5; i++ {//		fmt.Print("* ")//	}//	fmt.Println()//}
}

運算符

關于運算符這里,我沒有記代碼(沒啥好記的),所以我在這就直接去某個學習網站截圖了🤪
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

上面幾個運算符,沒啥好說的,不過關于自增、自減有個地方需要注意,就是:Go 的自增、自減只能作為表達式使用,而不能用于賦值語句。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

其他運算符這個關于指針變量,我下一篇會寫。下一篇講函數、函數類型、值傳遞、引用傳遞、切片、指針、匿名函數、回調函數、泛型。

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

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

相關文章

MyBatis動態SQL:打造靈活可變的數據庫操作

目錄 if標簽trim標簽where標簽set標簽foreach標簽 動態SQL就是根據不同的條件或需求動態地生成查詢語句&#xff0c;比如動態搜索條件、動態表或列名、動態排序等。 if標簽 在我們填寫一些信息時&#xff0c;有些信息是必填字段&#xff0c;有的則是非必填的&#xff0c;這些…

淘寶API接口的實時數據和緩存數據區別

電商API接口實時數據是指通過API接口獲取到的與電商相關的實時數據。這些數據可以包括商品庫存、訂單狀態、銷售額、用戶活躍度等信息。 通過電商API接口&#xff0c;可以實時獲取到電商平臺上的各種數據&#xff0c;這些數據可以幫助企業或開發者做出及時的決策和分析。例如&…

vue動態修改audio地址

問題&#xff1a;點擊后替換url地址&#xff0c;實現了&#xff0c;但是播放器依舊沒有反應。 解決&#xff1a;vue中動態替換只是替換了地址&#xff0c;并沒有告訴audio標簽是否要執行&#xff0c;執行什么操作。要load后才能讓它知道&#xff0c;是在喊他&#xff0c;他需求…

秒懂算法 | 漢諾塔問題與木棒三角形

在數學與計算機科學中&#xff0c;遞歸(recursion)是指一個過程或函數在其定義或說明中又直接或間接調用自身的一種方法。它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解。遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算&#x…

Android性能優化——線程優化

一、線程調度原理 在任意時刻&#xff0c;CPU只能執行一條指令&#xff0c;每個線程獲取到CPU的使用權之后才可以執行指令也就是說在任意時刻&#xff0c;只有一個線程占用CPU 處于運行狀態 多線程并發&#xff0c;實際上是指多個線程輪流獲取CPU 的使用權然后分別執行各自的任…

系統安全測試要怎么做?

進行系統安全測試時&#xff0c;可以按照以下詳細的步驟進行&#xff1a; 1、信息收集和分析&#xff1a; 收集系統的相關信息&#xff0c;包括架構、部署環境、使用的框架和技術等。 分析系統的安全需求、威脅模型和安全策略等文檔。 2、威脅建模和風險評估&#xff1a; 使…

調用被fishhook的原函數

OC類如果通過runtime被hook了&#xff0c;可以通過逆序遍歷方法列表的方式調用原方法。 那系統庫的C函數被fish hook了該怎么辦呢&#xff1f; 原理和OC類異曲同工&#xff0c;即通過系統函數dlopen()獲取動態庫&#xff0c;以動態庫為參數通過系統函數dlsym()即可獲取目標系統…

leetcode292. Nim 游戲(博弈論 - java)

Nim 游戲 Nim 游戲題目描述博弈論 上期經典算法 Nim 游戲 難度 - 簡單 原題鏈接 - Nim游戲 題目描述 你和你的朋友&#xff0c;兩個人一起玩 Nim 游戲&#xff1a; 桌子上有一堆石頭。 你們輪流進行自己的回合&#xff0c; 你作為先手 。 每一回合&#xff0c;輪到的人拿掉 1 -…

494. 目標和

494. 目標和 原題鏈接&#xff1a;完成情況&#xff1a;解題思路&#xff1a;數組回溯法動態規劃 參考代碼&#xff1a;數組回溯法__494目標和__動態規劃 經驗吸取 原題鏈接&#xff1a; 494. 目標和 https://leetcode.cn/problems/target-sum/description/ 完成情況&#…

Android進階之多級列表

遇到一個需求需要顯示多級列表&#xff0c;因為界面是在平板上的&#xff0c;所以層級是從左向右往下排的&#xff0c;類似于 我當時的寫法是在xml布局里一個個RecyclerView往下排的 當然前提是已經規定好最大的層級我才敢如此去寫界面&#xff0c;如果已經明確規定只有兩級或…

69 # 強制緩存的配置

強制緩存 強制緩存&#xff1a;以后的請求都不需要訪問服務器&#xff0c;狀態碼為 200協商緩存&#xff1a;每次都判斷一下&#xff0c;告訴是否需要找緩存&#xff0c;狀態碼為 304 默認強制緩存&#xff0c;不緩存首頁&#xff08;如果已經斷網&#xff0c;那這個頁面應該…

Python發送QQ郵件

使用Python的smtplib可以發送QQ郵件&#xff0c;代碼如下 #!/usr/bin/python3 import smtplib from email.mime.text import MIMEText from email.header import Headersender 111qq.com # 發送郵箱 receivers [222qq.com] # 接收郵箱 auth_code "abc" # 授權…

Dockerfile概念、鏡像原理、制作及案例講解

1.Docker鏡像原理 Linux文件操作系統講解 2.鏡像如何制作 3.Dockerfile概念 Docker網址&#xff1a;https://hub.docker.com 3.1 Dockerfile關鍵字 4.案例

【數據結構OJ題】鏈表分割

原題鏈接&#xff1a;https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId8&&tqId11004&rp2&ru/activity/oj&qru/ta/cracking-the-coding-interview/question-ranking 目錄 1. 題目描述 2. 思路分析 3. 代碼實現 1. 題目描述 2…

AMD卡啟動Stable Diffusion AI繪畫的方法

WindowsAMD安裝法 1.安裝python 3.10.6&#xff0c;在python官網上下載安裝程序&#xff0c;***重要*** 在安裝的第一個窗口下方勾選“將python添加到path”。 2.安裝git 3.WindowsAMD使用AUTOMATIC1111的directml這一個fork&#xff0c;在這個頁面的第一段&#xff1a;https:/…

題目:2614.對角線上的質數

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;2614. 對角線上的質數 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 遍歷對角線上的元素&#xff0c;返回最大的質數或 0 即可。 解題代碼&#xff1a; class Solution {public int dia…

e.target.value和 binding.value 區別

e.target.value 和 binding.value 都是在 Vue.js 中用于處理事件綁定時的值&#xff0c;但它們的使用場景和含義有所不同&#xff0c;分別用于普通的 DOM 事件和自定義指令。 e.target.value&#xff1a; 這是常用于原生 DOM 事件處理函數中的一個屬性&#xff0c;用于獲取事件…

爬蟲逆向實戰(十七)--某某丁簡歷登錄

一、數據接口分析 主頁地址&#xff1a;某某丁簡歷 1、抓包 通過抓包可以發現數據接口是submit 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個enPassword加密參數 請求頭是否加密&#xff1f; 通過查看請求頭可以發現有一個To…

【面試高頻題】難度 3/5,字典樹熱門運用題

題目描述 這是 LeetCode 上的 「745. 前綴和后綴搜索」 &#xff0c;難度為 「困難」。 Tag : 「字典樹」 設計一個包含一些單詞的特殊詞典&#xff0c;并能夠通過前綴和后綴來檢索單詞。 實現 WordFilter 類&#xff1a; WordFilter(string[] words) 使用詞典中的單詞 words 初…

單片機之從C語言基礎到專家編程 - 4 C語言基礎 - 4.9 變量與常量

基本數據類型可以作為變量與常量使用,顧名思義&#xff0c;變量運行時可以改變其值&#xff0c;常量運行時不會改變其值。 常量分為整型常量、浮點型常量、字符常量、字符串常量和符號常量。 通常用#define來定義一個標識符來表示一個常量 用type name 常量來定義一個變量,…