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

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

goenvの設定

## 一部localでの動かし方(1.13.5に設定する場合)

pathが通っていない場合は、
“`
goenv local 1.13.5
export PATH=~/.goenv/versions/1.13.5/bin:$PATH

“`

元記事を表示

Windowsにgo言語をインストールする方法

1. [Go言語の公式ページ](https://go.dev/dl/) からmsiファイルをダウンロードする。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/60a8923e-7659-eefa-ac74-d34f11bdcea6.png)
2. ダウンロードした `go1.18.windows-amd64.msi` をダブルクリックする。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/4a6a013c-7bf2-317b-8144-afad9e3e9372.png)
3. `Next` を押下する。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/ab4a539e-e2ec-2943-5cc6-a5e6a649785d.png)
4. `Next` を押下する。
![

元記事を表示

Go言語のエラーハンドリング(2022年版)

半年前にGo言語で開発を行うチームにJoinし、初めてGo言語を書く経験をしました。
自分やチームメンバー向けのメモとして、調べたことをまとめておきます。

# 1. Goのエラーハンドリングを考える上での前提知識(ざっくり)
– Go言語には、他の言語にあるような例外(throw, catch…) の機能が存在しない。
– Go言語は簡潔さを重視した言語のため、基本的に「例外は使うべきではない」という思想に基づいて作られている
– その代わり、メソッドのエラーハンドリングをしたい場合は、主にメソッドの返り値として `error` 型の変数を返すことが推奨される
– 主要なライブラリもこのルールに基づいて作られている
– 例: `json.Marshal`
– jsonへのParseに失敗した場合、2番目の返り値としてerrを返す。
– `err` が `nil` でなければ処理中に問題が起きたと判断し、呼び出し元でエラー対応を行う必要がある
“`golang
s, err := json.Marshal(input)
i

元記事を表示

Git にコミットされない魔法のデバッグ用ロガーを開発してきた

こんにちは。[task](https://github.com/task4233)です。

先日、メルカリ主催の「Online Spring Internship for Gophers 2022」に参加してきました。

このイベントでは、[募集要項](https://mercan.mercari.com/articles/31914/)に書かれている通り、Go1.18で新しく入る型パラメタ(ジェネリクス)、Fuzzing、Workspaceについて学んだ上で、参加者各自がGo1.18の新機能を用いたツールを開発しました。

私はそこでアイデアや設計などのサポートをしていただき、Git にコミットされないデバッグ用ロガーである `dl` を開発しました。この記事では開発の背景や使い方、仕組みについて紹介します。

https://github.com/task4233/dl

このロガーの特徴は以下の3つです。

1. **Git にコミットされないGoのデバッグ用ロガー**
2. **既存の `logr.Logger` 構造体も利用可能**
3. **1コマンドで環境構築可

元記事を表示

Goの構造体とメソッドを図解で理解する。

# Goの構造体とメソッドについて、よく分からなかったので、図を交えて理解してみました。

ポインタについて、理解があやふやな場合は、下記の記事を参照にしていただくとスムーズに理解できると思います。

https://qiita.com/sho_U/items/d6f8c1c23b9087d36cf8

## 構造体について

構造体とは、簡単にいうと変数を、ひとまとめにしたグループです。

構造体のイメージを図で表します。

![IMG_9218A9D2D31E-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/1595f56f-f418-2b23-cc67-7c97023c1b39.jpeg)

コードで記述すると下記となります。

“`golang
struct {
name string
age int
height int
weight int
}
“`

構造体を利用するには、下記のように任意の名前をつける必要があ

元記事を表示

Ginで特定のパスの場合にログを出さない方法

“`gin.Default()“` を利用していると
“`
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
“`
のように `gin.Logger()` `gin.Recovery()`
が適用されてしまう。
ここで適用されているgin.Loggerは設定が変更できないので
`gin.New()` を利用して

“`
r := gin.New()
r.Use(gin.LoggerWithConfig(gin.LoggerConfig{SkipPaths: []string{“/healthcheck”}}))
r.Use(gin.Recovery())
“`
のように手動で設定しgin.LoggerConfigにSkipPathsを設定する
gin.Recovery()の設定を忘れると500エラーを吐いた場合にginが落ちてしまうので注意!

元記事を表示

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/Hiroto

元記事を表示

プログラムで生成した迷路を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 p

元記事を表示

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のコード整形ツールです。
Go teamによって標準化されています。
“`
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

# 応用編

## makefile

上記を統合してMake

元記事を表示

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”))

元記事を表示

OTHERカテゴリの最新記事