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

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

[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

元記事を表示

5分でわかるGo言語の文法まとめ

# Java経験者から見たGo言語の文法一覧
※2020年当時書いたものを掲載しているので、Javaの言語仕様の理解が古いかもしれません。。。
ご容赦ください。

## 文法規則
### 出力
“`Main.java
public class Main {
public static void main(String[] args) {
System.out.println(“Hello, World”);
}
}
“`

“`main.go
package main
import (
“fmt”
)
func main() {
fmt.Println(“Hello World”)
}
“`
※fmtパッケージが必要

### 変数
型は最後に書く ※varは変数、letは定数

“`test.go
var c, python, java bool //c,python,javaは全てbool型
let swift bool = true //bool
“`

★初期化すれば型を書かなくてよい

“`test.go
var i, j i

元記事を表示

GoのScanfでunexpected newlineが出た話

Goのコーディング練習も兼ねて、P社の、お題に沿って簡単なプログラムを作成するとレーティングされるアレをやってました。
その中で、思いがけず「unexpected newline」エラーが発生してしまいました。
まあ、知っている人は知ってそうなので例によってポエムです。

## 現象

やりたかったのは`0101`みたいな4桁の二進文字列を読み取ること。サクッとScanfを使って以下のようなコードを書きました。

“`go:scanf_binary.go
package main

import “fmt”

func main() {
const COUNT = 2
var number_decimal int

for i := 0; i < COUNT; i++ { if _, err := fmt.Scanf("%04b", &number_decimal); err != nil { fmt.Println(err.Error()) break } } } ``` これを実際に動かすとこうなります。 ``

元記事を表示

【Golang】PHP の serialize のようにオブジェクトを保存可能なデータにしたい【gob】

Go でオブジェクトをシリアライズ(シリアル化)したい

> Go 言語(以下 Golang)で、オブジェクトを保存 & 読み込みできるように[シリアライズ](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA)したい。

JSON 文字列に変換してもいいのですが、`json.Marshaler` や `json.Unmarshaler` インターフェースを実装しないといけないものだと面倒です。

特に、ユーザーが保存データを直接編集する必要もないし、他のプログラム言語とのやりとりもない場合に、PHP の serialize くらい**簡単に保存可能な値に変換できないものか**悩みます。

[「”golang” phpのserializeみたいなもの」でググって](https://www.goo

元記事を表示

GoでZIPファイル扱う

# はじめに
PHPerだった私にはGoのZIPファイルの取り扱い方が少々ややこしかったので、忘れたときのために覚書を残すことにした。

# ZIPファイルの読み方
基本的な手順はこちら。
1. ZIPファイルを開く
1. 個別のファイルエントリーを取得
1. ファイルエントリーの情報が欲しい場合はFileHeader要素から取得
1. ファイルエントリーの中身を見たい場合はオープン
~~~go:reader.go
package main

import (
“archive/zip”
“io”
)

// エラー処理は省略
func main() {
zipfile, _ := zip.OpenReader(“./sample.zip”) // 1. ZIPファイルを開く
defer zipfile.Close()
for _, entry := range zipfile.File { // 2. 個別のファイルエントリーを取得
println(entry.FileHeader.Name) // 3. ファイルエントリーの情報が欲しい場合はFileH

元記事を表示

go開発環境をDockerで作成する③

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

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

## 開発環境の構成

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

~~~text: 開発環境
go-env/ ★ 開発環境構成 go-env はGitHubのレポジトリ
├── docker-compose.dev.yml
├── env/
│   └── Dockerfile.blog.dev ★ go-blogのDocke

元記事を表示

AWS S3のmockを作成してGitHub Actionsで自動テストを実行する

# はじめに
CRUDなWebアプリケーションを開発する際に、外部ストレージとして`AWS S3`を選定し、ファイルのアップロード処理やダウンロード処理などを実装する場合が多々あると思います。
`AWS S3`のようなマネージドサービスに依存するビジネスロジックに関しても単体テストもしくは統合テストをきちんと書き、自動テストを実行したい!! といった場合に役立ちそうな内容を記事にまとめます。

# 選定したツール
今回は`localstack`という、AWSのマネージドサービスをモッキングするためのツールを使用します。
`localstack`を使用することで、AWSの多くのマネージドサービスをモッキングすることが可能となります。
ツールを利用する際に一部有料となってしまう部分も存在しますが、今回モッキングを行いたいS3に関しては利用に際して無料となっているので、特に問題なく開発が行えそうです。

https://github.com/localstack/localstack

## 選定理由
`localstack`を選定するに至るまでいくつかの方法でS3をモックしてのテスト実行方

元記事を表示

OTHERカテゴリの最新記事