成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go語言基礎之結構體(夏日篇)

開發 后端
我們講述了一些Go語言中面向對象的一些知識。包括有構造函數,函數綁定結構體,函數綁定結構體參數是指針和無指針區別。

 前言

Hey,大家好呀,我是星期八,上文講述了引入了一些結構體的知識。

但是我們知道Go是通過結構體模仿對象的,一起來看看吧。

引言

在Go中,我們是沒有類這個概念的,但是我們有結構體呀~

Go中的結構體,就相當于其他語言的類,基本能實現和其他語言一摸一樣的操作。

構造函數

構造函數,跟其他語言一樣了,官方理解就是在類實例化時執行的方法,通常用于賦值操作。

但是在Go中,可能不是太一樣,需要獨立用到一個函數完成。

結構體

  1. type Student struct { 
  2.     Name  string 
  3.     Age   int 
  4.     phone string 

構造函數

  1. func NewStudent(name string, age int, phone string) *Student { 
  2.     return &Student{Namename, Age: age, phone: phone} 
  3. //函數盡量采用固定格式 New結構體名 

賦值操作

  1. func main() { 
  2.     var s1 = NewStudent("張三", 18, "1111"
  3.     fmt.Println(s1) 

執行結果

為什么構造函數返回的時結構體指針

通常來說兩個原因,第一個原因時傳地址性能更高,第二個原因是因為規范,后面的函數綁定結構體也是,更多的是一個規范。

不太用糾結說指針怎么怎么看不懂,對于結構體來說,是不是指針,其實用法都一樣。

函數綁定結構體

如果你有其他語言的基礎,你可能對于類和對象比較熟悉,傳統做法中,是將方法寫入類中的。

但是在Go中,采用綁定的方式添加方法。

語法

  1. func (一般用this 要綁定的結構體) 函數名([參數1,參數2...]) [(返回值1,返回值2,...)]{ 
  2.     代碼 
  3. //一般用this,也可以用其他的,this就像形參一樣,隨便換,用self,用p,用s,都一樣的 

示例:給Student結構體綁定方法。

  1. func (this Student) say() { 
  2.     fmt.Printf("我是%v,我今年%v歲了,我的手機號是%v\n", this.Name, this.Age, this.phone) 

main代碼

  1. func main() { 
  2.     //調用構造方法 
  3.     var s1 = NewStudent("張三", 18, "1111"
  4.     //調用Student綁定的say方法 
  5.     s1.say() 

執行結果

有沒有感覺有點Java和Python的感覺了,上述可是通過結構體的方式調用方法的,這里就和C區分開了。

在Go中,基本就是通過這些操作,模擬出來面向對象的,相比之下,我更習慣Go的方式,更加靈活。

函數綁定結構體(指針方式)

如果說區別,只是將要修改的 要綁定的結構體 前面加一個*。

代碼

  1. func (this *Student) say() { 
  2.     fmt.Printf("我是%v,我今年%v歲了,我的手機號是%v\n", this.Name, this.Age, this.phone) 

執行結果和上述一摸一樣。

函數綁定結構體(指針方式和普通方式區別)

通常來說,一般使用指針的方式居多。

嗯...不是居多,是基本都是。

區別

代碼一

  1. func (this Student) say1() { 
  2.     fmt.Printf("我是%v,我今年%v歲了,我的手機號是%v\n", this.Name, this.Age, this.phone) 
  3.     this.Name = "666"//這里修改了Name為其他值 

第3行修改了Name

  1. func main() { 
  2.   //調用構造方法 
  3.   var s1 = NewStudent("張三", 18, "1111"
  4.   //調用Student綁定的say方法 
  5.   s1.say1() 
  6.   //打印s1.Name 
  7.   fmt.Println(s1.Name

第7行又打印了s1.Name

執行結果

???結果沒修改,what。

代碼二

  1. func (this *Student) say1() { 
  2.   fmt.Printf("我是%v,我今年%v歲了,我的手機號是%v\n", this.Name, this.Age, this.phone) 
  3.   this.Name = "666"//這里修改了Name為其他值 

第一行修改為*了

  1. func main() { 
  2.   //調用構造方法 
  3.   var s1 = NewStudent("張三", 18, "1111"
  4.   //調用Student綁定的say方法 
  5.   s1.say1() 
  6.   //打印s1.Name 
  7.   fmt.Println(s1.Name

執行結果

這次可以看到,結果變了,在其他函數修改了Name,影響了整個s1的Name。

結論

  • 在使用函數綁定結構體時,也盡可能的將結構體參數整成*類型的。
  • 一是因為規范,二是因為面向對象本該如此,修改對象的屬性,理論來說就應該影響整個對象值。

總結

上述我們講述了一些Go語言中面向對象的一些知識。包括有構造函數,函數綁定結構體,函數綁定結構體參數是指針和無指針區別。

本文轉載自微信公眾號「Go語言進階學習」,可以通過以下二維碼關注。轉載本文請聯系Go語言進階學習公眾號。

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2020-11-23 08:54:14

Go語言結構體

2020-12-02 08:45:36

Go語言

2020-11-30 06:17:03

Go語言

2020-12-20 09:59:13

Go語言基礎技術

2020-12-02 09:10:22

Go結構數據類型

2023-07-29 15:03:29

2021-04-20 09:00:48

Go 語言結構體type

2022-02-16 10:03:06

對象接口代碼

2020-11-05 09:58:16

Go語言Map

2020-12-16 08:07:28

語言基礎反射

2020-12-23 08:39:11

Go語言基礎技術

2020-10-22 08:33:22

Go語言

2020-11-11 10:52:54

Go語言C語言

2021-06-09 09:06:52

Go語言算法

2021-02-06 18:19:54

TimeGo語言

2021-10-09 07:10:31

Go語言基礎

2022-04-27 10:01:43

切片Go封裝

2020-10-23 08:38:19

Go語言

2020-10-25 07:33:13

Go語言

2020-12-09 09:59:32

Go語言技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩中文在线 | 天天综合久久 | 伊人网综合 | 日韩成人免费视频 | 欧美精品久久久 | 午夜视频免费在线观看 | 中文字幕91 | 国产福利在线 | 免费成人在线网站 | 亚洲天堂影院 | 日韩高清一区二区 | 看一级毛片| 久久久高清 | 中文字幕免费在线 | 久久精品久久久久久 | 91视视频在线观看入口直接观看 | 欧美一级全黄 | 成人av一区二区三区 | 国内自拍偷拍 | 97操操| 逼逼网 | 这里只有精品999 | 丁香五月网久久综合 | 国产91在线 | 亚洲 | 精品国产第一区二区三区 | 中文字幕av在线播放 | 日本五月婷婷 | 国产成人精品免费视频大全最热 | 高清国产一区二区 | 在线观看第一页 | 亚洲性人人天天夜夜摸 | 亚洲欧美国产精品一区二区 | 干干干操操操 | 色视频在线免费观看 | 久久精品亚洲一区二区三区浴池 | 亚洲精品视频免费 | 精品久久av | 卡通动漫第一页 | 人人玩人人干 | 天天射网站 | 欧美在线网站 |