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

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

【Go】select 文とは? – ゴルーチンの制御

# `select`文 – ゴルーチンの制御

Go言語は並行処理を強力にサポートしており、そのための主要なツールとしてゴルーチン(軽量スレッド)とチャネル(ゴルーチン間での通信メカニズム)があります。`select`文は、複数のチャネル操作(送信や受信)の中から、実行可能なものを選択するための制御構造です。

## 基本的な使い方

`select`文は、以下のような形式で使用します:

“`go
select {
case msg1 := <-ch1: fmt.Println("Received", msg1) case ch2 <- 2: fmt.Println("Sent 2 to ch2") case msg3, ok := <-ch3: if ok { fmt.Println("Received", msg3) } else { fmt.Println("ch3 is closed") } default: fmt.Println("No communication") } ``` 上記の例

元記事を表示

【Go】make 関数とは?

# `make`関数について

Go言語には、特定の型を初期化するための関数、`make`があります。この関数を理解することで、Goのデータ構造をより効果的に使用することができます。

### `make`って何?

`make`関数は、Goのいくつかの特定の型(スライス、マップ、チャネル)を初期化して、使用可能な状態での値を返すための関数です。

# 作成できる型

### 1. スライスの初期化

スライスは、配列の部分的なビューを提供するデータ構造です。`make`を使用することで、指定したサイズと容量のスライスを生成できます。

“`go
s := make([]int, 5) // 長さ5、容量5のintスライス
“`

### 2. マップの初期化

マップは、キーと値のペアを保存するためのデータ構造です。`make`を使用して、新しい空のマップを作成できます。

“`go
m := make(map[string]int) // stringをキーとし、intを値とするマップ
“`

### 3. チャネルの初期化

チャネルは、ゴルーチン間での通信や同期をサ

元記事を表示

What’s New from CircleCI – 2023/10/03

CircleCIは日々進化していますが、その変化に追いつくのは大変ですよね。
What’s New from CircleCI を毎週チェックして、CircleCIの最前線をキャッチアップしてくださいね!

[< What’s New from CircleCI – 2023/09/26](https://qiita.com/CircleCIJapan/items/26c88c03513af66e25e9) | 今週

# ブログやスライド、ビデオ
## ユーザーからの声
– [pt-online-schema-change の実行が必要かどうか判断するタイミングをより早くした話](https://tech.repro.io/entry/2023/10/03/090000) by Repro
– MySQLのスキーマ変更を行う際に、pt-online-schema-change の実行が必要かどうかを判断するタイミングをより早くするために、テスト環境でのスキーマ変更を自動化した話です。
– [ココナラiOSアプリの最近の取り組みと今後の取り組み](https://zenn.de

元記事を表示

【Go】標準パッケージの trace とは?

# `trace`パッケージ とは?
Go の標準パッケージの trace は、アプリケーションの実行中に発生したスタックトレースの情報を記録するためのパッケージです。このパッケージを利用することで、アプリケーションの実行中に発生したエラーの原因を特定したり、アプリケーションのパフォーマンスを分析したりすることができます。

trace パッケージの基本的な使い方は、次のとおりです。

“`go
package main

import (
“runtime/trace”
)

func main() {
// トレース開始
trace.Start()

// エラーを発生させる
_, err := doSomething()
if err != nil {
// エラーを処理する
fmt.Println(err)
}

// トレース終了
trace.Stop()
}

func doSomething() (int, error) {
// 何かしらの処理を行う

元記事を表示

Go 1.22でのForループの変数スコープの変更について

## はじめに
最近、Goのブログで「[Fixing For Loops in Go 1.22](https://go.dev/blog/loopvar-preview)」という記事が公開されました。この記事では、Go 1.22でのforループの変数スコープに関する変更について詳しく説明されています。
以下、その内容を紹介します。

## 記事の内容
Goのコード書いていて、forループの変数スコープに関する問題に直面したことはありますか?
Go 1.22では、この問題に対する重要な変更が導入されます。

## 問題点
Goでの一般的なミスの一つは、**ループ変数への参照をその反復の終了後も保持してしまうこと**です。
これにより、予期しない動作が生じることがあります。

例えば、以下のコードを考えてみましょう。

“`go
package main

import “fmt”

func main() {
done := make(chan bool)
values := []string{“a”, “b”, “c”}
for _, v := range values {

元記事を表示

[AWS] Amazon Textractの実装と機能

# AWSのAmazon Textractの概要と機能

## 概要
Amazon Textractは、AWSのクラウドベースの光学文字認識(OCR)サービス。このサービスは、印刷された文書や手書きのメモ、テーブルなどの情報を構造化されたデータに抽出し、機械的な処理や分析に利用することができる。Amazon Textractは、文字や単語の位置情報、テーブルのセルや行の情報などを抽出するため、精度の高い結果を提供する。

## 機能
以下に、Amazon Textractの主な機能を示します。

1. テキスト抽出: イメージファイルやPDFなどの文書から、文字の情報を抽出し、手書きの文字や印刷された文字に対しても高い精度で認識が可能。
2. テーブル抽出: テキストベースで構成された表やグリッドの情報を抽出し、テーブル内のセル、行、列の情報を構造化した形式で提供する。
3. フォーム抽出: フォームの情報(氏名、住所、電話番号など)を自動的に抽出し、複数のフォーム項目を一括で処理することができる。
4. 関連画像抽出: 文書に関連する画像を検出し、抽出することができる。画像内のオブジ

元記事を表示

Go Generics 入門 : 最大・最小・総和を求める

# 本記事について

本記事では、Go言語1.18で追加されたのGenericsを使って、
最大(`Max`)・最小(`Min`)・総和(`Sum`)を求める関数を作ります。

Genericsを使うメリットとして、

1. 引数の型と返り値の型が違うだけで、中身が全く同じ動きをしている関数が1つになる
– 1つの関数のバグが複数個のバグにならなくなる
2. 引数に与える値が特定の型に合致しているか、関数が実装されているかどうか判定できる
– 「この関数が実装されてないと動かないよ!」「この型じゃないとダメだよ!」とコードを書いている最中にツールが教えてくれる
3. interface{}を引数に取った型スイッチによる分岐が減る
– 関数実装時に持つ「なんか強引な実装だな」というモヤモヤ感がなくなる

という3点があります。

本記事では、競技プログラミングサイトのAtCoderの問題を通して、GoのGenericsを使った簡単な関数を作成します。

# AtCoderの言語アップデート

8月にAtCoderの提出言語アップデートが来ました。これにより、At

元記事を表示

Golangのパッケージではまってしまった メモ

Go言語のパッケージの勉強していたところ、main.goからその下の配下のgoファイルをインポートできずにエラーが発生しました。
検索してググり、ググり・・
分からなくて、ChatGPT先生に相談したり・・・。
Goのバージョンによりライブラリ配下importのパスなどの設定が異なることが原因らしい。
GOPATHの配下にディレクトリを作りました。
C:\Users\ユーザー名\goの下にディレクトリを作成して
そこにmain.goファイルを作りその下にディレクトリを作り、その中に読み込みたいgoファイルを作成。

そして初期化
““
PS C:\Users\ユーザー名\go\awesomeProject> go mod init awesomeProject
go: creating new go.mod: module awesomeProject
go: to add module requirements and sums:
go mod tidy
““
ディレクトリ構成はこんな感じです。
![スクリーンショット 2023-10-02 045219.pn

元記事を表示

(WIP) A Tour of Go をやってみる

# Overview
Golang のキャッチアップの為、A Tour of Go に取り組む。

A Tour of Go:

https://go-tour-jp.appspot.com/list

# Using the tour
https://go-tour-jp.appspot.com/welcome/1

チュートリアルの説明が記載されている

# Packages, variables, and functions

## For loop
https://go-tour-jp.appspot.com/flowcontrol/2

> 初期化と後処理ステートメントの記述は任意です。

初期化と後処理ステートメントを記述しない場合、条件式の前後にセミコロンをつける、つけないは選択可能

OK:

“`go
for ; 条件式; {

}
“`

OK:

“`go
for 条件式 {

}
“`

## If statement

https://go-tour-jp.appspot.com/flowcontrol/5

If stat

元記事を表示

Goのfor文で詰まった話

# 詰まった点
user.NameでUser構造体のNameフィールドを書き換えているのに変更が正しく反映されない…
## ソースコード
“`go
package main

import “fmt”

type User struct {
Name string
Age int
}

func main() {
users := [3]User{
{“Alice”, 25},
{“Bob”, 30},
{“Charlie”, 22},
}

for _, user := range users {
user.Name = “太郎”
}

for _, user := range users {
fmt.Println(user.Name)
}
}
“`

## 実行結果
“`
Alice
Bob
Charlie
“`

# 原因
定義された`User構造体の配列の要素`とfor文で回されている`User構造体の配列の要素`は実はメモリ内ではそれぞれ別の場所に保持されている、つまり全く別の変数として扱われているため

# 対処法

元記事を表示

golangでsnake game作ってみた

普段から業務でGoを書いているのと、
最近ebitengineというGoでも簡単に2Dゲームを作成できるゲームエンジンを知ったので、
Goの勉強がてらsnake gameを作成してみることにしました。

https://ebitengine.org/ja/

初めてのゲーム作成なので少し難しかったのですが、わかりやすいチュートリアルがあったので、以下の記事を参考にして理解しながら進めました。

自分はinterfaceやメソッドの使い方に慣れていなかったので少し勉強しながらでしたが、
Go言語を普段から書いている方であればすぐに理解できるかもです。

https://kusingh.hashnode.dev/building-snake-game-in-golang-complete-guide

こんな感じで動きます

![画面収録 2023-10-01 14.39.49.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1953754/1ff7a9aa-bd89-1004-ce71-705351dbff

元記事を表示

Golang + aws cli + aws sam cli のDevContainerを構築してみた

# はじめに

やろうとおもったきっかけ

https://www.udemy.com/course/bitcoin-lambda-golang/

このUdemy講座を見ていて、Golang、aws cli、aws sam cli をインストールするセクションがあります。
講座ではシンプルにするためにローカル環境にhomebrewでインストールしてましたが、環境を汚したくなかったので、DevContainerとして構築できないかとやってみました。

:::note warn
筆者はGolangもAWSもコンテナも初学者です。
記載する内容が正しい保証は一切なく、ベストプラクティスでもありません。
至らぬ点がありましたらコメントで教えていただけますと幸いです。
:::

# 環境

– macOS 13.6
– Docker 24.0.2-rd
– VSCode 1.82.2

# 各種ファイルの用意

作成したファイルは下記3つです。
分けずに作れそうだなあとも思いつつ、そこは放置。。。

1. `Dockerfile`
2. `docker-compose.yml`
3. `dev

元記事を表示

aws-sdk-go経由で AWS bedrock / Stable Diffusionで画像生成するメモ

個人用メモ
– 上位モデルは現在予約済のスループットでしかサポートされていない?
– goに関してはbedrock でなく bedrockruntime パッケージを使う。
– 画像はbase64データとしてSDKより直接返ってくる
– APIリクエストのオプションは[stability.ai](https://platform.stability.ai/docs/api-reference#tag/v1generation/operation/textToImage) と同様

“`go
package main

import (
“encoding/base64”
“encoding/json”
“fmt”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/bedrockruntime”
“github.com/wano/contextlog/clog”
“os”
“path/filepat

元記事を表示

手を動かしながら学ぶクリーンアーキテクチャ

こんにちは。

私は今、実務でクリーンアーキテクチャを採用しているサービスのバックエンド開発に携わっています。クリーンアーキテクチャについてはどれだけ記事を読んでも、分かったような分からないようなといった状態が続いていたのですが、実装をしてみることで理解が深まったような気がしています。

なので今回は自分と同じようにクリーンアーキテクチャについて理解に苦しんでいる人に向けて、手を動かしながらクリーンアーキテクチャを学べるような記事を書きました。

言語はGoを使用していますが、Goは文法がシンプルであるため、Goに親しみがない人でも実装内容は理解できるのではないかと思います。

プログラムはGitHubにて公開しているので、必要であれば見てもらえればと思います。

https://github.com/JunNishimura/clean-architecture-with-go

# 対象読者
– クリーンアーキテクチャについて記事や書籍を読んでみたけど、いまいち理解できていない人
– クリーンアーキテクチャの概念は理解しているけど、それをどう実装するのかに悩んでいる人
– クリーン

元記事を表示

GoでWebアプリケーション

### Webサーバーの準備

以下の目的でWebサーバーを用意する

・クライアントがブラウザ上で利用するHTMLとJavaScriptを提供する
・クライアントとの間でWebSocketを使った通信を行う

### 処理の流れ

・net/httpパッケージを利用し、ルートのパスへのリクエストを待ち受ける
・リクエストを受け取ると、HTMLを返す
・ListenAndServeメソッドで、ポート番号上でWebサーバーを開始する

### ソース

“`
package main

import (
“log”
“net/http”
)

func main() {
http.HandleFunc(“/”, func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`


GoのWebアプリケーション


GoでWeb


`))

元記事を表示

Web開発初学者と学ぶCleanArchitecture

# 自己紹介
文系大学院生をしているものです。
今回初Qiitaとなります。何にも考えずに執筆したので多分駄文です。お手柔らかにお願いいたします。
ここ違うよってところありましたら、お手数ですがコメントで教えていただけると助かります。

# はじめに
この記事は、Web開発を初めて行なった際に一番苦労したシステム設計について書き残したものです。
コードはGolang、MySQLで書いています。([サンプルコード](https://github.com/temmie524/room-management-app))

私はこれまでRailsでハンズオン記事やRailsTutorial等を用いてWeb開発をチュートリアル的に行なってきました。Railsではrails g した際に雛形が自動生成されるため、システム設計を意識することなく開発を行なってきました(それがRailsの良さであると理解しています)

今回はGo言語での開発を行いましたが最初につまづいたのはそこでした。1から自分で考えなくてはいけません。そこで「アプリ作る時 ディレクトリ構成」などとググったところ、そこでさまざまな設計

元記事を表示

Agora SDKでリアルタイムコミュニケーション

# Agora SDKの概要と機能

Agora SDKは、リアルタイムコミュニケーションを実現するためのプラットフォーム。SDKは、ビデオ通話、音声通話、メッセージングなどのさまざまな通信機能を提供します。以下にAgora SDKの主な機能を詳しく説明する。

1. ビデオ通話:
– ビデオキャプチャとディスプレイ: カメラや画面の共有を実現するための機能
– オーディオ/ビデオコーデック: 高品質なオーディオ/ビデオストリームのエンコードおよびデコードをサポート
– リアルタイム映像処理: ビデオフィルターや仮想的な背景などのリアルタイム映像処理を実現する機能
– レコーディングとプレイバック: ビデオ通話の録画および再生をサポート

2. 音声通話:
– 音声コーデック: 高品質な音声ストリームのエンコードおよびデコードをサポート
– ノイズおよびエコーキャンセル: 音声品質を向上させるためのノイズおよびエコーキャンセル機能
– オーディオミキシングと変換: 複数の音声ストリームをミキシングしたり、サンプルレートを変換したりする機能

3

元記事を表示

【Go言語】Go言語基本型

Go言語でのメモです。

Goには整数型、浮動小数点型、論理型、文字列型など基本的なデータ型があります。

## 整数型

| 型 | サイズ(bit) | 符号 | 最小値 | 最大値 |
| ————– | ——————–: | —- | ———————:| ———————–: |
| int8 | 8 | あり | -128 | 127 |
| int16 | 16 | あり | -32768 | 32767 |
| int32 | 32 | あり | -2147483648 | 214

元記事を表示

golang+reactなアプリの開発環境をモノレポで作る

こんにちは。

モノレポという、1つのリポジトリに複数のアプリを1つのリポジトリに保存するというパターンがあるということを知ったので、
実際にその構成での開発環境を作ってみます。

今回考えるのは、APIサーバとしてgolangで作られたものがあり、reactではそのフロントエンドを実装するようなアーキテクチャにします。

# この記事で達成すること

– golangでAPIの開発環境を作る
– reactの開発環境を作る
– 1つのリポジトリで↑2つのアプリが保存されている再現できる(モノレポ構成にする)
– reactとgolangをモノレポで構成

# 言語、ミドルウェアのバージョン

| 言語、ミドルウェア | バージョン |
|:———-:|:—————:|
| docker | 20.10.11 |
| docker-compose | 1.29.2 |
| golang | Dockerfile参照 |
| mysql | Dockerfile参照

元記事を表示

【Oracle DB】DATE型のカラムに日付をINSERTすると、ORA-01861: literal does not match format stringとなる

## やったこと

Goのdatabase/sqlパッケージを使用し、DATE型のカラムtest_dayに日付をINSERTした。

“`go
query := INSERT INTO my_table(test_day) VALUES(‘1999-01-01’)

db.ExecContext(ctx, query)
“`

## エラー

ORA-01861: literal does not match format string

## 対応

OracleDBのTO_DATE関数を使用する
明示的にDATE型に変換して日時データにする必要がある。

“`go
query := INSERT INTO my_table(test_day) VALUES(TO_DATE(‘1999-01-01′,’YYYY-MM-DD’))

db.ExecContext(ctx, query)
“`

こちらでも可能だが、時刻の指定はできず、時刻は常に00時00分00秒となる
日付リテラルであり、日時リテラルではない)

“`go

元記事を表示

OTHERカテゴリの最新記事