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

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

golangのnilとか入った構造体のsortこんな感じでOKそう?

# はじめに
結果みる感じ問題なさそうですが、
不安だったので、
不安そうなタイトルにしました!:chicken:

もっとシンプル綺麗に書けるよ!
という優しい方がいたら教えて頂けると嬉しいです!:bow_tone1:

お試し等は以下にペタッと貼り付けたりして動かすといいのではないかと思ってます!
https://go.dev/play/

# 主な参考
https://stackoverflow.com/questions/48331747/ignore-nil-elements-when-sorting
https://qiita.com/Sekky0905/items/2d5ccd6d076106e9d21c

# 以下実行した場合の最初と最後の出力結果比較

“`.txt
何もしない場合の出力確認

名前01 説明2
名前02 メモ2
名前01 説明1
説明1

名前02 メモ1

sort場合の出力確認(3回目)
名前01 説明

元記事を表示

Go言語におけるJSONのDecodeの注意点・対策

ここ数ヶ月、APIのレスポンスをParseする処理をGo言語で書く機会がたくさんありました。
APIから返ってくるJSONの形式によっては、`json.Unmarshal` ではどうにも太刀打ちできないことが何度かありました。

Go言語でJSONをParseする際に注意すべきこと、使える手段についてまとめておきます

# 何はともあれコレ! `json.Unmarshal`
– `func Unmarshal(data []byte, v interface{}) error`
– 標準ライブラリ `json` のメソッド。
– json形式のbyte列を受け取り、Parseして `v` が指す値に格納する。第二引数 `v` はpointerでなければならない。

“`golang:サンプルコード
import (
“encoding/json”
“fmt”
)

func main() {
var jsonBlob = []byte(`[
{“Name”: “Platypus”, “Order”: “Monotremata”},
{“Name”: “Quoll

元記事を表示

go関連で見た記事 2022/03/30

https://qiita.com/tchnkmr/items/b3d0b884db8d7d91fb1b

https://zenn.dev/kou_pg_0131/articles/go-digest-string

https://chidakiyo.hatenablog.com/entry/2017/12/12/%E5%BF%98%E3%82%8C%E3%81%8C%E3%81%A1%E3%81%AAGo%E3%81%A7byte%E3%82%92string%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC

https://qiita.com/ktnyt/items/8ede94469ba8b1399b12

“`golang
package main

import (
“bufio”
“fmt”
“log”
“os”
)

func main() {
f, err := os.O

元記事を表示

今日読んだgoの記事 2022/03/29

# 今日読んだgoの記事 2022/03/29
## goでどうスクレイピングするのか。
https://medium.com/@arnesh07/how-golang-can-save-you-days-of-web-scraping-72f019a6de87

要約
スクレイピングのメインはPython。
じゃあなんでGo? => Goのほうがはるかに早い。(単位時間あたりの処理量が倍くらい違う)
goのスクレイピングにはgoqueryを使う。
goqueryはjqueryライクである。

## goqueryのダウンロード方法
https://rooter.jp/web-crawling/go_goquery_scraping/

要約
go get github.com/PuerkitoBio/goquery

** collyとはなんぞ
https://qiita.com/ta9to/items/6a4c2ce646bc642c42b4

要約
go のスクレイピングライブラリ

## マーシャル
https://www.asobou.co.jp/blog/web/marsh

元記事を表示

gRPC+Go を触ってみたので、ざっくり纏めてみた [ハンズオンつき]

## はじめに
最近、社内でマイクロサービスが話題に上がるにつれ、
gRPCという言葉をよく聞くようになりました。

前から興味があったことと、今後業務でgRPCで使う可能性がありそうとのことだったので、
概要と雰囲気を掴むために記事にまとめてみました。

## 記事の読み進め方
記事の内容を下2つに分けてgRPCを理解を深めていきます :eyes:
* [gRPCの概要](https://qiita.com/mnoji/items/20895275d923f02821fd#grpc%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%AB)
* [簡単なハンズオン](https://qiita.com/mnoji/items/20895275d923f02821fd#%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3)

## gRPCってなに?
Google が開発した RPC(Remote Procedure Call)システムです。

特徴をざっくりとまとめますと、以下のようなもの
* HTTP/2 通信をベースに高速かつ効

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事