Jex’s Note

Golang 建立自己的套件

先確定 GOPATH 路徑存在, 這是放你的 package 檔案位置

.bash_profile :

export GOROOT=/usr/local/go
export GOPATH=$HOME/projects/go/mygo
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

$GOPATH 底下要有這三個目錄, 你應該建立它們

  • src : 存放源始碼 (ex: .go .c .h .s)
  • pkg : 編譯後生成的文件 (ex: .a)
  • bin : 編譯後生成的可執行檔

在 src 下建立一個練習用的套件 exlib

appletekiMacBook-Air-2:mygo apple$ tree src
src
└── exlib
    ├── exlib.go
    └── sub_exlib
        └── sub_exlib.go

2 directories, 2 files

exlib/exlib.go :

package exlib

type TestInterface interface {
    run() string
}

type TestStruct struct {
    Name string
    Age  int
}

// return initial struct
func NewStruct(name string, age int) (testStruct *TestStruct) {
    testStruct = &TestStruct {
        Name: name,
        Age: age,
    }

    return testStruct
}

// Implement TestStruct func
func (testStruct TestStruct) run() string {
    return "run run run!!"
}

// Execute interface's func
func InterfaceFunc (testStruct TestStruct) string {
    testInterface := TestInterface(testStruct)
    return testInterface.run()
}

建立 exlib 的相關子 package

在 exlib 建立子目錄 sub_exlib

exlib/sub_exlib/sub_exlib.go:

package sub_exlib

// Public func
func SubFunc() string {
    return "sub_exlib"
}

你也可以將 sub_exlib 這個 package 分成許多檔案 :

exlib/sub_exlib/sub_exlib2.go:

package sub_exlib

// Public func
func QQ() string {
    return "sub_exlib2"
}

注意必須都要在 exlib/sub_exlib 下以及 package 名稱也都要一樣

完成! 引入並執行剛剛建立的套件

主程式 :

package main

import (
    "fmt"
    "exlib"
    "exlib/sub_exlib"
)

func main() {
    // New struct
    new_struct := exlib.NewStruct("Jex", 26)
    fmt.Println(*new_struct)

    // Interface - implement func, and run its func
    interfaceRun := exlib.InterfaceFunc(*new_struct)
    fmt.Println(interfaceRun)

    // Sub package
    sub_exlib := sub_exlib.SubFunc()
    fmt.Println(sub_exlib)
}

結果 :

{Jex 26}
run run run!!
sub_exlib

ref: https://github.com/jex-lin/build-web-application-with-golang/blob/master/ebook/01.2.md

Comments