在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

GO語言的模塊化和面向?qū)ο?/h1>
大小:0.6 MB 人氣: 2017-09-28 需要積分:2

  這是關(guān)于評(píng)論GO語言的第二部分,第一部分:,第三部分會(huì)在不日后在CSDN公眾號(hào)(ID:csdnnews)發(fā)布。

  在第一部分里面就GO語言的簡單功能(特征)做了論述,如常用語法,基本類型等。本文將主要提及GO所支持的package(包)和面向?qū)ο蟆T谶@之前呢,還是建議讀者閱讀一下此書,照舊,歡迎各方高人點(diǎn)評(píng)和糾錯(cuò)。

  總的來說,我發(fā)現(xiàn)GO語言面向?qū)ο蟮恼Z法有點(diǎn)亂,一致性差、不明顯,所以對(duì)于大多數(shù)使用場合,個(gè)人更傾向于C++明顯的繼承層次結(jié)構(gòu)。

  在這個(gè)部分的文章里面故意不提及系統(tǒng)構(gòu)建,分發(fā)或者配置等內(nèi)容。

  Packages(包)

  Go代碼是以軟件包的形式組織的,Java也有包的概念,二者很像,跟C++命名空間也有點(diǎn)類似。 在源文件的開頭聲明包的名稱:

  package foo

  當(dāng)需要用到某個(gè)包時(shí),用import方式導(dǎo)入:

  package bar //定義了包名

  import ( //告訴Go編譯器這個(gè)程序需要使用 foo、moo 包(的函數(shù),或其他元素)

  “foo”

  “moo”

  )

  func somefunc() {

  foo.Yadda()

  var a moo.Thing

  。。.

  }

  包名稱應(yīng)與文件的目錄名稱匹配。 這是import語句找到對(duì)應(yīng)包的關(guān)鍵。一個(gè)目錄可允許有多個(gè)文件,這些文件都是同一個(gè)包的一部分。

  package main不受以上規(guī)則約束。由于其唯一性,所以對(duì)應(yīng)的目錄不需要命名為main。

  結(jié)構(gòu)體

  在Go語言中可以像C一樣聲明一個(gè)結(jié)構(gòu)體:

  type Thing struct {

  // Member fields.

  // Notice the lack of the var keyword.

  a int

  B int // See below about symbol visibility

  }

  var foo Thing

  foo.B = 3

  var bar Thing = Thing{3}

  var goo *Thing = new(Thing)

  goo.B = 5

  我習(xí)慣使用var關(guān)鍵字演示變量的實(shí)際類型,也可能會(huì)選擇較短的表達(dá)式 := 。

  請(qǐng)注意,我們可以將其創(chuàng)建為一個(gè)值或一個(gè)指針(使用內(nèi)置的new()函數(shù)),與C或C ++不同,Go中的結(jié)構(gòu)體所占的實(shí)際內(nèi)存并不能確定是在堆還是棧上。 具體由編譯器決定,一般是根據(jù)內(nèi)存是否需要延續(xù)功能調(diào)用來分配。

  以前,我們已經(jīng)看到內(nèi)置的make()函數(shù)用于實(shí)例化slices(切片)和maps(集合)。 make()僅適用于那些內(nèi)置類型。 對(duì)于自定義類型,可以使用new()函數(shù)。 我發(fā)現(xiàn)這個(gè)區(qū)別有點(diǎn)混亂,但是我一般不喜歡使用語言本身就可以實(shí)現(xiàn)的類型區(qū)別。 我喜歡C++標(biāo)準(zhǔn)庫如何在C++中實(shí)現(xiàn)方式,當(dāng)往庫里面添加內(nèi)容時(shí),語言本身幾乎沒有什么特別的支持。

  Go類型通常具有“構(gòu)造函數(shù)”(而不是方法),應(yīng)該調(diào)用該函數(shù)來正確實(shí)例化該類型,但是我認(rèn)為沒有辦法強(qiáng)制執(zhí)行正確的初始化,就像C++或Java中的默認(rèn)構(gòu)造函數(shù)。 例如:

  type Thing struct {

  a int

  name string

  。。.

  }

  func NewThing() *Thing {

  // 100 is a suitable default value for a in this type:

  f := Thing{100, nil}

  return &f

  }

  // Notice that different “constructors” must have different names,

  // because go doesn‘t have function or method overloading.

  func NewThingWithName(name string) *Thing {

  f := Thing{100, name}

  return &f

  }

  Embedding Structs(嵌套結(jié)構(gòu)體)

  可以匿名地將一個(gè)結(jié)構(gòu)體“嵌入”到其他結(jié)構(gòu)體中,如下所示:

  type Person struct {

  Name string

  }

  type Employee struct {

  Person

  Position string

  }

  var a Employee

  a.Name = “bob”

  a.Position = “builder”

  這感覺有點(diǎn)像C ++和Java中的繼承,例如,可以這樣:

  var e = new(Employee)

  // Compilation error.

  var p *Person = e

  // This works instead.

  // So if we thought of this as a cast (we probably shouldn’t),

  // this would mean that we have to explicitly cast to the base class.

  var p *Person = e.Person

  // This works.

  e.methodOnPerson()

  // And this works.

  // Name is a field in the contained Person struct.

  e.Name = 2

  // These work too, but the extra qualification is unnecessary.

  e.Person.methodOnPerson()

  Methods(方法)

  Go語言中的結(jié)構(gòu)體可以有Methods(與結(jié)構(gòu)相關(guān)聯(lián)的函數(shù)),這點(diǎn)和C/Java語言的classes(類)很像 , 但在語法方面略有不同。

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 午夜影院网页| 两人性潮高免费视频看| 国产黄在线观看免费观看不卡| 手机在线一区二区三区| 色男人网| 永久免费在线观看| 日本69sex护士| 四虎永久在线精品免费影视| 中文字幕 视频一区| 四虎永久网址| 在线观看色视频网站| 免费h网站在线观看| 色偷偷免费| 午夜影吧| 免费看18污黄| 久久青草国产精品一区| 久久是精品| 亚洲一卡二卡三卡| 国产伦子一区二区三区四区| 69xxxxx日本护士| 色视频在线观看| 午夜禁片| 老师你好滑下面好湿h| 黄色爱爱视频| 妇乱子伦激情| 色婷婷社区| 人人做人人爽国产视| 中文字幕不卡在线播放| 国产一级特黄aa大片免费| 亚洲人成影院在线高清| 三级免费观看| 日日拍拍| 午夜宅男视频| 天天爽天天操| 一级特黄色片| 一本在线免费视频| 国色天香精品亚洲精品| 国产高清免费| 欧美深深色噜噜狠狠yyy| 国内精品视频| 中文字幕一区在线|