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

Go関連のことを調べてみた2022年10月20日
目次

【React×Go】フロント(React)とバック(Go)で連携する

## はじめに
よく「フロントエンドは○○で、バックエンドは××で」みたいな記述を見かけますが、フロントエンドとバックエンドの連携というのが調べてもパッと出てこなく、学習初期によく疑問に思っていたのでまとめました。

## 前提知識

ReactとGoの基本知識があることが前提となります。

#### Go
– APIサーバーを立ててjsonデータを返すことができる

#### React
– useState, useEffect
– axios

## 構成

フロントエンド:React
バックエンド:Go

フロントとバックの連携という1点に集中したいので、DBは使わず、テストデータを直書きしています。

## 1. Goでjsonデータを返す

#### 1-1. 適当な作業ディレクトリを作成します。

“`
~/Desktop$ mkdir dev
~/Desktop$ cd dev
~/Desktop/dev$ mkdir go-app // goアプリ用
~/Desktop/dev$ cd go-app
~/Desktop/dev/go-app$ code . //

元記事を表示

go.mod で Go のバージョンを更新する

# 概要

go.mod で Go のバージョンを上げたくなったときの方法がわからなかったのでメモ。
なお、 Go 自体のバージョンを上げる方法もついでに書いておく。

# 起きた現象

VS Code で Go の開発をしていて、ジェネリックを使おうと思ったら以下のエラーが出た。
Goのバージョン1.18以上で動作するとのこと。

“`
type parameters require go1.18 or later
“`

それでは Go のバージョンを上げようかと思ったら、 Go 自体は1.18になっていた。

“`bash
> go version
go version go1.18.3 darwin/amd64
“`

答えは、単に go.mod でバージョンが低く設定されていただけであった。

“`go.mod
module sample

go 1.17


“`

# go.mod の更新方法

Go のバージョンは既に上がっているが、 go.mod のバージョンが低い場合はどのように更新するか。
go.mod は基本は手で触らないので、以下のコマンドで

元記事を表示

entでmattn/go-sqlite3を用いたVersioned Migrationsの生成を実装するメモ

以下のVersioned Migrationsでmattn/go-sqlite3を使うときの話。

https://entgo.io/docs/versioned-migrations

サンプルコードに従うだけでは `sql/schema: sqlite: foreign_keys pragma is off: missing “_fk=1” is the connection string` のエラーが出る。`migrate.NamedDiff` に与える接続文字列(?)を工夫しないといけない。

正解は以下。

“`go
if err := migrate.NamedDiff(ctx, “sqlite3://main.db?_fk=1”, os.Args[1], opts…); err != nil {
// …
}
“`

`_fk=1` のクエリを与えないとだめっぽい。

元記事を表示

Go言語入門 学習メモ 5 type、for..range

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は ポインタ、コンポジット型(配列、構造体、スライス、マップ)を学習しました。

https://qiita.com/fsd-osw/items/b4e4d87cfe8f1ab100c5

# ユーザ定義型
typeは新規の型を作るためのキーワードで、Cで

元記事を表示

Go言語入門 学習メモ 4 ポインタ、コンポジット型(配列、構造体、スライス、マップ)

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は繰り返し、ラベルの働きなどを学習しました。

https://qiita.com/drafts/2ef594a01aabf09d6c7f/edit

# ポインタ
GoではC, C++のようにポインタを扱うことができるようです。ただし、ポインタの演算はで

元記事を表示

GoとNode.jsでgRPCサーバーとクライアントを作成

## ディレクトリ構成
“`:ディレクトリ
root/
 ├ server/
 │ ├ helloworld/
 │ └ main.go
 └ proto/
└ helloworld.proto
“`

“`protobuf:helloworld.proto
syntax = “proto3”;

option go_package = “./”;

package helloworld;

// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user’s name.
message HelloRequest {
string name = 1;
}

// The response message containing the greetings
message HelloRep

元記事を表示

Go言語入門 学習メモ 3 繰り返し、ラベルの働き

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は演算子、制御構文などを学習しました。

https://qiita.com/fsd-osw/items/1948d37313db220548b3

# 繰り返し
## for文
Goには繰り返し構文として用意されているのはforしかないようです。書き方に

元記事を表示

Go言語入門 学習メモ 2 演算子、制御構文

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は変数、定数などを学習しました。

https://qiita.com/fsd-osw/items/5d542c367d0bebb403b1

# 演算子
## 四則演算
他の言語と同じようです。

## 比較演算子
他の言語と同じようです。

## 代入

元記事を表示

Go言語入門 学習メモ 1 変数、型、定数

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 / Home
– VSCode
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# Goの概要
概要をさらっと触れます。
– コンパイラ型の静的型付け言語
– クロスコンパイルが可能
– 以下の環境変数を設定することで各環境に合わせて実行ファイルを生成
– GOOS
– GOARCH
– 組み込みも可能
– 標準ツールが豊富

元記事を表示

VSCodeでGo言語の開発環境を構築

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったため、勉強がてら備忘録で記録します。参考になる方がいらっしゃれば幸いです。

# 対象読者
– Go言語をこれから勉強する方
– VSCodeを使おうと考えている

# 今回使う環境
今回は下記を土台にGoの開発環境を構築します。

– Windows 11 Home / 22H2
– VSCode / 1.72.2

# 環境構築
環境構築はGitのインストールを除き、マイクロソフトの下記記事を参考に次の流れで行います。

1. Gitのインストール
1. Goのインストール
1. VSCodeのインストール
1. 拡張機能のインストール
1. Goツールを更新する

https://learn.microsoft.com/ja-jp/azure/developer/go/configure-visual-studio-code

## Gitのインストール
内部でGitを使うことがあるようで、必ずGitが必要という訳ではないようですがインストールすることが推奨されているようです。

https://qiit

元記事を表示

GoでRead-Onceオブジェクトを作ってみた

# TL; DR

– 「セキュア・バイ・デザイン」のRead-OnceオブジェクトをGoで実装
– `atomic.Pointer#Swap` で取得時に `nil` と差し替えて一度しか読めないようにする
– `fmt.Stringer`, `fmt.GoStringer` を実装してログ表示を防止

https://github.com/Syuparn/go-read-once

# はじめに

「[セキュア・バイ・デザイン](www.amazon.co.jp/dp/B09F697K2V)」では、ドメインモデル中の機密性の高い概念を実装するためのデザインパターンとして「Read-Onceオブジェクト」を提唱しています。

Read-Onceオブジェクトは以下のような特徴を持ち、機密情報を(比較的)安全に扱うことができます。

– **値を一度しか読み込めない**
– 機密情報を必要な箇所以外で参照されない
– **シリアライズできない**
– うっかりログに載らずに済む
– **継承できない**
– 安全でない拡張を防ぐ

実装はJavaで書かれていたので

元記事を表示

【Go】`fmt.Sprintf`で同じ変数を複数の箇所に埋め込みたい

## 概要
Goで文字列に対して変数の値を埋め込みたい場合、`fmt.Sprintf`の関数を使うことがあると思います。Sprintfの概要については、[【Golang】Sprintf関数で文字列を組み立てる方法を解説](https://asapoon.com/golang/3901/sprintf/)の記事を参照ください。
今回はこのSprintfで、同じ変数を複数箇所に埋め込む場合、どうするかというのをメモ書きします。(なお、Printfを使う場合でも同様の対応です)

## 対応方法
[Replace all variables in Sprintf with same variable](https://stackoverflow.com/questions/37001449/replace-all-variables-in-sprintf-with-same-variable)のstackoverflowの記事にある通り、`%[1]v`のような形式で埋め込む設定のところにindexを付与すれば、実現できます。

## 実装サンプル
例題として`第一著者 第二著者 第三著者`と

元記事を表示

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o_3o_11o0] ポジション作成

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o_3o_11o0] ポジション作成

# 連載の目次

? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)

# Step [O11o_3o_11o0] ポジション作成

あとで使うファイルを先に作成する

## Step [O11o_3o_11o1o0] ファイル作成 – kernel/o11o_3o_11o0_position.go ファイル

? 以下のファイルを新規作成してほしい

“`plaintext
? kifuwarabe-uec14
└── ? kernel
? └── ? o11o_3o_11o0_position.go
“`

“`go
// BOF [O11o_3o_11o1o0]

package kernel

type Position struct {
// Board – 盤
Board *Board
}

// NewD

元記事を表示

【Go】環境変数をStructから読み込む

はじめまして。haru_0_4です。
Goを勉強し始めて早くも半年が経過しました。
今回はGoで勉強する中で、環境変数を扱う際に便利なパッケージ[caarlos0/env](https://github.com/caarlos0/env)を見つけたので、紹介したいと思います。

## 環境変数の扱い方
DB周りの認証情報の設定は環境変数に持たせることが一般的かと思います。
私もGoで環境変数を扱うとき、標準バッケージ[os](https://pkg.go.dev/os)を使って次のような使い方をしていました。
“`golang
func main() {
port := os.Getenv(“PORT”)
fmt.Println(pass)
}
“`
ここで、環境変数がないときはどうするのかというと、このようにデフォルト値を設定する処理を書きます。
“`golang
port := os.Getenv(“PORT”)
if port == “” {
port = “8080”
}
“`
しかし、この処理を環境変数の数だけ書くのは効率的とは言えません。

元記事を表示

GraphQL、gqlgen を使って サーバ を立てる

# 記事を書こうと思ったきっかけ
インターン先で GraphQL が使われているので実際に手元で動かしてみようと思ったのがきっかけです。
本家のチュートリアルや、参考になった記事の内容をもとに構成されています。
この記事は [Go Conference mini 2022 Autumn IN Sendai](https://sendaigo.connpass.com/event/256463/?utm_campaign=event_message_to_selected_participant&utm_source=notifications&utm_medium=email&utm_content=title_link) の発表でも使われています。

# この記事に書かれていること
:::note info
gqlgen を使ったサーバの立て方
:::

:::note alert
Client 側の詳しい説明
:::

# GraphQL とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

draw.ioで作成した画面レイアウトから仕様書を自動で生成するツールを作ってみた

## このツールを作った背景
[draw.ioのライブラリを作った](https://qiita.com/capybara-alt/items/033596584f26cd96d94c)ので、実践編として投稿することにした。
前職がSIerでお客様に見せる画面イメージをdraw.ioで作成し、それを画面レイアウト定義(画面仕様書)に貼り付けて、番号や画面部品の詳細な説明などをつけていた。ただ、お客様とのミーティングで要望などを取り入れるたびにdraw.ioを修正→画面仕様書に貼り付け→画面部品の説明などの更新をしなければならなかった。この作業を少しでも楽にしたいという思いで中途半端な状態ではあるが、このツールを作成した。
## draw.ioを使う理由
draw.ioをプロジェクトで使うことになったのがきっかけで、部品にデータ(XMLのAttribute)を設定できたり、xmlファイルで管理されていることから、拡張ツールが作りやすそうと考えた。
## 実現方法
1. draw.ioで画面レイアウトを作成
2. (付番)対象の画面部品に対し、データを付与
![sample1.png](h

元記事を表示

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o_1o0] データファイル作成

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o_1o0] データファイル作成

# 連載の目次

? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)

# Step [O22o_1o0] データファイル作成 – data/board2.txt ファイル

あとで使うファイルを先に作成する

? 以下のファイルを新規作成してほしい

“`plaintext
? kifuwarabe-uec14
├── ? data
│ ├── ? board1.txt
? │ └── ? board2.txt
├── ? kernel
│ ├── ? board_area.go
│ ├── ? board_coord.go
│ ├── ? board_set.go
│ ├── ? o12o__11o1o0_board.go
│ ├── ? go.mod
│ ├── ? go.sum
│ ├──

元記事を表示

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o1o0] 空点以外のところ(石または枠の上)に石を置くことの禁止

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o1o0] 空点以外のところ(石または枠の上)に石を置くことの禁止

# 連載の目次

? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)

# Step [O22o0] 囲碁の石を打つルールの実装

# Step [O22o1o0] 空点以外のところ(石または枠の上)に石を置くことの禁止 – IsMasonry関数作成

とりあえず、 `石または枠の上に石を置く行為` に `Masonry` (メイスンリー)という名前を付ける。
従って この主のエラーは `Masonry error` と呼ぶことにする。
そのようなエラーであるかどうか判定する関数の名前は `IsMasonry` と呼ぶことにする

## Step [O22o1o1o0] ファイル作成 – masonry.go

? 以下の既存ファイルを編集してほしい

“`plaintext
? kifuwar

元記事を表示

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o2o0] 連の認識と、呼吸点のカウント

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o2o0] 連の認識と、呼吸点のカウント

# 連載の目次

? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)

# Step [O22o2o0] 連の認識と、呼吸点のカウント – GetLiberty 関数作成

盤上の座標を指定することで、そこにある `連` の `呼吸点` の数を算出したい

* `連` – Ren、れん。コンピューター囲碁用語。説明は省略
* `呼吸点` – Liberty、こきゅうてん。コンピューター囲碁用語。説明は省略

? 呼吸点を数えるために探索すると、一緒に以下のことも行える

* 連の認識
* 隣接する連の色の取得

このような探索を行う関数に名前を付ける。
`GetRen` がふさわしいが、慣習を優先して `GetLiberty` と名付けることにする

## ~~Step [O22o2o1o0]~~

Moved to `[O11o

元記事を表示

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o3o0] 相手の眼に石を置くことの禁止

目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O22o3o0] 相手の眼に石を置くことの禁止

# 連載の目次

? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)

# Step [O22o3o0] 相手の眼に石を置くことの禁止 – OpponentEye

囲碁のルールでは、相手の眼へは石を置けない。これを判定する

とりあえず、このルールへ直訳で短い名前を付ける。 仮に `OpponentEye` とでも呼ぶことにする

このルールは、あとで出てくる `Captured` のルールよりは優先度が低いとする

## Step [O22o3o1o0] ファイル編集 – kernel.go

? 以下の既存ファイルを編集してほしい

“`plaintext
? kifuwarabe-uec14
├── ? data
│ └── ? board1.txt
├── ? kernel
│ ├── ? play_r

元記事を表示

OTHERカテゴリの最新記事