Go學習筆記之數據類型

文章目錄

  • GO數據類型
    • 數組array
    • 切片slice
    • 集合map
    • 結構體
    • make和new

GO數據類型

  • 在go語言中,定義的全局數據結構不使用不會報錯,定義的局部數據結構必須使用,否則報錯;建議定義的數據類型就要使用,要么不定義。

數組array

類似于python的list,有下標查找方法

  • array與list的區別:
    • array是固定長度的數組,沒有append、pop等方法;
    • array作為值傳入函數或者是賦值給變量的是原始值拷貝不會,任何修改不會影響原始值;
var l1 [5]int = [5]int{1, 2, 3, 4, 5} //定義
l2 := [5]int{1, 2, 3} //初始化(:= 只能用于函數內部)

切片slice

可以進行切割的數組, 能使用append方法,使用后會返回添加后的切片,slice是底層數組,作為值作為值傳入函數或者是賦值給變量時會改變原始值。

var s []string
var s []string = ['a', 'b']
b = s[:2] //前包后不包
s = append(s, "c") //增大了切片的最大容量,len(s)是4,cap(s)是6

集合map

類似與python的字典,能通過key進行增刪改查

  • map與dict的區別:

    • map是無序的key-value集合,遍歷時會無序的返回,而dict是有序的,按順序遍歷;
    • map定義時要說明key和value的類型,dict不需要;
    • map通過鍵獲取鍵值時,如果鍵不存在,則返回該鍵類型的0值,如:鍵是int類型的返回值是0;而dict通過鍵獲取值,鍵不存在,則會報錯,使用get方法獲取時返回None;
  • 注意:

    • map定義時必須要初始化,或者使用make來分配內存,否則會報錯因為沒有分配內存空間;
    • map是應用類型,如果將他傳遞給一個函數或是賦值給另一個變量,他們指向的都是底層數據結構,一個變化都會變化;
var m = map[int]string{1: "a",2: "b", //結尾括號另起一行時結尾需要有“,”同一行則不需要 
}var m1 = make(map[int]string)m1 := make(map[int]string) //:=用于函數內部
m1[1] = "a"
// m = {1: "a", 2: "b"} //不允許這種賦值方式

結構體

結構體自定義數據類型的屬性和方法,是go實現面向對象的方法,通過type來定義

type Person struct{name stringage int
}var person Person //實例化結構體,實例化才會分配內存,才能調用內部的屬性和方法 

要創建結構體的方法,需要將結構體作為接收者來定義函數,此時該函數就是該結構體的方法

  • 接收者有值接收者和指針接收者,當是值類型接收者時,實例化不能改變當前實例的屬性或方法,指針類型接收者則能改變
type Person struct{Name stringAge int
}//receiver是值類型
func (p Person) SetName(word string) {p.Name = word
}//receiver是指針類型
func (p *Person) SetAge(age int){p.Age = age
}var p1 Person
p1.SetName("lili")
fmt.Println(p1.Name) //空字符串
p1.SetAge(12)
fmt.Println(p1.Age) //12
  • 注意:結構體的屬性和方法首字母為大寫才能被模塊外調用,否則只能在模塊內調用

make和new

make和new都可以給定義的數據類型分配空間

  • 區別:
    • make只能給slice、map、channel分配空間;
    • make分配完后返回的是數據類型的值,是對數據類型的初始化,new返回的是指針;
    • 很少使用到new

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

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

相關文章

使用Alien對.deb包與.rpm包相互轉換

目錄 1、切換到root 2、更新yum(更新比較耗時,不更新沒試行不,自行斟酌是否跳過這一步) 3、卸載ibus 4、安裝Alien及其依賴包 5、安裝Alien 6、將.deb轉換成.rpm包 7、安裝RPM包 8、如果報錯 9、將.rpm轉換成.deb包 10、安…

在 Visual Studio 中編譯 Qt 資源文件和 UI 文件教程

在 Visual Studio 中編譯 Qt 資源文件和 UI 文件教程 Qt 是一個跨平臺的 C 庫,用于開發圖形界面和應用程序。在 Qt 開發中,資源文件和 UI 文件是常見的兩種資源,需要將它們編譯成可用的形式,以便在應用程序中使用。本教程將指導您…

MongoDB(三十九)

目錄 一、概述 (一)相關概念 (二)特性 二、應用場景 三、安裝 (一)編譯安裝 (二)yum安裝 1、首先制作repo源 2、軟件包名:mongodb-org 3、啟動服務&#xff1a…

Java工程師修煉手冊:Java數據結構面試題

Java數據結構面試題一直都是面試官喜歡問到的問題,在我們去面試Java的相關崗位時,肯定會被提問到,所以我們就需要提前做好準備,輕松的去應對: 1. 數據結構定義 數據結構是計算機存儲、組織數據的方式。數據結構是指相…

asp.net core讀取request內容

在Startup.cs中定義Middleware,設置緩存Http請求的Body數據。代碼如下。自定義Middleware請放到Configure方法的最前面。 app.Use(next > new RequestDelegate(async context > {context.Request.EnableBuffering();await next(context);})); GET請求 HttpC…

詳解23種設計模式優缺點以及解決方案

1. 單例模式(Singleton Pattern): 優點:確保一個類只有一個實例,提供全局訪問點,節省資源。缺點:可能引入全局狀態,難以擴展和測試。解決方法:使用依賴注入來替代直接訪…

通過 Amazon SageMaker JumpStart 部署 Llama 2 快速構建專屬 LLM 應用

來自 Meta 的 Llama 2 基礎模型現已在 Amazon SageMaker JumpStart 中提供。我們可以通過使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型,并且結合開源 UI 工具 Gradio 打造專屬 LLM 應用。 Llama 2 簡介 Llama 2 是使用優化的 Transformer 架構的自回歸語…

【JavaEE基礎學習打卡04】JDBC之MySQL數據庫安裝

目錄 前言一、JDBC與數據庫二、MySQL數據庫1.MySQL數據庫2.MySQL服務下載安裝3.MySQL服務啟動停止4.MySQL命令 三、MySQL客戶端安裝總結 前言 📜 本系列教程適用于JavaWeb初學者、愛好者,小白白。我們的天賦并不高,可貴在努力,堅持…

【 Cocos Creator 項目實戰】益智游戲《2048》(附帶完整源碼工程)

本文乃Siliphen原創,轉載請注明出處 目錄 游戲介紹 概述 游戲整體流程 游戲框架設計 主要流程控制類 本文項目的代碼組織結構 構建游戲世界 數字方塊 地圖 觸摸手勢識別 防觸摸抖動 判斷用戶輸入的方向 地圖 任意大小的地圖 初始化地圖大小 地圖繪制…

數據結構----結構--線性結構--棧,隊列

數據結構----結構–線性結構–棧,隊列 一.棧:Stack 1.棧的特點: ? 先進后出:FILO(對一組數據有倒敘要求時可以用棧) 2.棧的實現 順序存儲:數組實現: ? 缺點:空間…

無涯教程-Perl - sysread函數

描述 該函數等效于C /操作系統函數read(),因為它繞過了諸如print,read和seek之類的函數所采用的緩沖系統,它僅應與相應的syswrite和sysseek函數一起使用。 它從FILEHANDLE中讀取LENGTH個字節,并將輸出放入SCALAR中。如果指定了OFFSET,則將數據從OFFSET字節寫入SCALAR,從而有效…

IC流程中 DFT 學習筆記(2)

引言 DFT是ASIC芯片設計流程中不可或缺的環節。其主要目的是在芯片前端設計驗證完成后插入一些諸如寄存器鏈等可供測試的邏輯,算是IC后端設計的范疇,屬于結構測試而非功能測試。主要是在ASIC芯片流片完成后,通過這些已插入的邏輯&#xff0c…

手機照片誤刪怎么辦,電腦照片誤刪怎么辦怎么才能找回,EasyRecovery來幫您

手機照片誤刪怎么辦,電腦照片誤刪怎么辦怎么才能找回,EasyRecovery 2023來幫您!!! EasyRecovery 2023是一款操作安全、價格便宜、用戶自主操作的 數據恢復 方案,它支持從各種各樣的 存儲介質 恢復刪除 或者…

Vue3.X 創建簡單項目

一、環境安裝與檢查 首先,我們要確保我們安裝了構建vue框架的環境,不會安裝的請自行百度,有很多安裝教程。檢查環境 node -v # 如果沒有安裝nodejs請安裝,安裝教程自行百度 vue -V# 沒有安裝,請執行npm install -g v…

Cesium for unity 1.5.0使用注意事項

Cesium for Unity Quickstart – Cesium 1.Unity版本僅支持Unity2021.3.2f1以后版 2.僅支持 3D (URP)和3D (HDRP)渲染管線 3.如果Package Manager中不出現My Registries選項,請在 Edit > Project Settings...>Package Manager中重命名或刪除重新添加Packag…

深入淺出PHP封裝根據商品ID獲取淘寶商品詳情數據方法

要通過淘寶的API獲取商品詳情,您可以使用淘寶開放平臺提供的接口來實現。以下是一種使用PHP編程語言實現的示例,展示如何通過淘寶開放平臺API獲取商品詳情: 首先,確保您已注冊成為淘寶開放平臺的開發者,并創建一個應用…

【微服務實戰】01-工程結構概覽

文章目錄 工程結構概覽:定義應用分層及依賴關系1.應用分層2.定義Entity3.倉儲層3.1 工作單元:事務管理3.2 倉儲層 4.領域事件5.APIController最佳實踐 工程結構概覽:定義應用分層及依賴關系 1.應用分層 領域模型層基礎設施層 ? 倉儲應用層 ? Api、后臺任務Job共…

TCP服務器實現—多進程版,多線程版,線程池版

目錄 前言 1.存在的問題 2.多進程版 3.多線程版 4.線程池版 總結 前言 在上一篇文章中使用TCP協議實現了一個簡單的服務器,可以用來服務端和客戶端通信,但是之前的服務器存在一個問題,就是當有多個客戶端連接服務器的時候,服…

002-Spring boot 自動配置相關分析

目錄 自動配置 EnableAutoConfiguration開啟自動配置讀取配置提前過濾自動配置配置包 AutoConfigurationPackage 自動配置 EnableAutoConfiguration 開啟自動配置 在Spring 啟動類上的 SpringBootApplication 中有 EnableAutoConfiguration 讀取配置 Import(AutoConfigurat…

后端返回圖片,前端接收并顯示的解決方案

后端圖片數據返回 后端通過二進制流的形式,寫入response中 controller層 /*** 獲取簽到二維碼*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…