Golang基礎學習

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

初見golang語法

go項目路徑

cd $GOPATH
//ls可以看到有bin,pkg,src三個文件
cd src/
mkdir GolangStudy
cd GolangStudy
mkdir firstGolang

go程序執行:

go run hello.go//如果想分兩步執行:
go build hello.go
./hello

導入包的方式

import "fmt"import {"fmt""time"
}

常見的四種變量聲明方式和多變量的聲明

var v_name v_type
v_name = value
package mainimport "fmt"
//方法1,2,3聲明全局變量
var gA int = 100
var gB = 200
用方法4聲明全局變量
//gC := 200  :=只能夠在函數體內聲明
func main() {
//方法一:聲明一個變量,默認的值是0;var a int     //var 變量名 變量類型fmt.Printf(" = %d\n", a)fmt.printf("type of b = %T\n", a)
//方法二:聲明一個變量,初始化一個值var a int  = 100   //var 變量名 變量類型fmt.Printf(" = %d\n", a)
//方法三:在初始化的時候,可以省去數據類型,通過值自動匹配當前的變量的數據類型。var c = 100fmt.println("c =", c)
//方法四:常用,省去var,直接自動匹配e := 100;fmt.printf("e = %s, type of e = %T\n", e, e)g := 3.14;fmt.printf("g = %s, type of g = %T\n", g, g)
//聲明全局變量時,方法4和其他三個有區別;fmt.println("gA = ",gA,", gB = " ,gB)
// 聲明多個變量 var xx,yy int = 100,200fmt.println("xx = ",xx,", yy = " ,yy)var kk,ll = 100,"acelf"fmt.println("ll = ",ll,", kk = " ,kk)var(vv int = 100jj bool = true)//多行多變量聲明
}

$go run test.go
a = 0

printf——支持各種格式化動詞%s,%d,%f,需要手動換行
println——會在每個參數之間添加空格,末尾自動換行.

Const和iota知識點

const語法
const length int = 10

package main
import "fmt"
//CONST 定義枚舉類型
const(
//可以在const()添加關鍵字iota,每行iota都會累加1,第一行iota的默認值為0;
BEIJING = 0
SHANGHAI = 1
SHENZHEN = 2
)
const(
BEIJING = iota
SHANGHAI 
SHENZHEN 
)
//iota只能夠配合const()一起使用,iota只有在const進行累加效果 

Golang函數的三種返回值

func foo1(a string, b int) int{
}
//返回多個函數值,匿名的
func foo2(a string, b int) (int, int) {return 666,777
}
//返回多個返回值,有形參名稱的
func foo3(a string, b int)(r1 int, r2 int) {fmt.println("c=", c)fmt.println("a=", a)fmt.println("b=", b)r1 =1000r2 =1000return
}func foo4(a string, b int)(r1, r2 int) {fmt.println("c=", c)fmt.println("a=", a)fmt.println("b=", b)r1 =1000r2 =1000return
}

init函數和import導包

包中函數首字母大寫表示對外開放的函數,如果為小寫則說明只能在包內執行

import 匿名及別名導包方式

_ 給包起別名,匿名,無法使用當前包方法,但會執行當前包中的init函數
aa "fmt"給fmt起別名,可以通過aa直接調用
. "fmt" 將當前fmt包中的全部方法導入到本包中

package main
import (_ "Golangstudy/5-init/lib1" //這樣的話導入lib1包即使不用也不會報錯mylib2 "Golangstudy/5-init/lib2"//給lib2起別名. "Golangstudy/5-init/lib2"//直接把lib2導入當前包,可直接調用Lib2Test
)
func main() {mylib2.Lib2Test
}

golang中的指針速通

defer語句調用順序

主要用于表示一個函數在執行最后,觸發之前調用的一種機制;

func deferFunc() int{
}
func returnAndDefer() int{...defer deferFunc()
}

多個defer壓棧執行,出棧和入棧順序相反;
defer和return 誰先誰后:return比defer先被調用

golang中數組和動態數組的區別(切片slice)

package main
import "fmt"
func main() {
//固定長度數組,在傳參時值傳遞var myArray1 [10] intmyArray2 := [10]int{1,2,3,4}for i:=0;i<len(myArray1);i++{fmt.Println(myArray1[i])}for index,value := range myArray2{fmt.Println("index = ",index,"value = ", value)}
}
package main
import "fmt"
func printArray(myArray []int) {
//引用傳遞
//_表示匿名的變量for _,value := range myArray {fmt.Println("value = ", value)}
}
func main() {myArray := []int{1,2,3,4}  //動態數組,切片slicefmt.Println("myArray type is %T\n",myArray)printArray(myArray);
}

slice切片的四種聲明方式

package main
func main() {//聲明slice1是一個切片,并且初始化,默認值是1,2,3slice := []int{1,2,3}//聲明slice是一個切片,但沒有分配空間var slice1 []intslice1 = make([]int, 3)//開辟三個空間//聲明slice是一個切片,同時分配空間var slice1 []int = make([] int, 3) //聲明slice是一個切片,同時分配空間,通過:=推導出slice是一個切片slice1 := make([]int,3)//判斷slice是否為空if slice1 == nil{fmt.Println("slice1是一個空切片")} else {fmt.Println("slice1是有空間的")}
}

14.slice切片追加與截取

在這里插入圖片描述

package main
func main() {var slice1 []int = make([] int, 3) //向numbers切片追加一個元素,numbers len = 1, [0001],cap = 5numbers = append(numbers,1)fmt.printf("len = %d,cap = %d,alice = %v\n",len(numbers),cap(numbers),numbers)
} 

如果增加的元素超過現有容量,那么底層會自動增加容量,現有cap = 原有cap+cap ;
如果初始定義時沒有用到cap,那么cap默認大小為初始化len 的大小

package main
func main() {s := []int{1,2,3}//表示取出[0,2)的元素s1 := s[0:2]//s和s1指向同一片空間s1[0] = 100fmt.println(s)fmt.println(s1)//copy可以將底層數組的slice一起進行拷貝(深拷貝)s2 := make([]int, 3)copy(s2,s)} 

15 map的三種聲明方式

package main
import fmt
func main(){
//1.聲明myMap是一種map類型,key是string,value也是stringvar myMap1 map[string]stringif myMap1 == nil{fmt.println("myMap1是一個空map")}
//2.在使用map前,需要先用make給map分配數據空間myMap1 = make(map[string]string,10)myMap1["one"] = "java"
//3myMap2 := make(map[int]string)myMap2[1] = "java"fmt.Println(myMap2)
//4聲明的同時進行初始化myMap3 := map[string]string{"one" : "php""two" : "c++"}
//4. 	
}

16 map的使用方式

package main
func main(){
func printMap(cityMap map[string]string){
//cityMap是一個引用傳遞for key,value := range cityMap{fmt.Prontln("key = ", key)fmt.Prontln("value= ", value)}
}
//增刪改查cityMap := make(map[string]string)cityMap["china"] = "Beijing"cityMap["Japan"] = "Tokyo"delete(cityMap,"China")cityMap["Japan"] = "DC"for key,value := range cityMap{fmt.Prontln("key = ", key)fmt.Prontln("value= ", value)}printMap(cityMap)
}

17.struct基本定義與使用

type Book struct {title stringauth string
}
//作為函數傳參
func changBook(book Book){//傳遞book的副本book.auth = "666"
}
//使用
var book1 Book
book1.title = "Golang"
book1.auth="zhangsan"
fmt.printf("%v\n",book1)//%v表示打印任何一種類型

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

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

相關文章

OPenCV CUDA模塊圖像處理-----對圖像執行 均值漂移濾波(Mean Shift Filtering)函數meanShiftFiltering()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 在 GPU 上對圖像執行 均值漂移濾波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于圖像分割或平滑處理。 該函數將輸入圖像中的…

電路圖識圖基礎知識-遠程/本地啟停電動機(二十一)

在實際的生產中&#xff0c;經常會需要電動機的控制可以就地控制和遠方控制&#xff0c;在集中的控制室中&#xff0c;遠 方控制電動機的啟動、停止。在就地設置啟動、停止按鈕或是緊急停車按鈕&#xff0c;以滿足生產的需要。 1.遠程、多點及連鎖控制電動機電路 2.元器件配置…

SpringBoot+uniapp 的 Champion 俱樂部微信小程序設計與實現,論文初版實現

摘要 本論文旨在設計并實現基于 SpringBoot 和 uniapp 的 Champion 俱樂部微信小程序&#xff0c;以滿足俱樂部線上活動推廣、會員管理、社交互動等需求。通過 SpringBoot 搭建后端服務&#xff0c;提供穩定高效的數據處理與業務邏輯支持&#xff1b;利用 uniapp 實現跨平臺前…

【深度學習新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配問題) 是機器學習,尤其是強化學習(RL)中的核心挑戰之一,指的是如何將最終的獎勵或懲罰準確地分配給導致該結果的各個中間動作或決策。在序列決策任務中,智能體執行一系列動作后獲得一個最終獎勵,但每個動作對最終結果的貢獻程度往往…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

這個警告表明您在使用Vue的esm-bundler構建版本時&#xff0c;未明確定義編譯時特性標志。以下是詳細解釋和解決方案&#xff1a; ?問題原因?&#xff1a; 該標志是Vue 3.4引入的編譯時特性標志&#xff0c;用于控制生產環境下SSR水合不匹配錯誤的詳細報告1使用esm-bundler…

Vue.js教學第二十一章:vue實戰項目二,個人博客搭建

基于 Vue 的個人博客網站搭建 摘要: 隨著前端技術的不斷發展,Vue 作為一種輕量級、高效的前端框架,為個人博客網站的搭建提供了極大的便利。本文詳細介紹了基于 Vue 搭建個人博客網站的全過程,包括項目背景、技術選型、項目架構設計、功能模塊實現、性能優化與測試等方面。…

32位尋址與64位尋址

32位尋址與64位尋址 32位尋址是什么&#xff1f; 32位尋址是指計算機的CPU、內存或總線系統使用32位二進制數來標識和訪問內存中的存儲單元&#xff08;地址&#xff09;&#xff0c;其核心含義與能力如下&#xff1a; 1. 核心定義 地址位寬&#xff1a;CPU或內存控制器用32位…

如何在Spring Boot中使用注解動態切換實現

還在用冗長的if-else或switch語句管理多個服務實現? 相信不少Spring Boot開發者都遇到過這樣的場景:需要根據不同條件動態選擇不同的服務實現。 如果告訴你可以完全擺脫條件判斷,讓Spring自動選擇合適的實現——只需要一個注解,你是否感興趣? 本文將詳細介紹這種優雅的…

開疆智能Ethernet/IP轉Modbus網關連接鳴志步進電機驅動器配置案例

在工業自動化控制系統中&#xff0c;常常會遇到不同品牌和通信協議的設備需要協同工作的情況。本案例中&#xff0c;客戶現場采用了 羅克韋爾PLC&#xff0c;但需要控制的變頻器僅支持 ModbusRTU 協議。為了實現PLC 對變頻器的有效控制與監控&#xff0c;引入了開疆智能Etherne…

Neovim - LSP 底層原理,難點配置(二)

Neovim LSP 的工作原理 基本概念 LSP(Language Server Protocol)可以理解成是一個"語言助手"。每種編程語言都有自己的"語言助手"(比如 TypeScript 的 tsserver),這些助手能告訴你: 哪寫錯了(語法錯誤)哪能跳轉(方法定義,引用)哪可以補全(自…

UNECE R152——解讀自動駕駛相關標準法規(AEB)

Uniform provisions concerning the approval of motor vehicles with regard to the Advanced Emergency Braking System (AEBS) for M1 and N1 vehicles(2021) 原文鏈接&#xff1a;https://unece.org/sites/default/files/2024-03/R152r1am1e%20%282%29.pdf 核心內容解析 …

STM32標準庫-ADC數模轉換器

文章目錄 一、ADC1.1簡介1. 2逐次逼近型ADC1.3ADC框圖1.4ADC基本結構1.4.1 信號 “上車點”&#xff1a;輸入模塊&#xff08;GPIO、溫度、V_REFINT&#xff09;1.4.2 信號 “調度站”&#xff1a;多路開關1.4.3 信號 “加工廠”&#xff1a;ADC 轉換器&#xff08;規則組 注入…

在 Docker 容器中使用宿主機的 GPU

在 Docker 容器中使用宿主機的 GPU&#xff08;特別是 NVIDIA GPU&#xff09;需要安裝 NVIDIA Container Toolkit&#xff08;之前稱為 nvidia-docker&#xff09;。以下是詳細的配置步驟&#xff1a; 1. 宿主機環境準備 確保宿主機已正確安裝&#xff1a; NVIDIA 顯卡驅動&a…

Vue3學習(接口,泛型,自定義類型,v-for,props)

一&#xff0c;前言 繼續學習 二&#xff0c;TS接口泛型自定義類型 1.接口 TypeScript 接口&#xff08;Interface&#xff09;是一種定義對象形狀的強大工具&#xff0c;它可以描述對象必須包含的屬性、方法和它們的類型。接口不會被編譯成 JavaScript 代碼&#xff0c;僅…

Python爬蟲實戰:研究Restkit庫相關技術

1. 引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上存在著海量的有價值數據。如何高效地采集這些數據并將其應用于實際業務中,成為了許多企業和開發者關注的焦點。網絡爬蟲技術作為一種自動化的數據采集工具,可以幫助我們從網頁中提取所需的信息。而 RESTful API …

Java八股文——Redis篇

目錄 1. 緩存穿透解決方案1. 緩存空值2. 布隆過濾器&#xff08;Bloom Filter&#xff09;3. 參數校驗4. 接口限流與驗證碼 2. 緩存擊穿解決方案1. 設置熱點數據永不過期&#xff08;或很長過期時間&#xff09;2. 使用互斥鎖&#xff08;如分布式鎖&#xff09;3. 利用異步更新…

旋量理論:剛體運動的幾何描述與機器人應用

旋量理論為描述剛體在三維空間中的運動提供了強大而優雅的數學框架。與傳統的歐拉角或方向余弦矩陣相比&#xff0c;旋量理論通過螺旋運動的概念統一了旋轉和平移&#xff0c;在機器人學、計算機圖形學和多體動力學領域具有顯著優勢。這種描述不僅幾何直觀&#xff0c;而且計算…

Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新無人機跟蹤

Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新無人機跟蹤 自己研一期間的小論文大致上的結構和內容基本上已經完成&#xff0c;到了最后在測試集上測試數據的階段&#xff0c;在跑測試集的時間上就去看一些25年和多目標跟蹤的領域相關的一些內…

MyBatis中foreach集合用法詳解

在 MyBatis 中&#xff0c;<foreach> 標簽用于遍歷集合&#xff08;Collection、List、Array、Map&#xff09;&#xff0c;常用于構建動態 SQL 語句&#xff08;如 IN 查詢、批量插入等&#xff09;。以下是詳細用法和示例&#xff1a; 核心屬性 屬性描述collection必填…

今日學習:ES8語法 | Spring整合ES | ES場景八股

文章目錄 ES81 ES架構2 ES適用場景3 ES使用3.1對比mysql3.2 索引(Index)3.3 類型(Type)3.4 文檔(Document)3.5 字段(Field)3.6 映射(Mapping) 4 ElasticSearch 基礎功能4.1 分詞器4.2 索引操作4.2.1 創建索引4.2.2 查看所有索引4.2.3 查看單個索引4.2.4 刪除索引 4.3 文檔操作4…