Go語(yǔ)言學(xué)習(xí)之指針的用法詳解
引言
Go 語(yǔ)言中數(shù)組可以存儲(chǔ)同一類型的數(shù)據(jù),但在結(jié)構(gòu)體中我們可以為不同項(xiàng)定義不同的數(shù)據(jù)類型
結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合
結(jié)構(gòu)體表示一項(xiàng)記錄,比如保存圖書館的書籍記錄,每本書有以下屬性:
Title :標(biāo)題
Author : 作者
Subject:學(xué)科
ID:書籍ID
一、定義結(jié)構(gòu)體
1. 語(yǔ)法格式
結(jié)構(gòu)體定義需要使用 type 和 struct 語(yǔ)句
struct 語(yǔ)句定義一個(gè)新的數(shù)據(jù)類型,結(jié)構(gòu)體中有一個(gè)或多個(gè)成員
type 語(yǔ)句設(shè)定了結(jié)構(gòu)體的名稱
結(jié)構(gòu)體的格式如下
type struct_variable_type struct { member definition member definition ... member definition }
一旦定義了結(jié)構(gòu)體類型,它就能用于變量的聲明,語(yǔ)法格式如下
variable_name := structure_variable_type {value1, value2...valuen}
或者
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
2. 示例
package main import "fmt" type Persion struct { name string sex string age int id_card int } func main() { //創(chuàng)建一個(gè)新的結(jié)構(gòu)體 fmt.Println(Persion{"zhangsan", "男", 20, 123412424}) //使用key:value格式 fmt.Println(Persion{name: "lisi", sex: "女", age: 18, id_card: 133654623}) //忽略的字段為0或空 fmt.Println(Persion{name: "wangwu", id_card: 21352365}) }
輸出結(jié)果
{zhangsan 男 20 123412424}
{lisi 女 18 133654623}
{wangwu 0 21352365}
二、訪問(wèn)結(jié)構(gòu)體成員
如果要訪問(wèn)結(jié)構(gòu)體成員,需要使用點(diǎn)號(hào).操作符,格式為:
結(jié)構(gòu)體.成員名"
結(jié)構(gòu)體類型變量使用 struct 關(guān)鍵字定義,實(shí)例如下:
package main import "fmt" func main() { //結(jié)構(gòu)體聲明 type Persion struct { name string age int sex string id int } //結(jié)構(gòu)體類型的變量 var ( Persion1 Persion //聲明 Persion1 為 Persion 類型 Persion2 Persion //聲明 Persion2 為 Persion 類型 ) //給prison1賦值 Persion1.name = "lisi" Persion1.sex = "man" Persion1.age = 30 Persion1.id = 56341153 //給prison2賦值 Persion2.name = "wangwu" Persion2.sex = "woman" Persion2.age = 18 Persion2.id = 78238232 fmt.Println(Persion1) fmt.Println(Persion2) }
輸出結(jié)果如下
{lisi 30 man 56341153}
{wangwu 18 woman 78238232}
三、結(jié)構(gòu)體作為函數(shù)參數(shù)
結(jié)構(gòu)體也可以作為參數(shù)傳遞給函數(shù),可以解決一些代碼的冗余問(wèn)題,簡(jiǎn)化代碼
示例
package main import "fmt" //結(jié)構(gòu)體聲明 type Persion struct { name string age int sex string id int } func main() { //結(jié)構(gòu)體類型的變量 var ( Persion1 Persion //聲明 Persion1 為 Persion 類型 Persion2 Persion //聲明 Persion2 為 Persion 類型 ) //給prison1賦值 Persion1.name = "lisi" Persion1.sex = "man" Persion1.age = 30 Persion1.id = 56341153 //給prison2賦值 Persion2.name = "wangwu" Persion2.sex = "woman" Persion2.age = 18 Persion2.id = 78238232 //使用函數(shù)傳遞結(jié)構(gòu)體 printInfo(Persion1) fmt.Println("------------------") printInfo(Persion2) } //函數(shù)定義結(jié)構(gòu)體為形式參數(shù),進(jìn)行傳入 func printInfo(p Persion) { fmt.Println("姓名: ", p.name) fmt.Println("年齡: ", p.age) fmt.Println("性別: ", p.sex) fmt.Println("身份證: ", p.id) }
輸出結(jié)果如下
姓名: lisi
年齡: 30
性別: man
身份證: 56341153
------------------
姓名: wangwu
年齡: 18
性別: woman
身份證: 78238232
四、結(jié)構(gòu)體指針
可以定義指向結(jié)構(gòu)體的指針類似于其他指針變量,格式如下
var struct_pointer *Persion
以上定的指針變量可以存儲(chǔ)結(jié)構(gòu)體變量的地址,查看結(jié)構(gòu)體變量的地址,可以將&符合放置于結(jié)構(gòu)體變量前
struct_pointer = &Persion1
使用結(jié)構(gòu)體指針訪問(wèn)結(jié)構(gòu)體成員,可以使用.操作符
struct_pointer.title
package main import "fmt" //結(jié)構(gòu)體聲明 type Persion struct { name string age int sex string id int } func main() { //結(jié)構(gòu)體類型的變量 var ( Persion1 Persion //聲明 Persion1 為 Persion 類型 Persion2 Persion //聲明 Persion2 為 Persion 類型 ) //給prison1賦值 Persion1.name = "lisi" Persion1.sex = "man" Persion1.age = 30 Persion1.id = 56341153 //給prison2賦值 Persion2.name = "wangwu" Persion2.sex = "woman" Persion2.age = 18 Persion2.id = 78238232 //使用函數(shù)傳遞結(jié)構(gòu)體的地址 printInfo(&Persion1) fmt.Println("------------------") printInfo(&Persion2) } //定義結(jié)構(gòu)體指針形參進(jìn)行傳入 func printInfo(p *Persion) { fmt.Println("姓名: ", p.name) fmt.Println("年齡: ", p.age) fmt.Println("性別: ", p.sex) fmt.Println("身份證: ", p.id) }
輸出結(jié)果如下
姓名: lisi
年齡: 30
性別: man
身份證: 56341153
------------------
姓名: wangwu
年齡: 18
性別: woman
身份證: 78238232
總結(jié)
結(jié)構(gòu)體是由相同類型和不同類型組成的數(shù)據(jù)集合,存儲(chǔ)的結(jié)構(gòu)類型是不受限制的
以上就是Go語(yǔ)言學(xué)習(xí)之指針的用法詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言指針的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用Go語(yǔ)言搭建WebSocket服務(wù)端方法示例
這篇文章主要給大家介紹了利用Go語(yǔ)言搭建WebSocket服務(wù)端方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2017-04-04go使用errors.Wrapf()代替log.Error()方法示例
這篇文章主要為大家介紹了go使用errors.Wrapf()代替log.Error()的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-085個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧分享
作為一名軟件工程師,確保你的代碼高效且性能良好是非常重要的。本文主要和大家分享5個(gè)可以在Golang中優(yōu)化代碼以提高性能的技巧,希望對(duì)大家有所幫助2023-03-03Golang?中實(shí)現(xiàn)?Set的思路詳解
本文介紹了Go中兩種set的實(shí)現(xiàn)原理,并在此基礎(chǔ)介紹了對(duì)應(yīng)于它們的兩個(gè)包簡(jiǎn)單使用,本文介紹的非常詳細(xì),需要的朋友參考下吧2024-01-01Web框架Gin中間件實(shí)現(xiàn)原理步驟解析
這篇文章主要為大家介紹了Web框架Gin中間件實(shí)現(xiàn)原理步驟解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Go語(yǔ)言如何高效的進(jìn)行字符串拼接(6種方式對(duì)比分析)
本文主要介紹了Go語(yǔ)言如何高效的進(jìn)行字符串拼接(6種方式對(duì)比分析),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08