私のプログラムでlibfastget
にあるsrc
という名前のライブラリを作成しました
src
|-libfastget
| |-libfastget.go
|
|-MainProgram
|-main.go
libfastget
は、次のように機能fastget
をエクスポートします
package libfastget
import (
"fmt"
"io"
)
func fastget(urlPtr *string, nPtr *int, outFilePtr *string) download {
.....
return dl
}
メインプログラムでライブラリを使用する場合
package main
import (
"fmt"
"net/http"
"os"
"libfastget"
"path/filepath"
"strings"
"flag"
"time"
)
func uploadFunc(w http.ResponseWriter, r *http.Request) {
n:=libfastget.fastget(url,4,filename)
}
}
go build
でビルドしようとすると、次のエラーが表示されます
# FServe
./main.go:94: cannot refer to unexported name libfastget.fastget
./main.go:94: undefined: libfastget.fastget
奇妙なことは、ライブラリファイルlibfastget.aがpkgフォルダーに存在することです。
関数の名前を大文字にしてエクスポート可能にする必要があります。
func Fastget(...
使用されます:
n:=libfastget.Fastget(url,4,filename)
仕様には次のように記載されています: " Exported identifiers ":
別のパッケージからのアクセスを許可するために、識別子をエクスポートできます。両方の場合、識別子がエクスポートされます:
他のすべての識別子はエクスポートされません。
私は最近GO Langを学び始めました(2日前)そして、ローカルパッケージを他のプロジェクトまたはmain.goファイルにインポートするために workspace フォルダーをセットアップする必要があることがわかりました。 VS Codeエディターを使用しています。 Imが間違っている場合は修正してください。ただし、この設定は正常に機能します。
bash_profile
OR .zshrc
ファイルを以下の行に追加し、フォルダーパスに従ってGOPATHを更新します。
export GOPATH=~/projects/GO_PROJECTS
export PATH=$PATH:$GOPATH/bin:$PATH
これは私のsayHello.go
ファイル、関数をエクスポートできることに注意してくださいfunc
名はCapitalCaseで始まる必要がありますSayHello
package utils
import "fmt"
func SayHello() {
fmt.Println("Hello, Ajinkya")
}
そして今、utilsパッケージをmain.goファイルにインポートすることができます
package main
import (
"go_proj1/utils"
)
func main() {
utils.SayHello()
}