golang快速上手基礎語法

變量

第一種,指定變量類型,聲明后若不賦值,使用默認值0

package mainimport "fmt"func main() {var a int //第一種,指定變量類型,聲明后若不賦值,使用默認值0。fmt.Printf(" a= %d\n", a)
}

打印

第二種,根據值自行判定變量類型

package mainimport "fmt"func main() {var a = 33 //第二種,根據值自行判定變量類型fmt.Printf("a= %d\n", a)
}

打印

第三種,直接定義 變量需首次定義之前不可以為已用過的變量?

package mainimport "fmt"func main() {
c := 3 //第三種,直接定義 變量需首次定義之前不可以為已用過的變量 fmt.Printf(" a= %d\n", c)
}

打印

const

常量

package mainimport "fmt"func main() {const LENGTH int = 3const WIDTH int = 10var area intconst a, b, c = 1, false, "str" //多重賦值area = LENGTH * WIDTHfmt.Printf("面積為 : %d\n", area)println(a, b, c)}

這里和Java的常量定義是相同的

打印

多重定義枚舉

const (Unknown = 0Female = 1Male = 2
)

iota

它簡化了常量用于增長數字的定義,給以上相同的值以準確的分類。

package mainimport "fmt"const (One   int = 1 + iota // 1+0Two                  // 1+1Three                // 1+2Four                 // 1+3Five                 // 1+4Six                  // 1+5)func main() {fmt.Println(One)fmt.Println(Two)fmt.Println(Three)fmt.Println(Four)fmt.Println(Five)fmt.Println(Six)}

打印

用于常量定義中,常量組中僅僅有一個標示符在一行的時候,它將使用增長的iota取得前面的表達式并且再運用它

if

if語句和Java里的if相同

for循環

package mainimport "fmt"func main() {//常規for循環類似于Java 對比少了for(i := 0; i < 10; i++)少了括號for i := 0; i < 10; i++ {fmt.Println(i)}
}

打印

類似于Java里while的for循環

如下for循環實現當value=10的時候退出for循環?

package mainimport "fmt"func main() {value := 0for {value += 1fmt.Println(value)if value == 10 {break}}
}

打印

import和init

import導包和Java的import 差不多

目錄結構

fun1

package fun1 //這里的包名最好和目錄名保持相同import ("fmt"
)func init() {fmt.Println("fun1")
}
func TestFun1() {fmt.Println("testFun1")
}

fun2

package fun2 //這里的包名最好和目錄名保持相同import "fmt"func init() {fmt.Println("fun2")
}
func TestFun2() {fmt.Println("testFun2")
}

主函數

package mainimport ("fmt""githup.com/kanyu/moudles_test/basic/fun1""githup.com/kanyu/moudles_test/basic/fun2"
)func main() {fun1.TestFun1()fun2.TestFun2()fmt.Println("main")
}

打印

詳細執行流程

1,主函數導入依賴

2,依賴函數再次判斷有無依賴,有依賴再重復導入無依賴執行函數的init函數

3,執行其它的函數

指針

go語言中和C語言相同 用*來表達變量的地址 用&來取指針指向的數值

函數值傳遞與指針傳遞

值傳遞,即在函數傳參的過程中,原來的參數不會被調用函數的行為所改變值

在傳遞參數的時候會把值復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。 go默認值傳遞

package mainimport "fmt"func swap(x, y string) (string, string) {return y, x
}func main() {stra := "字符串a"strb := "字符串b"fmt.Println("交換之前打印")fmt.Println(stra, strb)a, b := swap(stra, strb)fmt.Println("交換之后打印")fmt.Println(a, b)
}

打印

指針傳遞

//引用傳遞
package mainimport "fmt"func main() {/* 定義局部變量 */var a int = 100var b int= 200fmt.Printf("交換前 a 的值為 : %d\n", a )fmt.Printf("交換前 a 的地址值為 : %d\n", &a )fmt.Printf("交換前 b 的值為 : %d\n", b )fmt.Printf("交換前 b 的地址值為 : %d\n", &b )/* 調用 swap() 函數* &a 指向 a 指針,a 變量的地址* &b 指向 b 指針,b 變量的地址*/swap(&a, &b)//調用時候傳入地址值fmt.Printf("交換后,a 的值 : %d\n", a )fmt.Printf("交換后 a 的地址值為 : %d\n", &a )fmt.Printf("交換后,b 的值 : %d\n", b )fmt.Printf("交換后 b 的地址值為 : %d\n", &b )}func swap(x *int, y *int) {//指針參數變量 這里的交換指的把對應指針指向的值給交換了 所以a和b的地址未變化var temp inttemp = *x    /* 保存 x 地址上的值 */*x = *y      /* 將 y 值賦給 x */*y = temp    /* 將 temp 值賦給 y */
}

打印

defer

延遲函數,defer在rerurn之后再執行延遲函數 用于如打開/關閉文件、獲取/釋放鎖、連接/斷開連接等,確保資源被適當地釋放,即使在發生錯誤或提前返回的情況下也能保證執行

package mainimport "fmt"func deferFunc() int {fmt.Println("defer func called")return 0
}func returnFunc() int {fmt.Println("return func called")return 0
}func returnAndDefer() int {defer deferFunc()return returnFunc()
}func main() {returnAndDefer()
}

打印

參考

8小時轉職Golang工程師(如果你想低成本學習Go語言)_嗶哩嗶哩_bilibili

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

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

相關文章

Java中的訪問修飾符有哪些

在 Java 中&#xff0c;訪問修飾符&#xff08;Access Modifiers&#xff09;用于控制類、方法、變量和構造器的訪問權限。Java 提供了四種訪問修飾符&#xff0c;分別是&#xff1a; publicprotecteddefault&#xff08;包私有&#xff0c;沒有顯式修飾符&#xff09;private…

【公務員考試】高效備考指南

高效備考指南&#xff1a;從計劃制定到心態調整的全面攻略 公務員考試競爭激烈&#xff0c;備考過程既需要科學規劃&#xff0c;也需要持之以恒的努力。結合多位高分考生的經驗與專業機構的指導&#xff0c;本文整理了一套系統化的備考策略&#xff0c;涵蓋目標設定、學習方法…

工程實踐:如何使用SU17無人機來實現室內巡檢任務

阿木實驗室最近發布了科研開發者版本的無人機SU17&#xff0c;該無人機上集成了四目視覺&#xff0c;三維激光雷達&#xff0c;云臺吊艙&#xff0c;高算力的機載計算機&#xff0c;是一個非常合適的平臺用于室內外巡檢場景。同時阿木實驗室維護了多個和無人機相關的開源項目。…

強大的CSS變量

在 CSS 中&#xff0c;變量&#xff08;Custom Properties&#xff09; 允許你定義可重用的值&#xff0c;方便在整個樣式表中使用和修改。CSS 變量的基本語法如下&#xff1a; 1. 定義 CSS 變量 CSS 變量通常在 :root 偽類中定義&#xff0c;以便它們可用于整個文檔&#xf…

藍橋杯嵌入式賽道復習筆記1(led點亮)

前言 基礎的文件創建&#xff0c;參賽資源代碼的導入&#xff0c;我就不說了&#xff0c;直接說CubeMX的配置以及代碼邏輯思路的書寫&#xff0c;在此我也預祝大家人人拿國獎 理論講解 原理圖簡介 1.由于存在PC8引腳到PC15引腳存在沖突&#xff0c;那么官方硬件給的解決方案…

Linux進程1.0--task_struct

1.硬件&#xff1a;馮諾依曼體系結構&#xff1a; 單個分析&#xff1a;、 數據流向&#xff1a;數據必須先進入輸入設備&#xff0c;再到存儲器&#xff0c;然后由存儲器給控制器&#xff0c;控制器收到以后進行相應的處理后&#xff0c;再傳回存儲器&#xff0c;存儲器最終傳…

本地部署Jina AI Reader:用Docker打造你的智能解析引擎

本地部署Jina AI Reader&#xff1a;用Docker打造你的智能解析引擎 &#x1f31f; 引言&#xff1a;為什么需要本地部署&#xff1f;&#x1f4cc; 場景應用圖譜&#x1f527; 部署指南&#xff08;Linux環境&#xff09;1. 環境準備2. Docker部署3. 驗證服務狀態 &#x1f680…

貪心算法簡介(greed)

前言&#xff1a; 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種在每個決策階段都選擇當前最優解的算法策略&#xff0c;通過局部最優的累積來尋求全局最優解。其本質是"短視"策略&#xff0c;不回溯已做選擇。 什么是貪心、如何來理解貪心(個人對貪心的…

代碼隨想錄day17 二叉樹part05

654.最大二叉樹 給定一個不重復的整數數組 nums 。 最大二叉樹 可以用下面的算法從 nums 遞歸地構建: 創建一個根節點&#xff0c;其值為 nums 中的最大值。 遞歸地在最大值 左邊 的 子數組前綴上 構建左子樹。 遞歸地在最大值 右邊 的 子數組后綴上 構建右子樹。 返回 nums …

宇樹人形機器人開源模型

1. 下載源碼 https://github.com/unitreerobotics/unitree_ros.git2. 啟動Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 這個錯誤通常出現在虛擬機環境中運行需要OpenGL支持的應用…

通過特征值和特征向量實現的圖像壓縮和特征提取

前文&#xff0c;我們在學習人工智能的線性代數基礎的時候&#xff0c;就了解到&#xff0c;矩陣在人工智能中被廣泛使用&#xff0c;接下來我們就從大家非常常見的圖像開始&#xff0c;深度理解矩陣在人工智能中的應用。有關線性代數基礎的文章可以看的我CSDN:人工智能中的線性…

藍橋杯2023年第十四屆省賽真題-整數刪除 暴力-->鏈表+小根堆

題目來自DOTCPP&#xff1a; 思路&#xff1a; ①每次找到數列中的最小值下標&#xff0c;然后用狀態數組st標記它&#xff0c;相當與刪除它&#xff0c;之后就不會訪問它。 ②對最小值下標左邊和右邊判斷一下&#xff0c;看有沒有數字&#xff0c;如果有就把最小值加到兩邊第…

springboot438-基于SpringBoot的數字化教學資源管理系統(源碼+數據庫+純前后端分離+部署講解等)

&#x1f495;&#x1f495;作者&#xff1a; 愛笑學姐 &#x1f495;&#x1f495;個人簡介&#xff1a;十年Java&#xff0c;Python美女程序員一枚&#xff0c;精通計算機專業前后端各類框架。 &#x1f495;&#x1f495;各類成品Java畢設 。javaweb&#xff0c;ssm&#xf…

藍橋杯刷題——第十五屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組

一、0握手問題 - 藍橋云課 算法代碼&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;題意很清晰&#xff0c;累加即可。 二、0小球反彈 - 藍…

跨境衛士跟vps哪個更好用?跨境衛士為賣家提供固定IP環境

跨境衛士是通過為賣家提供固定的環境 i p來隔離本地電腦環境&#xff0c;為賣家創造一個真實獨立的物理環境&#xff0c;讓買家再任意電腦&#xff0c;任意網絡下都能夠安全的管理賬號。跨境衛士和紫鳥原理一樣&#xff0c;是通過為賣家提供固定的環境 i p來隔離本地電腦環境&a…

coding ability 展開第四幕(滑動指針——鞏固篇)超詳細!!!!

文章目錄 前言水果成籃思路 找到字符串中所有字母異位詞思路 串聯所有單詞的子串思路 最小覆蓋子串思路 總結 前言 本專欄上一篇博客&#xff0c;帶著大家從認識滑動窗口到慢慢熟悉 相信大家對滑動窗口已經有了大概的認識 其實主要就是抓住——一段連續的區間 今天來學習一些滑…

圖解AUTOSAR_CP_BSW_General

AUTOSAR BSW通用規范詳解 AUTOSAR基礎軟件模塊通用規范與架構解析 目錄 1. 概述 1.1. AUTOSAR BSW通用規范簡介1.2. 文檔目的與范圍2. BSW模塊文件結構 2.1. 標準文件組織2.2. 命名規范3. BSW模塊接口 3.1. 接口類型3.2. 模塊API3.3. 配置參數4. BSW通用架構 4.1. 分層架構4.2.…

如何在Futter開發中做性能優化?

目錄 1. 避免不必要的Widget重建 問題&#xff1a;頻繁調用setState()導致整個Widget樹重建。 優化策略&#xff1a; 2. 高效處理長列表 問題&#xff1a;ListView一次性加載所有子項導致內存暴漲。 優化策略&#xff1a; 3. 圖片加載優化 問題&#xff1a;加載高分辨率…

組件通信框架ARouter原理剖析

組件通信框架ARouter原理剖析 一、前言 隨著Android應用規模的不斷擴大&#xff0c;模塊化和組件化開發變得越來越重要。ARouter作為一個用于幫助Android應用進行組件化改造的框架&#xff0c;提供了一套完整的路由解決方案。本文將深入分析ARouter的核心原理和實現機制。 二…

Netty啟動源碼NioEventLoop剖析accept剖析read剖析write剖析

學習鏈接 NIO&Netty - 專欄 Netty核心技術十–Netty 核心源碼剖析Netty核心技術九–TCP 粘包和拆包及解決方案Netty核心技術七–Google ProtobufNetty核心技術六–Netty核心模塊組件Netty核心技術五–Netty高性能架構設計 聊聊Netty那些事兒 - 專欄 一文搞懂Netty發送數…