🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

2回答

339閲覧

自作のpackageをmainにimportしたい

realjamEngineer

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

1グッド

1クリップ

投稿2021/01/08 08:20

編集2021/01/08 09:04

mainパッケージに自作したパッケージをimportしたい

他のpackageで宣言した関数をmainにimportして使いたいのですが、うまくいきません。

###main.go

go

1package main 2 3import ( 4 "net/http" 5 6 "github.com/labstack/echo/v4" 7 "google.golang.org/appengine" 8 "./model/customers_all.go" 9) 10 11func main() { 12 e := echo.New() 13 http.Handle("/", e) 14 e.GET("/", func(c echo.Context) error { 15 return c.String(http.StatusOK, "masterにmergeされたのを起点に自動デプロイに成功!!!!!") 16 }) 17 18 http.Handle("/customers", e) 19 e.GET("/customers", func(c echo.Context) error { 20 return c.JSON(http.StatusOK, model.GetCustomers()) 21 }) 22 23 println(model.) 24 25 // GAEでリクエストを受信するためのHTTPサーバーを起動 26 appengine.Main() 27}

###model/customers.go

go

1package customers 2 3import ( 4 "encoding/json" 5 "fmt" 6) 7 8// Account の構造体の定義 9type Account struct { 10 BankName string `json:"BankName"` 11 Branch string `json:"Branch"` 12 DepositType string `json:"DepositType"` 13 AccountNumber int `json:"AccountNumber"` 14 AccountName string `json:"AccountName"` 15} 16 17// Customers の構造体定義 18type Customers struct { 19 Name string `json:"name"` 20 Age int `json:"age"` 21 Address string `json:"address"` 22 Account Account `json:"account"` 23} 24 25// GetCustomers は顧客情報をjsonに変換する 26func GetCustomers() { 27 CustomerInfo := Account{"銀行名", "支店名", "普通預金", 1234567, "口座名義"} 28 Customer := Customers{"氏名", 20, "住所", customerInfo} 29 //jsonのデコード 30 a, _ := json.Marshal(Customer) 31 fmt.Printf(string(a)) 32}
HugAllMyF0128👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/01/08 08:49

"以下のエラーコード"が見当たりません。
guest

回答2

0

パッケージ構成やimportの仕方に誤りがあります。以下のような感じになります。あくまで一例です。

パッケージをimportするときに、Go Modulesでは相対パスではなくモジュール名からのパッケージ名をimportします。(Go Modulesがわからない場合は調べてみてください。)

  • ディレクトリ構成
. ├── go.mod ├── go.sum ├── main.go └── model └── custromer.go
  • main.go

go

1package main 2 3import ( 4 "net/http" 5 6 "example.com/sample/model" 7 "github.com/labstack/echo/v4" 8) 9 10func main() { 11 e := echo.New() 12 http.Handle("/", e) 13 e.GET("/", func(c echo.Context) error { 14 return c.String(http.StatusOK, "masterにmergeされたのを起点に自動デプロイに成功!!!!!") 15 }) 16 17 http.Handle("/customers", e) 18 e.GET("/customers", func(c echo.Context) error { 19 return c.JSON(http.StatusOK, model.GetCustomers()) 20 }) 21 22 e.Logger.Fatal(e.Start("localhost:8888")) 23}
  • model/customer.go

go

1package model 2 3import ( 4 "encoding/json" 5) 6 7// Account の構造体の定義 8type Account struct { 9 BankName string `json:"BankName"` 10 Branch string `json:"Branch"` 11 DepositType string `json:"DepositType"` 12 AccountNumber int `json:"AccountNumber"` 13 AccountName string `json:"AccountName"` 14} 15 16// Customers の構造体定義 17type Customers struct { 18 Name string `json:"name"` 19 Age int `json:"age"` 20 Address string `json:"address"` 21 Account Account `json:"account"` 22} 23 24// GetCustomers は顧客情報をjsonに変換する 25func GetCustomers() string { 26 CustomerInfo := Account{"銀行名", "支店名", "普通預金", 1234567, "口座名義"} 27 Customer := Customers{"氏名", 20, "住所", CustomerInfo} 28 //jsonのデコード 29 a, _ := json.Marshal(Customer) 30 return string(a) 31}
  • go.mod
module example.com/sample go 1.16 require github.com/labstack/echo/v4 v4.1.17 // indirect

投稿2021/01/08 13:55

d_tutuz

総合スコア730

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Go には「公開する関数/変数/型は大文字で始める」ってルールがあるけど、ひょっとしてソレ?

投稿2021/01/08 08:51

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

realjamEngineer

2021/01/08 08:53

package名も大文字スタートの必要がありますか?
episteme

2021/01/08 08:55

いいえ。じゃなかったら import "fmt" できるワケがない。
realjamEngineer

2021/01/08 09:06

今ソースコード追加したので、もしよかったら確認お願いします。 やりたいことは、main.goでGetCustomersの実行です
episteme

2021/01/08 12:27 編集

確認てなにすりゃえぇですか? 「はいそのとおりでした/いいえそれが原因ではありません」を確認するのはアナタでは?
episteme

2021/01/08 16:57

回答後にコードが差し替えられました...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問