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

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

Go中級者になるための個人的インプット集👨‍💻

# はじめに
## 概要
Goを書くようになりそこそこ経ちました👨‍💻
これまでに読んできたWeb上のリンクをまとめました。随時更新します。

# インプット集
## 入門〜初心者👶

### プログラミング言語Go完全入門

https://engineering.mercari.com/blog/entry/goforbeginners/

大変お世話になった(なっている)スライドです。
今でも定期的に見返していますし、Goを始めたい方にはまず紹介しています。

### Goへのヘイトに対する考え方

https://zenn.dev/nobonobo/articles/74808a8d5e6f1e

Goに対する批判は定期的に起こるのですが、キャッチアップしている言語が批判に合うと悲しくなりますよね🥹
言語仕様のシンプルさに由来する批判が多いように思うのですが、それに対する回答をひとつ持っておくと糧になると思います。
[元JavaエンジニアがGoに感じた「表現力の低さ」と「開発生産性」の話](https://inside.dmm.com/entry/2021/12/10/ex-j

元記事を表示

バックエンドエンジニア転職に向けた勉強

# はじめに
はじめまして、富山県に住んでいるChikaといいます。
現在は小売・製造のマーケティング部門で働いています。
自分でWEBサービスの開発をする仕事に転職したいと思い、現在バックエンドエンジニアになるべく勉強中です。

勉強自体はすでに途中まで進めている状況ですが、
勉強の過程やアウトプット学習をしたいと考え、Qiitaでの記事投稿をしていくことにしました。

投稿の目標として、毎日その日に学んだことをブログ記事として投稿していきます。

内容・記事の作りともに拙いですが、
とにかく投稿・アウトプットすることを第一目的としておりますのでご了承ください。
(学習教材のリンク等は後日追加修正をしていきます)

# 今回の内容
– 学習題材・選定理由
– 学習ロードマップ
– 現在の進捗

# 学習題材・選定理由
学習ロードマップの全体はブログ記事・Gitのロードマップ・Youtube等を見て必要な要素を選定しました。

開発言語としてGoを選択しました。
難易度・教材の豊富さから考えるとRubyやPHPを選ぶほうが無難と考えましたが、
今後もしくは現在の主流になっているであろ

元記事を表示

[ Golang ] Facebook / ent のER図をGitHub Actionsで自動更新する

# ER図とは
>ER図のEはエンティティ(Entity)の略で、Rはリレーションシップ(Relationship)の略です。つまりER図は「エンティティ=モノ」と「リレーションシップ=関係」の組み合わせでシステムのデータやデータ間の処理構造を設計します。例として「顧客が商品を注文する」という処理をER図で表すと以下のようになります。

https://products.sint.co.jp/ober/blog/create-er-diagram#:~:text=ER%E5%9B%B3%E3%81%AEE%E3%81%AF,%E6%A7%8B%E9%80%A0%E3%82%92%E8%A8%AD%E8%A8%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

簡潔に説明をすると、ER図とはテーブル間の関係を表した図です。
RDBのようなデータベースを用いてシステムの開発および運用を行う際に、テーブル間の関係を直感的に理解できるようになります。

# なぜER図が必要か
実運用を行なっているシステムとなるとテーブル数が数十に及ぶことが多々ありますので、ER図

元記事を表示

【GO】外部ライブラリを自力で、モック化してみる

### 今回は、テストコードを簡単にするためにTestifyを使いますが、Testifyの機能で、モック化するわけではないので、Testifyを導入しなくてもモック化の実現が可能です。

# 今回利用する技術
– 言語:**GO**
– モック化する外部ライブラリ:**Agouti** Seleniumみたいなライブラリ
– テストライブラリ:**Testify** assertなどの検証関数を利用するため

# 実況開始
## まず初めは、GOのプロジェクトの初期化してみる
“`
go mod init go-testify-mock
“`
正直、go modのことをが詳しくないから、`npm init -y`と同じ感覚として、やっていいのかわからない….

## Testifyのインストール
“`
go get github.com/stretchr/testify
“`

## Agoutiのインストール
“`
go get github.com/sclevine/agouti
“`
~~ライブラリの公式が、メンテナンスしないことを発表して、3年立つらしい…~

元記事を表示

Golang echoフレームワークのv4からv5-alphaにアップデートした際の詰まった部分のメモ

golangフレームワークechoでV5-alphaがリリースされていたので
V4からV5-alphaにアップデートした際に少し詰まった箇所のメモ

※ alphaバージョンなので変更や修正があるかもしれないので注意してください
後、golangは個人で最近自己学習を始めたので間違っているかもしれません。

https://echo.labstack.com/v5/guide/upgrading-to-v5/

middlewareのCORS middleware
https://echo.labstack.com/middleware/cors/

echo.GETのようにアクセスできなくなった為、下記のように書き換え
ソースコードを見るとecho.GETは間接的にhttp.MethodGetを読んでいた為
どちらも同じ意味の様です。

“`
AllowMethods: []string{echo.GET, echo.HEAD, echo.PUT, echo.PATCH, echo.POST, echo.DELETE},
“`

“`
AllowMethods: []st

元記事を表示

Go言語の導入から基本まで

# なぜ本記事を書いたのか?
Goの仕様や使い方について自分の把握している範囲を整理するために書いています。
# 本記事の対象読者
– Goは使ったことがないけれども、他言語は使ったことがある。
– Goをとりあえず始めるための環境構築を知りたい。
– forやwhileなどはわかるが、Goでの書き方を知りたい。

などと考えているプログラミングライトユーザー向けのレベルの記事として仕上げるつもりです。
正直文法云々はGoの公式チュートリアルをやってもいいとは思いますが、僕が追加で気になって実験した多少の+αを残す意味で書いてます。チートシート+αくらいでみていってください。
**足りないところだらけだけど、間違い、補足等コメントください。**
# 筆者の環境
– CPU : Apple M1
– OS : macOS Monterey v12.3.1
– Goバージョン:1.18.3

# Goの環境構築
## Goのインストール
### 前提知識的なやつ
#### GOPATHとは
外部パッケージなどが保存される場所、実行バイナリもここに保存される。
“`
$ go env GO

元記事を表示

[2022年]オライリー書籍ランキング1(O’Reilly)

オライリー書籍ランキングを紹介します。
***
[データ指向アプリケーションデザイン[Amazon]](https://amzn.to/3aILwT3)
![c.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702119/349ec1bc-3d51-3e16-0b35-39caf4146690.jpeg)
本書では、データの量や複雑さ、変化が課題となるアプリケーションを「データ指向」と名づけ、データ指向アプリケーションの設計を支える基本的な概念を解説します。
– 第I部データシステムの基礎
– 1章 信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション
– 2章 データモデルとクエリ言語
– 3章 ストレージと抽出
– 4章 エンコーディングと進化
– 第II部分散データ
– 5章 レプリケーション
– 6章 パーティショニング
– 7章 トランザクション
– 8章 分散システムの問題
– 9章 一貫性と合意
– 第III部導出データ
– 10章

元記事を表示

新しい言語で開発環境を作る時の目線ってこんな感じ(Go)

# 1. はじめに
開発環境を整える。初心者にとって一番高いハードルの一つです。でも、ある程度以上の経験を詰むと、言語を選ばずにスムーズに構築できるようになります。この記事は私の作業視点を整理して公開し、皆さんの苦手を克服する助けになればと記載しました。内容自体ではなく、「何をどうかんがえているのか」を見るための参考になったらうれしいです。

# 2. この記事の目的
私自身使ったことのない言語の開発環境の構築をなにをどう考えて、作っていくのかを整理していきます。あくまで一例として、作業のポイントなどをお伝えすることを目的としています。逆に「Go言語で効率よく開発する方法」などは全く含まれないのでご注意ください。

## 2-1 前提環境

導入OS先 Redhat Enterprise Linux 8

# 3. Go言語のコンパイル環境を作ってみよう

「開発環境」ってなんでしょうか。

1. プログラミング言語をコンパイルし実行できるようにする環境
1. コーディング、コンパイル、実行をシームレスに繋ぐための統合開発環境
1. システム全体のミニチュアを用意して、コーディング、コ

元記事を表示

go開発環境をDockerで作成する④ - realizeでホットリロード

# 最終目的
– go言語でWebアプリを構築するためのgo開発環境をDockerで作成する。

# 目標
– [Docker上にコンソール立ち上げ環境を作る。](https://qiita.com/eigetsu/items/555efb6f1fec0425d35f)
– [フレームワークginを使った簡単なREST APIサーバーを立ち上げる。](https://qiita.com/eigetsu/items/5482149b4f5cf7874698)
– [イメージビルド時にプログラムをコンパイルしコンテナ起動と同時にホストPCからAPIにアクセスできるようにする。](https://qiita.com/eigetsu/items/a3eeffa3df2bac413dde)
– realizeでホットリロードできるようにする。**←今ここ**

# やること
– realizeをイメージビルド時にインストール
– コンテナ立ち上げ時にrealizeでgo-blogをホットリロード

## 開発環境の構成

開発環境 go-env の構成は下記の通り。

~~~text: 開発環境

元記事を表示

Go言語初学者が勉強する過程で収集した情報まとめ

# Go言語を習得する過程で自分で学んだこと・参考情報サイトなどをまとめていきます
すなわち本内容は完成記事ではなく学習の過程で記事を加筆していくつもりです。
割と個人の覚書きの性質の強い記事ではありますが、ひょっとしたら他の「これからGoをやるぞ!」と思う人の助けになることがあるかもしれないので公開します。
各セクションについて、ボリュームが膨らんできてここに載せておくには文章量が多いな…と感じてきたらその部分は単独記事として独立化させていく予定です。

## 基礎:まずはこのあたりから勉強

### はじめてのGo

https://gihyo.jp/dev/feature/01/go_4beginners

このドキュメントが個人的に好み(日本語で読める。ある程度厳密な仕様がわかる)。デメリットは執筆時期が2015年とちょっと古めなことか。Goは割と活発にバージョンアップしている言語みたいなのでちょっと前の古いテキストだと最新仕様とズレが大きくなるのが心配かも。

### プログラミング言語Go完全入門
https://docs.google.com/presentation/d

元記事を表示

図解 io.Pipe(Golang)

# はじめに

Goのioパッケージにはio.Readerやio.Writerのインターフェイスを有効活用するための便利なメソッドがいくつか用意されています。
自分はその中の一つである`io.Pipe`の挙動を理解するのに手こずったので、備忘録として挙動や使い方を残しておこうと思います。

# [io.Pipe](https://pkg.go.dev/io#Pipe)とは

io.Pipeメソッドは、io.PipeReaderとio.PipeWriterを返します。io.PipeWriterに書き込んだ内容が、io.PipeReaderから読み出せるようになります。
io.Pipeの特徴は、内部バッファを持たない点にあります。そのため、Writerに書き込んだ内容がすぐにReaderから読み出せるようになります。

モデル図はこんな感じです(2のブログから引用)。
![モデル図](https://cdn-ak.f.st-hatena.com/images/fotolife/q/quoll00/20200603/20200603003431.png)

自分なりの理解を図にまとめると以下

元記事を表示

図解 io.TeeReader(Golang)

# はじめに

Goのioパッケージにはio.Readerやio.Writerのインターフェイスを有効活用するための便利なメソッドがいくつか用意されています。
自分はその中の一つである`io.TeeReader`の挙動を理解するのに手こずったので、備忘録として挙動や使い方を残しておこうと思います。

# [io.TeeReader](https://pkg.go.dev/io#TeeReader)とは

io.TeeReaderメソッドは、引数で渡したio.Readerを、読み込まれた内容を2番目の引数で渡したio.Writerに書き込むio.Readerに変換するメソッドです。
自分はio.Readerを進化させるメソッドだと理解しました。イメージはこんな感じです。
![スクリーンショット 2022-06-09 23.55.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455240/cccc8396-20ef-935f-1b7f-06d1ed09e2d5.png)

## サンプルコード

元記事を表示

[2022年]WindowsでGoを始める

以下のサイトで環境構築がおすすめです。
[WindowsにGo言語をインストールする方法まとめ](https://qiita.com/yoskeoka/items/0dcc62a07bf5eb48dc4b)

サンプルです。
“`sample.go
package main

import “fmt”

func main() {
var a [3]int
a[0] = 100
a[1] = 200
a[2] = 300
fmt.Println(a)

var b [3]string = [3]string{“Go”, “Python”, “JavaScript”}
fmt.Println(b)
}
“`

コマンドで実行します。
sample.goが置いてあるファイルに移動し、
“`
go run sample.go
“`
結果は
“`
[100 200 300]
[Go Python JavaScript]
“`
です。終わります。
***
>他の記事
・[[2022年]WindowsでGoを始める](https://qiita.com/netineti5

元記事を表示

Go×Dockerで環境構築を実施する。

### 1. Go×Dockerで環境構築を実施する。
Go×Dockerは最近のナウイ開発ではよくこの構成になっています。本記事では`Go×Docker`の環境構築の方法を記載しております。
![スクリーンショット 2022-06-10 17.54.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/86ccabbe-c982-23aa-2505-dbe9e13c16f9.png)

### ①go moduleを作成する
go modはGoのアプリケーションルートのようなものです。値はなんでも良いのですが、`github.com/ユーザ名/アプリケーション名`が慣例となっています。
“`shell:go module
~/develop/go_docker $ go mod init github.com/kouji0705/go_docker
go: creating new go.mod: module github.com/kouji0705/go_docker
“`

##

元記事を表示

mac(intel)で公式インストーラでインストールしたgoを1.18にアップデート

go初心者の備忘メモ。
以下の記事を参考にしました!
https://shinshin86.hateblo.jp/entry/2020/05/08/060000

goが`/usr/local/go`配下にインストールされているので、そのディレクトリごと消す。
“`
sudo rm -rf /usr/local/go
“`

その後公式のダウンロードページから必要なインストーラを取得して、インストールするだけ。
https://go.dev/dl/

確認
“`
$ go version
go version go1.18.3 darwin/amd64
“`

元記事を表示

【Golang】fmt.Errorfとerrors.Newの違い

### 変数を埋め込みたい時は `fmt.Errorf`を使う
“`go
err := fmt.Errorf(“error create token: %w”, err)
“`

### 固定の文字列の時は `errors.New`を使う

“`go
err := errors.New(“invalid format”)
“`

元記事を表示

Go の rune 型を試してみる

## 前回

https://qiita.com/BitterBamboo/items/14a0d667ed4dbe2d549b

文字列を for-range で回す際に、
繰り返しの要素(1文字1文字)が `string` 型として現れることを期待していたのですが、
なんと **`rune` 型という気味の悪い型**([元ネタ](https://www.itmedia.co.jp/news/articles/1806/08/news065.html))が代わりに現れて少々困惑してしまいました。

今回はそんな `rune` 型の基本的な挙動を確認してみました。

## `rune` 型の入出力

まず大前提として、`rune` は `int32` のエイリアスであり、
さらに Unicode のコードポイント(10進数表記)に該当するのでした。

`rune` 型の変数に格納できる値は2種類あります。

* `int32` 型の数値
* `rune` リテラル

### `int32` 型の数値

“`go:int32 型の数値
package main

import “fmt

元記事を表示

Goのpackage github.com/mattn/go-sqlite3 is not a main packagetとかいうエラー

go初心者です。
go1.18 darwin/arm64を使っています。

このエラーの解決方法(個人的に)を残したいと思います。

①brew なりでsqlite3をインストールします。

②自分のPJのディレクトリでgo mod initします。
“`
go mod init github.com/mattn/go-sqlite3
“`
③go.modのあるディレクトリでgo mod tidyをします。
“`
go mod tidy
“`

これで使えるようになるはずです。

元記事を表示

【A Tour of Go】 並行処理編

公式の [A Tour of Go](https://go-tour-jp.appspot.com/list) ではじめて Go 言語を触ってみました。

**基本編**

https://qiita.com/BitterBamboo/items/58d80a1a1a85e18188ce

https://qiita.com/BitterBamboo/items/f72ce6f7ce20e6b5f6c7

https://qiita.com/BitterBamboo/items/6732a7a9fb2c904641b1

**メソッド編**

https://qiita.com/BitterBamboo/items/1fbd9ff6d0ec8d064062

**インターフェース編**

https://qiita.com/BitterBamboo/items/7f3e29b324bcc84c93ed

以下、並行処理について学んだことのメモ。

> Goは言語のコア機能の一部として並行処理機能を提供する(!)

## goroutine

* Go のランタイムによって管理される軽量

元記事を表示

go getがつかえない。(oapi-codegenのインストール)

# Goのバイナリを取得する。

oapi-codegenを使おうと思って、`go get`したら怒られました。

go 1.17以降は`go install`を使わないとだめそうです。

“`
$ go get github.com/deepmap/oapi-codegen/cmd/oapi-codegen@v1.8.2
go: go.mod file not found in current directory or any parent directory.
‘go get’ is no longer supported outside a module.
To build and install a command, use ‘go install’ with a version,
like ‘go install example.com/cmd@latest’
For more information, see https://golang.org/doc/go-get-install-deprecation
or run ‘go help get’ or ‘go

元記事を表示

OTHERカテゴリの最新記事