web-dev-qa-db-ja.com

Go Langでカスタムパッケージをインポートする際のエラー

私のプログラムで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フォルダーに存在することです。

35
Shenal Silva

関数の名前を大文字にしてエクスポート可能にする必要があります。

func Fastget(...

使用されます:

n:=libfastget.Fastget(url,4,filename)

仕様には次のように記載されています: " Exported identifiers ":

別のパッケージからのアクセスを許可するために、識別子をエクスポートできます。両方の場合、識別子がエクスポートされます:

他のすべての識別子はエクスポートされません。

89
VonC

私は最近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

enter image description here

これは私の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()
}
0
STEEL