Learn Go (五) 面向?qū)ο?/h2>

Go 語言僅支持封裝, 不支持繼承和多態(tài); 面向接口編程

Go 語言沒有 class, 只有 struct

結(jié)構(gòu)體和方法

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

type TreeNode struct {
    Left, Right *TreeNode
    value int 
}

結(jié)構(gòu)的創(chuàng)建

root := treeNode{value: 3}
root.left = &treeNode{}
root.right = &treeNode{5, nil, nil}
root.right.left = new(treeNode)

nodes := []treeNode {
   {value: 3},
   {},
   {7, nil, &root},
}
fmt.Println(nodes)
  • 無論地址還是結(jié)構(gòu)本身, 統(tǒng)一使用 . 來訪問成員, 無構(gòu)造函數(shù)

手動 "構(gòu)造函數(shù)"

  • Go 語言中是沒有構(gòu)造函數(shù)的, 可以通過工廠函數(shù)來手動"構(gòu)造函數(shù)"

    func createNode (value int ) *treeNode {
        return &treeNode{value:value}    
    }
    root.left.right = createNode(2)
    // 輸出結(jié)果
    &{2 <nil> <nil>}
    
  • 注意返回了局部變量的地址

為結(jié)構(gòu)定義方法

  • 顯示定義和命名的方法接收者 (值傳遞)

    func (node treeNode) print()  {
       fmt.Print(node.value)
    }
    
  • 使用指針作為方法的接收者; 只有使用指針才可以改變結(jié)構(gòu)內(nèi)容;

    func (node *treeNode) setValue(value int) {
        node.value = value
    }
    
  • nil 指針也可以調(diào)用方法

值接收者 VS 指針接收者

  • 要改變內(nèi)容必須使用指針接收者
  • 結(jié)構(gòu)過大也考慮使用指針接收者
  • 一致性: 如果有指針接收者, 最好都是使用指針接收者

包和封裝

封裝

  • 名字一般使用駝峰命名法 CamelCase
  • 首字母大寫: public
  • 首字母小寫: private

  • 每個目錄只能有一個包, 包名和目錄名可以不一樣
  • main 包包含可執(zhí)行入口
  • 為結(jié)構(gòu)定義的方法必須放在同一個包內(nèi)
  • 可以是不同的文件

GOPATH 和目錄結(jié)構(gòu)

默認(rèn)目錄

  • ~/go(unix, linux)
  • %USERPROFILE\go(windows)
  • 官方推薦: 所有項(xiàng)目和第三方庫都放在同一個 GOPATH
  • 也可以將每個項(xiàng)目放在不同的 GOPATH

go get 獲取第三方庫

全球最大的交(gao)友(ji)平臺 GitHub 獲取三方庫,有時候會被墻; 需要我們設(shè)置代理(proxy), 才能更好的使用三方工具

設(shè)置代理

打開命令行

go env -w GOPROXY=https://goproxy.io,direct

下載包管理工具 gopm

  • 倉庫地址

  • 命令行輸入, 等結(jié)果就可以了

    go get -u github.com/gpmgo/gopm
    
  • 測試

    gopm -help
    
    success.png

    到這里 Go 的包管理工具 gopm 就下載完成了, 具體操作擼文檔就可以了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容