pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

Go言語:爺の暴走…フォルダ関係で悶々としました。関係をシッカリ書かなくては…。

「何を血迷ったのか」と言われそうな爺の暴走…Go言語について備忘録を書きます。まだ、3日目です。誤解、曲解、錯誤にお気づきでしたら、優し目に教えてくださいませ。

1日目:環境構築と最初のmain.goで文字表示。

2日前に「シリコンバレー一流プログラマーが教える Goプロフェッショナル大全」を買ってきました。VSCodeをつかった環境構築は手順通りにできました。
1日目に、最初のお試し「Hellow World」の表示もできました。やれやれ。

この日に思ったことは以下の通り。

  • VSCodeに合わせた環境構築が「シリコンバレー一流プログラマーが教える Goプロフェッショナル大全」に書いてあったので、何とかできました。
  • Pythonを書いていたことが役に立ちました。関数型スクリプトがある程度わかってないとつらいかも…。
  • Pythonと同じようにスライスで範囲指定ができます。
  • 静的型付け、コンパイルが必要、数値どうしでも型(例:int、flor64)が異なると型を合わせないと計算できない。

N88-Basic、VBA、Pythonなどインタプリタ型言語をやってきた爺にはなかなかの関門が初日から待ち構えていました。なんとか、乗り越えました~。

2、3日目:パッケージ、ワークスペース、存在するのにないことになるimport…泥沼。

苦しみました、単にフォルダ置いて、サブフォルダをリンクで指すだけでは、相手を認識できない仕組みでした。パッケージ間に上下関係、goファイル間にもmain.goファイル優先などのルールがあり、戸惑いました。

もっとも苦しんだのは、サブフォルダを置き、その中の別パッケージのsub.goファイルを親フォルダ側のmain.goから呼び出す方法でした。事後の記憶が怪しいので、備忘録で以下にスクリプト付きで残します。

フォルダ(ワークスペース)

VSCodeで今まで特に「ワークスペース」を意識してPythonを書いてきませんでした。単にフォルダにPythonファイルを置いて走らせたらOkという繰り返しでした。

今回、ワークスペースを使いました。直下の画像の通りの並びです。

【Go言語:今回使ったフォルダ/ワークスペースの並び】
【Go言語:今回使ったフォルダ/ワークスペースの並び】

上の画像の青線の上に「GOLANG(ワークスペース)」の表示があります。ワークスペースは、VSCodeの「ファイル(F)」をクリックするとぶら下がりで表示されます…あとはよくわかりませぬ…。

GOLANG(ワークスペース)
┗golang(フォルダ)
  ┣main.go
  ┣b_in_package.go
  ┗sub(フォルダ)
   ┗sub.go

    

スクリプト:main.go

package main

import (
	"fmt"
	"main/sub"
)

func func_another_in_main() {
	fmt.Println("\n2:func_another_in_main:パッケージmain main.goの別ファンクション")
}

func main() {
	fmt.Println("\n1:main.go内のmainファンクションで表示")
	func_another_in_main()
	Func_B()
	sub.F_in_sub()
}

スクリプト:b_in_mainpackage.go

package main

import (
	"fmt"
)

func Func_B() {	// 外部ファイルfunction名は頭文字は大文字
	fmt.Println("\n3:Func_B:パッケージmain→main.goと同じ並びの別ファイル=b_in_mainpackage.go")
}

スクリプト:sub/sub.go

>>|golang|
package sub

import ("fmt"

)

func F_in_sub() {
fmt.Println("\n4:function F_in_sub:サブフォルダsub、別パッケージsub内のsub.go")
}
|

go.mod

module main

go 1.24.0

実際に走らせてみましたが…デバッグでは動かないが…。

VSCodeにあるデバッグでは走ってくれず、エラーになりました。原因不知です。

  1. VACodeターミナル画面で、go mod init main+[enter]
  2. 同、go run main+[enter]

これで期待した結果になりました。以下の画像のような表示になりました。

【golang:別ファイル、別パッケージのfunctionも呼び出せ表示できました】
【golang:別ファイル、別パッケージのfunctionも呼び出せ表示できました】

別パッケージ「sub」でも go mod ..... が必要とのことのようですが、ひとまず省略しても動いたようです。動いた結果が予定通りであっても、どのような落とし穴があるかさえ分からない爺です。「これを教えておかねば」と思われた方は、どうぞコメント欄にでも書き込みください。よろしくお願いいたします。ご参考にされる方、おいでではないかと存じますが、耄碌爺の備忘録です、ご利用の際は自己責任でお願いします。