色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>數值算法/人工智能>

GO語言的模塊化和面向對象

大小:0.6 MB 人氣: 2017-09-28 需要積分:2

  這是關于評論GO語言的第二部分,第一部分:,第三部分會在不日后在CSDN公眾號(ID:csdnnews)發布。

  在第一部分里面就GO語言的簡單功能(特征)做了論述,如常用語法,基本類型等。本文將主要提及GO所支持的package(包)和面向對象。在這之前呢,還是建議讀者閱讀一下此書,照舊,歡迎各方高人點評和糾錯。

  總的來說,我發現GO語言面向對象的語法有點亂,一致性差、不明顯,所以對于大多數使用場合,個人更傾向于C++明顯的繼承層次結構。

  在這個部分的文章里面故意不提及系統構建,分發或者配置等內容。

  Packages(包)

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

  package foo

  當需要用到某個包時,用import方式導入:

  package bar //定義了包名

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

  “foo”

  “moo”

  )

  func somefunc() {

  foo.Yadda()

  var a moo.Thing

  。。.

  }

  包名稱應與文件的目錄名稱匹配。 這是import語句找到對應包的關鍵。一個目錄可允許有多個文件,這些文件都是同一個包的一部分。

  package main不受以上規則約束。由于其唯一性,所以對應的目錄不需要命名為main。

  結構體

  在Go語言中可以像C一樣聲明一個結構體:

  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

  我習慣使用var關鍵字演示變量的實際類型,也可能會選擇較短的表達式 := 。

  請注意,我們可以將其創建為一個值或一個指針(使用內置的new()函數),與C或C ++不同,Go中的結構體所占的實際內存并不能確定是在堆還是棧上。 具體由編譯器決定,一般是根據內存是否需要延續功能調用來分配。

  以前,我們已經看到內置的make()函數用于實例化slices(切片)和maps(集合)。 make()僅適用于那些內置類型。 對于自定義類型,可以使用new()函數。 我發現這個區別有點混亂,但是我一般不喜歡使用語言本身就可以實現的類型區別。 我喜歡C++標準庫如何在C++中實現方式,當往庫里面添加內容時,語言本身幾乎沒有什么特別的支持。

  Go類型通常具有“構造函數”(而不是方法),應該調用該函數來正確實例化該類型,但是我認為沒有辦法強制執行正確的初始化,就像C++或Java中的默認構造函數。 例如:

  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(嵌套結構體)

  可以匿名地將一個結構體“嵌入”到其他結構體中,如下所示:

  type Person struct {

  Name string

  }

  type Employee struct {

  Person

  Position string

  }

  var a Employee

  a.Name = “bob”

  a.Position = “builder”

  這感覺有點像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語言中的結構體可以有Methods(與結構相關聯的函數),這點和C/Java語言的classes(類)很像 , 但在語法方面略有不同。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 伊人久久大香线蕉综合网站 | 麻豆国产人妻精品无码AV | 凹凸精品视频分类视频 | 欧美麻豆一精品一AV一免费 | 插曲的痛30分钟视频最新章节 | 年轻的母亲4线在线观看完整 | 俄罗斯摘花 | 印度12 13free | 亚洲大爷操 | 粗好大用力好深快点漫画 | 草莓AV福利网站导航 | 伊人情人网综合 | avtt一区| 毛片999| 诱受H嗯啊巨肉各种play | 亚洲绝美精品一区二区 | bt成人种子| 美女脱了内裤张开腿让男人桶到爽 | 久久精品国产福利电影网 | 日本高清片免费观看 | 久久精品影视 | 性生交片免费无码看人 | 男女啪啪抽搐呻吟高潮动态图 | 久久久精品久久久久三级 | 久久只精品99品免费久 | 迈开腿让我看下你的小草莓声音 | 美女搜查官被高难度黑人在线播放 | 特级黑人三人共一女 | 99无人区码一码二码三 | 亚洲国产高清在线观看视频 | 久久青草免费线观最新 | 久久日本精品国产精品 | 麻花豆传媒剧国产免费mv观看 | 俄罗斯XBXBXB兽交 | 婷婷六月激情综合一区 | 国产精品资源网站在线观看 | 办公室韩国电影免费完整版 | 国产日韩亚洲专区无码 | 8x8x我要打机飞在线观看 | 伊人久久大线蕉香港三级 | 2020亚洲色噜噜狠狠网站 |