Go関連のことを調べてみた2022年03月28日

Go関連のことを調べてみた2022年03月28日

Go 基本的な文法のアウトプット(変数、関数、For・Switch文、Defer)

## 初めに
[Goの公式チュートリアル](https://go-tour-jp.appspot.com/welcome/1)を使用して勉強した内容をアウトプットするため記事を投稿する。

## パッケージ

### 記述の初め方

Goでは、mainパッケージから開始する。
“`go
package main
“`

### パッケージのインポート

##### 記述方法1
“`go
import{
“パッケージ1”
“パッケージ2”
}
“`
##### 記述方法2
“`go
import “パッケージ1”
import “パッケージ2”
“`
記述方法1のほうがコンパクトで分かりやすい。

### エクスポート
最初の文字が大文字だと、エクスポートされて外部パッケージからアクセスすることができる。
小文字だと、外部パッケージからアクセスすることができない。

##### 基本的な書き方
mainパッケージを導入し、main関数内に処理を記載する。
“`go
package main

func main() {

}
“`
## 関数

##### 基本的な

元記事を表示

Go のレジスタベース ABI はいくつまで引数をサポートしているのか?

Go 1.17 で導入されたレジスタベースの関数呼び出し規約 (以下、レジスタベース ABI) は多くのケースでパフォーマンス向上をもたらしていますが、利用可能なレジスタ数には制約があるはずなので引数や戻り値がいくつまでならレジスタベース ABI の恩恵を受けられるのか調べました。

なお、この記事は Go コンパイラの内部ドキュメントをもとに作成しました。
内部ドキュメントではレジスタベース ABI の詳細や根拠について説明されています。

https://github.com/golang/go/blob/master/src/cmd/compile/abi-internal.md

※ 特に明記されていない限り 2022 年 3 月 27 日時点の情報になります。

## 短い結論

引数や戻り値の個数に関係なく対応アーキテクチャであればレジスタベース ABI の恩恵を受けられます。

とはいえ整数レジスタ 9 個、浮動小数点レジスタ 12 個に収まる範囲にした方がよさそうです。
(引数や戻り値がいくつレジスタを使用するのかは型によって異なります)

## 利用可能なレジスタ数

元記事を表示

Lambda (golang)でOpenSearchのドメインを定期的に名前解決し、ALBのターゲットを更新(プライベートサブネットのみ)

# 初めに
生産技術部で製品の検査工程を担当しているエンジニアです。工場のデータを見える化するために、工場で使わなくなったサーバを利用して、オンプレミス環境に[The Elastic Stack](https://www.elastic.co/jp/elastic-stack/)(Elasticsearch、Kibana、Logstash、Filebeat、Metricbeat)でサービスを構築しました。

しかし、本業である生産技術業務の傍らで、生産量増加に伴うサーバ負荷対応や故障対応といったサーバの管理を行う事は難しいため、AWSのマネージドサービスの利用を検討しています。AWSを利用する目的は管理面の課題解消だけでなく、AWSで提供される多様なサービスとの連携や、パブリッククラウドを利用する事による他事業部との連携を視野に入れて検討しています。

# AWSで検討している構成
会社のネットワークから[AWS Direct Connect](https://aws.amazon.com/jp/directconnect/)(専用線接続サービス)を利用し、接続しています。セキュリティ

元記事を表示

知識ゼロから始める gRPC のサーバーサイド開発

# はじめに

[スターティングgRPC](https://www.amazon.co.jp/dp/B087R87L6Z) という本を読んだので、そのアウトプット記事を書きます。
言語は Go です。

筆本を読む前の筆者のレベル感は以下であり、想定読者も同様になります。

– Go は書いたことある
– gRPC は 1mm もわからん

本記事では gRPC 未経験者が最低限のサーバーサイド開発をできるレベルに到達することを目標とします。

ベースは [スターティングgRPC](https://www.amazon.co.jp/dp/B087R87L6Z) ですが、最低限の内容のみを抜き出しています。
特に「そもそも gRPC とはどいう技術か?」「既存技術と比較したときのメリット・デリットは?」「gRPC の採用判断はどのようにすべきか?」などは本の方にかなりわかりやすく書かれているため、ぜひ一読をおすすめします。

筆者は Docker でサクっと環境を作り学習しました。
学習時のソースコードは [GitHub にアップロード](https://github.com/Hirot

元記事を表示

プログラムで生成した迷路をMinecraftで建築する(Go)

# はじめに
みなさんはMinecraftをプレイしていて、「自動的に建物が建ったらいいのになぁ」なんて思ったことはありませんか?僕はあります。そこで、マイクラの建築にプログラムを持ち込んでみようと思ったのが、この記事を書くに至ったきっかけです。
今回、マイクラ内で自動的に迷路を建築するプログラムをGoで作成し実際に動作させたので、それを行うまでの手順を紹介します。
また、迷路を建築する際に、プログラムからコマンドを実行しているので、迷路建築以外の目的でコマンドをプログラムから実行したいと考えている方の参考にもなるかもしれません。

![2022-03-18_18.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673998/2bed1559-ae15-3127-1ce5-ff6bdd5de859.png)
![Building maze](https://github.com/melq/mc-rcon/blob/main/maze/buildmaze.gif?raw=true)

# 概要

元記事を表示

現在の技術(2022/03/27)

どの技術が楽しいか知る為に上辺だけ触りまくった期間でした。仕事ではphp、wordpress、cakeを触ってます。現在go, rustが楽しいと気付いたので転職活動中。
趣味勉強。ご飯食べてる時はawsサミットを見ながら、目が疲れて休憩中はヨガをしながらセキュリティの音声配信を聞きながら、21時就寝5時起き毎日16時間はプログラミングの勉強してると思います、幸せです。疲れて効率が悪い事に目を背けていたので、アウトプット始めます。

# 2022/03/27時点(プログラミング歴2年3ヶ月)

100満点(主観)
php: 60
python: 40
ruby: 5
go: 50
rust: 50
haskell: 5
c++: 15
javascript: 55
typescript: 51
solidity: 20
html: 70
css: 60

nodejs: 40
react: 40
nextjs: 38
nestjs: 20
vuejs: 20
svelte: 18
cake: 60

元記事を表示

【Golang】ローカルのIPアドレスを取得する【複数NIC対応】

> Go 言語(以下 Golang)で作成したアプリを実行しているマシンの**ローカル IP アドレスが知りたい**。
>
> 複数の NIC(ネットワークカード)がある場合でも、外部からアクセス可能な方の IP アドレスが知りたい。

[「”golang” ローカルのIPアドレスを取得する」でググって](https://www.google.com/search?q=%22golang%22+%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AEIP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B)も、タイトルからわかるドンピシャの記事がなかったので、自分のググラビリティとして。

## TL; DR (今北産業)

“`go
import “net”

// GetOutboundIP returns the outbound IP addres

元記事を表示

【Golang】1文字をruneに変換する

> Go 言語(以下 Golang)で、1 文字の文字列を `rune`([Unicode](https://ja.wikipedia.org/wiki/Unicode) の[コードポイント符号位置](https://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E7%82%B9)専用の `int32` 型)に変換したい。

[「”golang” 1文字をruneに変換する」でググって](https://www.google.com/search?q=%22golang%22+1%E6%96%87%E5%AD%97%E3%82%92rune%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B)も、基本中の基本らしく、タイトルからドンピシャの記事が出てこなかったので自分のググラビリティとして。

## TL; DR (今北産業)

1. シングルクォートで括る。
1. サンプルコード

元記事を表示

はじめてのGO のメモ

# はじめに

何となくGOを使ってみたいなと思い、linux に環境をインストールしてtutorial を行ったので、メモしておきます。
インストールについては、GOのページに書いてある情報で全く困らなかったので、tutorial のところだけメモしておきます。

https://go.dev/learn/

https://go.dev/doc/tutorial/getting-started

全くGOについて知識がないので、間違えがあるかもしれませんがご容赦ください。

# メモ

### Module file

以下のファイルがあり “`go run . “` とするとHello world ができるか、と思いきや、できませんでした。

“`golang:hello.go
package main

import “fmt”

func main() {
fmt.Println(“Hello, World!”)
}
“`

“`
$ go run .
go: go.mod file not found in current directory or any

元記事を表示

Goを始める時に役立つ資料

何か言語を学びたいので、学びながら良かった記事をまとめていきます。
学んで何か作ってみないと、言語の良し悪しはわからないのでガンガンいきましょう。

まだ全然マスター出来てませんが、特別に良いなーと思ったのは

1位 Haskell
2位 Rust
3位 OCaml, F#
4位 C++
5位 JavaScript
6位 Python

でした。
難易度が高い言語が上位ですが偶然です。
学習コストは低ければ低いほど良いと思ってるので
Goにかなり期待✨

学びながらまとめていきます。随時更新

※ 基礎的な文法を一通り見ました。シンプルな良さって感じで良い言語です。
Rustと同位でHaskellの次に好きな言語になりそうです。
ジェネリクスも導入されメッチャ良い言語✨

## 日本語リンク集

[A Tour of Go](https://go-tour-jp.appspot.com/list)

[はじめてのGo―シンプルな言語仕様,型システム,並行処理](https://gihyo.jp/dev/feature/01/go

元記事を表示

Go開発入門 静的チェックツール編

## はじめに

Goの静的チェックのためのツール群をコマンドとともにいくつか紹介します。

## gofmt

goのコード整形ツールです。
“`
gofmt -l -w main.go
“`

## golint

goらしくない書き方を指摘するツールです。
“`
golint .
“`

## go vet

goのバグを指摘するツールです。
“`
go vet main.go
“`

## errcheck

エラーチェック漏れを指摘するツールです。
“`
errcheck github.com/foo
“`

例えば、下記のようなエラーチェックを行っていないと指摘されます
“`
if err := router.Run(); err != nil {
log.Fatalf(“server cant start :%v”, err)
}
“`
https://github.com/kisielk/errcheck

## おまけ

フォーマットはエディターで自動化すると良いです。
vscodeの場合は次のような設定をします。
1.

元記事を表示

Goのポインタを図解で理解する。

# Goのポインタについて、よく分からなかったので、図を交えて理解してみました。

下記のようなコードがあるとします。

“`go
package main
import “fmt”

func main() {
var name = “taro”
}
“`
メモリ上では下記のような概略図となっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/dbe1e3d1-7b54-ee4a-d953-36556d710f95.png)

型の前に*がついている場合「ポインタ変数」となります。
ポインタ変数には、メモリのアドレスが格納されています。
“`go
var pv *string
“`

上記の場合のpvに格納されたアドレスのメモリにはstring型のデータが格納されているという意味となります。

イメージは下記の図のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

Go言語の「zserge/lorca」で「Microsoft Edgeは自動テスト ソフトウェアによって制御されています」を消したい

# はじめに
go言語の「zserge/lorca」の実行時、Windows上部に以下の記述が出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/e6b05519-56ff-a4ce-e4b8-6cb4347ccde3.png)
非常にうっとうしい。
PythonのSeleniumでも同一事象が起きていて、ネットで消す方法を検索できるが、Go言語で見つからなので、ソースファイルを探ってみた。
# 結論
「github.com\zserge\lorca」のファイル「ui.go」内の以下の記述の「–」を消せばよい。
– “–no-first-run”, → ”no-first-run”,
– “–enable-automation”, → ”enable-automation”,

## 「ui.go」の修正箇所
“`Go
var defaultChromeArgs = []string{
“–disable-background-networking”,
“-

元記事を表示

go generics の練習

# これは何?

go 1.18 が正式リリースになり。
以前から無くて困っていた generics がようやく入ったので、その練習

# 最大値関数

`math.Max` が `float64` しか受け入れない厳しい世界からようやく脱却。

“`go:go1.18
package main

import (
“fmt”
“time”

“golang.org/x/exp/constraints”
)

func Max2[T constraints.Ordered](x, y T) T {
if x < y { return y } return x } func main() { fmt.Println(Max2(1, 2)) //=> 2
fmt.Println(Max2(1.11, 2.22)) //=> 2.22
fmt.Println(Max2(“hoge”, “fuga”))

元記事を表示

GO言語 インストール Windows10 

# 自分のメモ代わりに

# 検証環境
OS:Windows 10 HOME
Visual Studio Code

# Go言語のダウンロード

公式サイトへアクセスし、msiファイルをダウンロードする。
https://go.dev/dl/

インストーラーを開き、基本的に「Next」→ 「Next」→ と押していけば問題ありません。
※保存先については、あとでパスの設定で必要になる恐れがあるで、メモしておく。

# インストールの確認

インストールが終了したら再起動をする。
再起動しないとパスが反映されない場合があるため。
※自分は反映されなかった。

再起動したら
コマンドプロンプトを起動してインストールした階層まで移動し以下を入力
“`
go version

“`
バージョンが表示されればOK。
※表示されない場合は環境変数を設定

## プログラム作成
テキストエディタでプログラム作成し、任意のフォルダー内に置く。
コマンドプロンプトでgo run hello.goと入力し「Hello!」と表示されれば成功。

hello.go
“`
package ma

元記事を表示

Go + MySQL + React のDocker開発環境を作成する

# はじめに
GoとMySQLとReact(&TypeScript)を使ったポートフォリオ作成をしようと思い、最初に勉強も兼ねてDocker開発環境を作成しました。
そこでQiitaやZennなどで書かれている記事を参考にしていましたが、最終的に他の方とは違う構成になったので自分も記事を執筆しようと思いました。

# 作成したもの
ディレクトリ構成
“`
.
├── README.md
├── db
│   ├── data
│   └── my.cnf
├── docker-compose.yml
├── go-app
│   ├── Dockerfile
│   └── main.go
├── react-ts-app
│   ├── .dockerignore
│   ├── Dockerfile
│   ├── README.md
│   ├── node_modules
│   ├── package-lock.json
│   ├── package.json
│   ├── public
│   ├── src
│   └── tsconfig.json
└── var

元記事を表示

【Golang】Base62 に標準ライブラリで変換する

> Go 言語(以下 Golang)で、**ハッシュ値の HEX 文字列を Base62 でエンコードしたい**。

つまり **Base16(16進数)のハッシュ値を Base62(62進数)の文字列に圧縮する**ことで、なるべくコリジョンハッシュ値の衝突を和らげたいのです。

[「”golang” base62 変換」でググって](https://www.google.com/search?q=%22golang%22+base62+%E5%A4%89%E6%8F%9B)も、外部ライブラリを使う方法ばかりだったので自分のググラビリティとして。

– [ハッシュ?コリジョン?BLAKE3?](https://qiita.com/KEINOS/items/c92268386d265042ea16#ts-dr-%E6%9C%80%E9%80%9F%E3%81%AEdb%E3%82%AD%E3%83%BC%E6%A4%9C%E7%B4%A2%E3%82%92%E6%B1%82%E3%82%81%E3%81%A6-with-sqlite3)

##

元記事を表示

[Go/gin] GETリクエストに配列でパラメータを渡す方法

# 結論
– Ginコンテキストの`QueryArray()`をつかって受け取る
– `gc.QueryArray(“params[]”)`
– `gc.GetQueryArray(“params[]”)`
– 構造体にバインドするには、下記の通り
“`go
type Req struct {
Params []int `form:”params[]”`
}
“`

# 実装
複数ステータスなどの条件で検索したい時に、フロントエンドから配列でパラメータを送れるようになります。
handlerまでのサンプルを載せておきます。

“`bash
curl -X GET ‘http://localhost/hoge/path?params[]=1&params[]=2’
“`

“`go:main.go
package main

import (
“net/http”

“github.com/gin-gonic/gin”
)

func main() {
gin.SetMode(“debug”)
e := gin.Default()

assignHan

元記事を表示

Go開発入門 テーブル駆動テストと並列実行

## はじめに

テーブル駆動テストとは、
インプットとアウトプットのテーブルについて
1行ずつテストを繰り返すことです。

テーブル駆動テストには、下記のようなメリットがあります。
– 並列にテストが実行しやすい
– テストケースの変更が容易
– テストが読みやすい
– テストがどこで失敗したのかがわかりやすい

https://github.com/golang/go/wiki/TableDrivenTests

本記事では、サンプルとして偶数判定のテーブル駆動テストを並列で実行することを体験します。
サンプルでは、go modを使用しています。

## 関数を作成

./is_even.go
“`
package is_even

func IsEven(number int) bool {
return (number % 2 == 0);
}
“`

## テストを作成

./is_even_test.go
“`
// go test github.com/CobaltSato/mock/unit_test/is_even -parallel 2

packa

元記事を表示

【Go】Go 1.16以降のバージョンで「go get」でのdelveインストール時に「dlv: not found」になる

## 概要
個人的に開発で使っていたGolangのバージョンが少し古かったので、バージョンを上げてみました。バージョンを上げると、デバッグツールの`delve`も再度インストールする必要があったので、`go get`でインストール操作を実行してみたところ`dlv: not found`というエラーになりました。
今回はそのエラーの対応について、メモ書きします。

## 対応
teratailの[dlvインストール後にnot foundと表示される件について](https://teratail.com/questions/366377)に、同じエラーでハマってる記事がありました。回答をざっと確認したところ、`go get`によるインストールではなく`go install`に変更になったそう。[delveのREADME](https://github.com/go-delve/delve/tree/master/Documentation/installation)でも、`go install`を使うように記載されています。
なお、[Go1.16からの go get と go instal

元記事を表示

OTHERカテゴリの最新記事