GoLang

GoLangのインストールはここにメモ。

$ ls /mnt2/slackware64/*/*-go-*.txz
/mnt2/slackware64/d/gcc-go-11.2.0-x86_64-2.txz
(Slackにもあるので、ちょっとやってみるか?そのうち。Cを簡単にしただけなら、練習せんでいいって
\事になってしまうのだろうか。spitzでスキマ時間にやってみるか?。Cとの違いだけ試して、libsの方は
\やりたいことができたら探してみるか)
Installした。(2022.10)
https://seesaawiki.jp/lifewithslackzaurus_15_0/d/INSTALL%5fORIG%5fGCC

linux execute go binary、でググった: 2024.01
https://zenn.dev/tmknom/scraps/997da3f777b0f3
$ go version
go version go1.16.5 gccgo (GCC) 11.2.0 linux/amd64
$ cat /proc/version
Linux version 5.15.19 (ore@darkstar.example.net) (gcc (GCC) 11.2.0, GNU ld version 2.37-slack15) #5 SMP PREEMPT Sat Jan 14 xx:yy:zz JST 2023
$ echo ‘package main
func main() {}’ > main.go
$ go build main.go
$ echo ‘int main() {}’ > main.c
$ gcc -o main.o main.c
$ ls -l
合計 92
\-rwxr-xr-x 1 ore root 58744 1月 10 xx:yy main
\-rw-r–r– 1 ore root 14 1月 10 xx:yy main.c
\-rw-r–r– 1 ore root 28 1月 10 xx:yy main.go
\-rwxr-xr-x 1 ore root 20296 1月 10 xx:yy main.o
$ ldd main
\ linux-vdso.so.1 (0x00007fffb45e1000)
\ libgo.so.19 => /usr/lib64/libgo.so.19 (0x00007f78d598c000)
\ libm.so.6 => /lib64/libm.so.6 (0x00007f78d5844000)
\ libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f78d5829000)
\ libc.so.6 => /lib64/libc.so.6 (0x00007f78d564a000)
\ /lib64/ld-linux-x86-64.so.2 (0x00007f78d740d000)
\ libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f78d5629000)
$ ldd main.o
\ linux-vdso.so.1 (0x00007fff05e91000)
\ libc.so.6 => /lib64/libc.so.6 (0x00007f15f655d000)
\ /lib64/ld-linux-x86-64.so.2 (0x00007f15f6757000)
$ echo ‘package main
import “fmt”
func main() { fmt.Printf(“hello world\n”); }’ > main.go
$ go build main.go
$ echo ‘\
#include “stdio.h”
int main() { printf(“hello world\n”); }’ > main.c
$ gcc -o main.o main.c
$ ls -l
\-rwxr-xr-x 1 ore root 87616 1月 12 xx:yy main
\-rw-r–r– 1 ore root 59 1月 12 xx:yy main.c
\-rw-r–r– 1 ore root 71 1月 12 xx:yy main.go
\-rwxr-xr-x 1 ore root 20488 1月 12 xx:yy main.o
lddは同じだった。まあいいかあまり気にせずとも。gccの様にほぼglibcに入ってるんだろう。libgoか。

Cの様にhttpのServer構造体のヘッダファイルを見ようとして探したが、
/var/log/packages/gcc-go-11.2.0-x86_64-2 そんな物はなくバイナリしか無い。Docを見るしなかいのか?。
$ file /usr/lib64/go/11.2.0/x86_64-slackware-linux/net/http.gox
/usr/lib64/go/11.2.0/x86_64-slackware-linux/net/http.gox: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
Go言語について、C言語の様にhttpのServer構造体のヘッダファイルを見ようとしてインストールファイルを探したが、バイナリしか無かった。ドキュメントを見るしなないのか?(->ChatGPT)
Go言語では、通常、標準ライブラリにHTTPサーバーが含まれており、ヘッダファイルをインストールする必要はありません。Go言語では、HTTPサーバーに関連するコードは通常、プログラムの中に含まれ、外部のヘッダファイルのようなものは使用されません。
Go言語の標準ライブラリのhttpのServer構造体の内容を見たいが、どうやって見る?(->ChatGPT)
Go言語の標準ライブラリのコードは、GitHub上で公開されており、net/httpパッケージも含まれています。具体的には、httpパッケージのコードは以下のリポジトリにあります。
https://github.com/golang/go/tree/master/src/net/http
ただし、Server構造体の詳細な定義を理解するために、直接ソースコードを読むよりも、Goドキュメント(godoc)を利用することをお勧めします。
以下のコマンドを実行すると、net/httpパッケージのドキュメントが表示されます。
$ go doc net/http
このコマンドを実行すると、net/httpパッケージ全体のドキュメントがターミナルに表示されます。そして、その中からServer構造体に関する情報を見ることができます。
$ go doc net/http
go tool: no such tool “doc”
もしウェブブラウザでドキュメントを見たい場合は、以下のコマンドを実行して、godocサーバーを開始し、ブラウザでhttp://localhost:6060/pkg/net/http/にアクセスします。
$ godoc -http=:6060
これにより、ローカルでGoドキュメントを閲覧できるようになります。httpパッケージに移動し、Server構造体の定義や関連するメソッドにアクセスできます。
godoc -http=:6060
bash: godoc: コマンドが見つかりません
(ダメだこりゃ。本家のを入れるか。その前にmanで見てみるか)

$ sudo installpkg /mnt2/slackware64/ap/man-db-2.9.4-x86_64-3.txz
$ sudo installpkg /mnt2/slackware64/ap/man-pages-5.13-noarch-1.txz
$ sudo installpkg /mnt2/slackware64/l/libseccomp-2.5.3-x86_64-1.txz (不足lib)
$ sudo installpkg /mnt2/slackware64/ap/groff-1.22.4-x86_64-4.txz (不足lib)
$ man go
$ man gccgo
$ man gofmt
(ダメだこりゃ、pkgの情報無い。infoも似たようなもんだ)

本家のバイナリをInstする前に、gcc-11.2.0-x86_64-2 がlibgo.soに依存している
https://seesaawiki.jp/lifewithslackzaurus_15_0/d/%a5%e9%a5%a4%a5%d6%a5%e9%a5%ea%a4%ceinstall%c9%d4%c2%ad%a4%ce%a5%c1%a5%a7%a5%c3%a5%af のINSTALL_ORIG_GCC
ため、libgo.soは残してgcc-goをrempvepkgする事にした。
$ sudo cp -a /usr/lib64/libgo.so* /dev/shm/tmp/
$ sudo removepkg /var/log/packages/gcc-go-11.2.0-x86_64-2
$ sudo mv -i /dev/shm/tmp/libgo.so* /usr/lib64/

GoLang Linux download、でググった:
https://go.dev/dl/
Linux 2.6.32 or later, Intel 64-bit processor とある。へー、そうなのか。2.6.32からAPI不変。
https://go.dev/doc/install
$ sudo tar xpf go1.21.6.linux-amd64.tar.gz
$ sudo mv -i go /usr/local/
$ export PATH=$PATH:/usr/local/go/bin
$ go version
go version go1.21.6 linux/amd64
\
がしかし、go doc はできるが、godoc は無い。
godoc download linux、でググった:
https://qiita.com/saito-h/items/ddacc7fbff35f708afed
$ go install golang.org/x/tools/cmd/godoc@latest
go: downloading golang.org/x/tools v0.17.0
go: downloading github.com/yuin/goldmark v1.4.13
go: downloading golang.org/x/mod v0.14.0
何故かhomeにDLされたので、GOPATHを/usr/local/goにして再度やったがうまくいかず、仕方ないので、
$ sudo mv -i go/bin/godoc /usr/local/go/bin/
$ sudo mv -i go/pkg/{mod,sumdb} /usr/local/go/pkg/
$ godoc -http=localhost:6060
うまくいった。ブラウザで見れた。どう考えてもブラウザ版の方が見やすい。リンク先に飛べるし。
\
https://go.dev/wiki/SettingGOPATH
Unix システム
GOPATHシステム上の任意のディレクトリにすることができます。 Unix の例では、 $HOME/go(Go 1.8 以降のデフォルト)に設定します。 GOPATHはGo インストールと同じパスであってはいけないことに注意してください。もう 1 つの一般的な設定は、GOPATH=$HOMEを設定することです。
(それでgodocのInstが思ったようにはいかなかったのか。メンドクサイが元に戻した)
$ sudo mv -i /usr/local/go/bin/godoc ~/go/bin/
$ sudo mv -i /usr/local/go/pkg/{mod,sumdb} ~/go/pkg/
$ export GOPATH=~/go
$ ~/go/bin/godoc -http=localhost:6060
うまくいった。ブラウザで見れた。が、PATH指定がメンドクサイ。Inst先と同じ方がよいと思うが。
以後は以下で実行。(2024.08)
$ PATH=$PATH:/usr/local/go/bin GOPATH=~/go ~/go/bin/godoc -http=localhost:6060 &

参考情報:
GOPATH
https://www.techscore.com/tech/Go/Lang/Basic2/

Goでメール送信したいのでgetした:(2024.03)
$ export PATH=$PATH:/usr/local/go/bin
$ export GOPATH=~/go
$ go get gopkg.in/gomail.v2
go: downloading gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
go: downloading gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
go: added gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
go: added gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df

Inatall時の情報:
\# man-db (database-driven manual pager suite)
\# This package provides the man command and related utilities
\# for examining on-line help files (manual pages). It has several
\# enhancements over man, including an indexed database for searches
\# with -k or apropos, the ability to easily view man pages in a browser,
\# better i18n support, and a much more efficient implementation of the
\# -K (full text search) option.
\# Homepage: http://www.nongnu.org/man-db/
\
\# man-pages (system documentation)
\# Man pages are online documentation for Linux. This package includes
\# many section 1, 2, 3, 4, 5, 7, and 8 man pages for Linux.
\# The man-pages distribution is maintained by Michael Kerrisk with
\# the help of more writers, editors, and other contributors than we
\# can name here.
\# For more information, see http://www.kernel.org/doc/man-pages/
\
\# libseccomp (enhanced seccomp library)
\# The libseccomp library provides an easy to use, platform independent,
\# interface to the Linux Kernel’s syscall filtering mechanism. The
\# libseccomp API is designed to abstract away the underlying BPF based
\# syscall filter language and present a more conventional function-call
\# based filtering interface that should be familiar to, and easily
\# adopted by, application developers.
\# Homepage: https://github.com/seccomp/libseccomp
\
\# groff (document formatting system)
\# The GNU groff package provides versions of troff, nroff, eqn, tbl, and
\# other Unix text-formatting utilities. Groff is used to ‘compile’ man
\# pages stored in groff/nroff format into a form which can be printed or
\# displayed on the screen. These man pages are stored in compressed
\# form in the /usr/man/man? directories.

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です