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

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

sijms/go-oraを使ってOracleDBを操作してみる (Golang)

Go言語を学び始めて1ヶ月の私が、Oracle DBのCRUD処理を実装する必要があったので、記事を書いてみようと思います。

# 1. はじめに

## 1.1. 読んでみてほしい対象者

* Go言語でOracle DB接続を実装したい人
* OR Mapperを利用できないため、簡易的にDB処理を実装したい人

## 1.2 利用するOracle Driver

今回利用するOracle Driverは`sijms/go-ora`です。

https://github.com/sijms/go-ora

`sijms/go-ora`はv1とv2がありますが、v2を利用します。
(Oracle 10.2以降はv2の利用を推奨と公式でも書かれています。)

私が利用を検討した結果の`sijms/go-ora`のメリット/デメリットは下記です。

* メリット
* 導入が簡単
* Go言語のみで作成されたOracle Driverのため、`Oracle Instant Client`などのインストールは不要で、`go get`コマンドさえ打てばすぐ使えます。

元記事を表示

Goを学ぶ有料講義を始めた話

## Gopher塾をきっかけ

2022年の10月より[Gopher塾](https://gopher.school)という有料の講義を始めました。参加頂いた方は、ありがとうございました!

[『チャンスは待たずに自分で作る ─ ソフトウェアエンジニアが「好きな技術」で生きていくための技術とは』](https://engineer-lab.findy-code.io/tenntenn-go)という記事にも書いた通り、有料にした理由は家族との時間を減らして行う個人活動の時間に一定の意味をもたせることです。

有料で行うからには、参加者が参加して良かったと思えるものにしなければいけません。[#1](https://gopher.school/1)はテストに関して、[#2](https://gopher.school/2)はGoらしいコードの書き方について扱っています(#2は開催予定)。

単なる使い方だけではなく、10年以上Goコミュニティで学んだ知識や開発経験、技術顧問などで複数社の設計・実装を見た経験を基に講義を構成しています。

また、私は内部構造を調べるのが好きなので、たとえばg

元記事を表示

Goでの列挙型を文字列ベースで作ってみる?

この記事は [弁護士ドットコム Advent Calendar 2022](https://qiita.com/advent-calendar/2022/bengo4com) の3日目の記事になります。

# Goでの列挙型どうしてますか?
こんにちは。
私は[弁護士ドットコム](https://www.bengo4.com/)株式会社の[クラウドサイン](https://www.cloudsign.jp/)事業本部で、Goを使ったバックエンドの開発に携わっています。

ところで、Goでの[列挙型](https://ja.wikipedia.org/wiki/%E5%88%97%E6%8C%99%E5%9E%8B)が欲しくなったとき、皆さんはどうしてますか?
私的には [iota](https://go.dev/ref/spec#Iota) が便利なんでよく使ってきました。

# 例題:フルーツバスケットを作ろう
列挙型を使う例題として、フルーツの種類を列挙型でコード化して、それを集めてバスケットに詰めるということをやってみたいと思います。

今回使ったGoのバージョンは以下のもの

元記事を表示

Beyond the Million Users[実践編]

朝起きたらまさかのスペインに日本が勝ってた!!!

勇気を貰えましたね。僕も頑張らねば…

前日の後編になります。今日は実践編です。

ふわとした記事なのでご容赦を…

ほぼポエムかもしれん。

kubernetes(クバネティス)を使ってサーバとDBのコンテナクラスタを作って遊ぼうしました。

## kubernetesとは?
コンテナオーケストレーションツールです。コンテナはdockerでimageから作るあのコンテナです。オーケストレーションとは、組織化、編成、調整、(管弦楽用に)編曲などの意味を持つ英単語。ITの分野では、大規模で複雑な情報システムの管理などをソフトウェアによって効率化、省力化、自動化することをこのように呼ぶことが多い。だそうです。要するに複数のコンテナを管理する技術のことです。これだけだとざっくりしすぎな説明なので詳しく知りたいてかたは[公式](https://kubernetes.io/ja/docs/home/)へgo!

今回はこのkubernetesをコンテナネットワーク(わかりやすいように造語を作った。クラスタ-のこと)を作るために使用し

元記事を表示

GoでSQL操作のテストを書く方法N選

この記事は[ニフクラ](https://www.nifcloud.com/)等を提供している、[富士通クラウドテクノロジーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/fjct)の3日目の記事です。
前日は、@SogoK さんの「[よくあるSPA+API構成でのOpenID Connectクライアント実装](https://sogo.dev/posts/2022/12/openid-connect-fastapi)」でした。今まで認証処理に触れる機会が少なかったので、原理を知れて勉強になりました。(ユーザーに見えないところで何工程もリダイレクトが走っていたんですね…)

# はじめに

しっかり書きたいSQL周りのテスト。しかし、合わない手法を使うと、実行時間がかかってしまったり失敗時にゴミが残ってしまったりとテストを流すこと自体億劫になってしまいがちです。

そこで、本記事では備忘録も兼ねてGo言語でSQL操作のテストを書く方法をいくつかまとめてみました。

# 検証に使用したコード

見やすいように

元記事を表示

Exponential Backoff And JitterのUTを実装する

# はじめに
ZOZOでは[API Gatewayを内製](https://techblog.zozo.com/entry/zozotown-api-gateway-intro)しています。API GatewayによるAPIリクエストのリトライ時には、[Exponential Backoff And Jitter](https://aws.amazon.com/jp/blogs/architecture/exponential-backoff-and-jitter/)による待ち時間を経た後にリトライする仕様となっています。

# Exponential Backoff And Jitterとは
Exponential Backoff And Jitterとは、リトライ回数が増えるごとに待ち時間を指数関数的に増やし、かつランダム性も加えることで輻輳を防ぐための考えです。一定間隔での待ち時間を経たリトライに比べて、リクエストが詰まりにくくなるという利点があります。

Goでのコードは以下です。引数tryCountは、何回目のリクエストかを意味しています。0の場合は初回のリクエストです。引数

元記事を表示

Go言語でjsonパースしたときにどこがまずかったかを出力する小ネタ。

本記事は [ディップ with 全部俺 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/dip-with-all-me) 3日目の記事になります。

本日は掲題の通り、Go言語に関する記事です。

## どういう記事?

Goでjsonを取り扱うとき、 `”encoding/json”` の `json.Unmarshal` を利用することがあると思います。
エラーハンドリングを `if err !=nil`でやってしまうとある程度の情報は出してくれますが、ズバリこの辺!というのは知り得ない状態になってしまいます。

今回は、エラーのあった前後の文字を出力して、もう少し見やすいログにしようというコンセプトです。

## どうやる?

早速回答から。
“` go
var data MyDataStruct
raw, err := ioutil.ReadFile(“./example.json”)
if err != nil {
log.Fatalf(“ReadFile Error: %v”, err)

元記事を表示

GCP Cloud Vision よく使う機能まとめ ~ Go言語 ~

# GCP Cloud Vision 機能一覧 with Go 言語

『画像や動画から、文字情報やどのような物体が映っているかを AI で抜き出したい!』と思っている、そこのあなた
[Cloud Vision](https://cloud.google.com/vision) していますか?

Google Cloud Platform の [Cloud Vision](https://cloud.google.com/vision) というサービスを使うと簡単に画像認識 OCR や物体検知を高性能で体験できます。
Cloud Vision API の機能一覧と実際にどのような場面で使えるかをまとめました。

[Google Cloud Platform](https://github.com/GoogleCloudPlatform) が[豊富な例を GitHub](https://github.com/GoogleCloudPlatform/golang-samples)に上げてくれているので、興味ある方は実際に触ってみてください。

## 機能一覧

Cloud Vision A

元記事を表示

golangを勉強しようと思ったので調べたみた

# golang入門
PHPerなバックエンドがgolangをやってみようという記事。

## 前提
初学者ではなくある程度他の言語を経験して、go言語を習得してみようという人間の個人的な見解です。

## ツール
golandを使ってます。補完機能やコードフォーマッタとかがデフォルトでも割と使えます。
会社で買ってくれないので個人で買ってますが…:thermometer_face:

### 動機
静的型付け言語を学びたいというだけです。

## 学習方法
1\. 書籍
2\. 動画 (udemy)

### 1.書籍
[はじめてのGo言語](https://www.oreilly.co.jp/books/9784814400041/)
未読ですが最近出版されたばかりのなのでおすすめしておきます。目次だけみると一通り基本のことは学べるみたいです。

[実用 Go言語](https://www.oreilly.co.jp/books/9784814400041/)
これも今年発行された本で、実務で使うかた向けになるのでおすすめしておきます。

### 2.動画(udemy)
動画教材

元記事を表示

Go言語を使ったWEBアプリケーション作成の環境構築手順

# 概要
windowsでGo言語を使ったWEBアプリケーション作成の環境を構築する

※前提としてVSCodeはインストール済みである事とする。
参考
[VSCodeでGo言語の開発環境を構築する](https://qiita.com/melty_go/items/c977ba594efcffc8b567)

# 目次
[1. Go言語のインストール](#1-go言語のインストール)
[2. VSCodeのGo拡張機能をインストール](#2-vscodeのgo拡張機能をインストール)
[3. プロジェクトの作成](#3-プロジェクトの作成)
[4. echoを使ってWEBサーバーを作成](#4-echoを使ってwebサーバーを作成)
[5. goのコマンドのまとめ](#5-goのコマンドのまとめ)

# 1. Go言語のインストール
[ダウンロードページ](https://go.dev/dl/)よりwindows版のインストーラーをダウンロードする

![20221201-0011.jpg](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

Goで画像変換&トリミングができる対話型CLIツール

これは[WEBCAMP ENGINEER COMMUNITY Advent Calendar 2022](https://qiita.com/advent-calendar/2022/webccamp-engineer-community)の2日目の記事です!

# 背景
この間、PCが苦手な友人が困っていました。

**友人「画像をECサイトに登録するために、JPEGに変換して、正方形に切り抜かないといけない。めんどくさい」
私「どうやってやってるの?」
友人「スマホでやってる」
私「PC使えば?無料ツールとか探せばあるでしょ」
友人「PCよく分からん。ペイント使えば出来るらしいけど。一発でやる方法ないかな〜」**

アドベントカレンダー用の題材に困っていた私は、「これだ!」と思い、勝手に自作することにしました。
仕事で使ったことはありませんが、最近Goが気になっているので、勉強も兼ねてGoで作ってみました。
Go製ツールは配布や実行もしやすいので、友人に使ってもらう際はその点も良さそうです。

# 作ったもの
こういった画像を、
![gopher.png](https://qiit

元記事を表示

SAMを利用したLambda(Function URLs)デプロイ

## はじめに

[フューチャーAdvent Calendar 2022](https://qiita.com/advent-calendar/2022/future) の2日目です。
この記事は今年2022年4月にリリースされた「Lambda Function URLs」を実務で利用したところ非常に簡単だったので、そのやり方を紹介する記事です。
SAM初心者の方向けの内容になります。

こんにちは、Future CSIG所属の二瓶賢です。
今年から[FutureVuls](https://vuls.biz/)という脆弱性管理サービスの開発チームで働いています。

さて、FutureVulsでは決済サービスにStripeや、メール送信サービスにSendgridといったwebサービスを利用しています。
そういったサービスではwebhookで異常を通知するケースが多いかと思いますが、それらwebhook受信用エンドポイントを都度用意するのが面倒という気持ちもあるかと思います。(私はそうです、特にサービスの検証段階だと猶更です。)

そこで、この記事では[AWS Lambda Funct

元記事を表示

【Go】値レシーバとポインタレシーバの違いと使い分けについて考える

この記事は「[Go Advent Calendar 2022](https://qiita.com/advent-calendar/2022/go)」2日目の記事です。

## はじめに
Goでは「型」に対してメソッドを定義します。
こんな風に…

“`go:main.go
type MyInt int

func (m MyInt) calculate() int {
return 1 + 1
}

func main() {
var m MyInt

fmt.Println(m.calculate()) // 2
}
“`
[Playground](https://go.dev/play/p/9lrKgTd6qNH)

ここでは`MyInt`という`int`型の「型」に対して`calculate()`というメソッドを定義しています。

型であれば何でも(`int`だろうと構造体だろうと)メソッドを定義できます。

「レシーバ」とはこのメソッドの引数`m`のことを指します。

https://go.dev/ref/spec#Method_declarations

元記事を表示

「Goのtime.Formatによるミリ秒切り捨て」と「MySQLのINSERTによるミリ秒四捨五入」で1秒の誤差が生まれた話

# 背景
2022年春頃にZOZOTOWNで[ログイン通知機能](https://zozo.jp/_help/default.html?id=6204a11db02e7e001df030c3)と[ログイン履歴機能](https://zozo.jp/_help/default.html?id=6204a0c3d79f060023f5d723)をリリースしました。QAのフェーズにおいて、「ログイン通知で表示されるログイン時刻」と「ログイン履歴で表示されるログイン時刻」で最大1秒の誤差が生まれるケースがあることが判明しました。どちらの時刻もミリ秒までは表示しない仕様です。1秒とはいえ、これらの値が不一致なのは問題なので原因調査と対策をしました。

# 原因
## ログイン通知で表示されるログイン時刻
ログイン通知で表示されるログイン時刻は、サーバがログインリクエストを受け付けた時の日時です。つまり、Goのアプリケーション上でのみ処理するデータです。アプリケーションでは、その日時を下のようにFormatし、ミリ秒を**切り捨て**ます。

“`go
package main

import

元記事を表示

Goの命名に頭を悩ませよう

## 命名の大切さ

名前は大切です。それは人の名前だったり、商品名だったり、そしてプログラミングにおける識別子だったり、どれも大切です。名は体を表す。設計と命名は表裏一体であり、良い命名は良い設計に繋がります。

ここでは主にGoの命名について考えていきます。

Goはよく名前を短くするの習慣であると勘違いされます。[Goに入ってはGoに従え](https://ukai-go-talks.appspot.com/2014/gocon.slide#24)においても『与えられたコンテキストの中でわかりやすい名前にする』とされています。

命名については[Goの命名規則](https://micnncim.com/posts/ja/go-naming-convention)という記事をみるとよくまとまっています。この記事で参照されている公式ブログの記事はかなり前の記事です。つまり、Goはリリース当初から名前が短ければ短いほどよいとしているわけではありません。

## 文脈を構築する

名前(識別子)は、プログラミング言語に登場するオブジェクトを識別するために用いられます。ここでは、変数、関

元記事を表示

Ruby と Go それぞれで依存性の注入を書く

## はじめに
これは [株式会社 RetailAI X Advent Calendar 2022](https://qiita.com/advent-calendar/2022/retail-ai-x) の 2 日目の記事です。

昨日は @kametaro さんの記事でした。 [RaftのErlang実装ことはじめ – Qiita](https://qiita.com/kametaro/private/a680d74da572f43ae493)

本日は、「 Ruby と Go それぞれで依存性の注入を書く」です。
Ruby の DI の是非は問いません。

## 環境
Ruby 2.6.1
Go 1.18.2
macOS Monterey ver. 12.3.1 Apple M1

## Ruby
?
“`ruby
class SubmachineA
def sub_process
# …
end
end

class Machine
def main_process
SubmachineA.new().sub_process
end
end

元記事を表示

個人的な新しいプログラミング言語に取り組むときの学習方法

# はじめに

新しくプログラミング言語を学ぶときに使用している型みたいなもので
筆者が現状このように学習を進めている、すすめていったら良いかなと思っているものです。

今回はGo言語について話していますがGoでなくともこのように学習をすすめたら
実務に入りやすいかなと思う方法を記述しております。

実務でスクリプト言語を扱うことが多いのですが
コンパイラ言語も使いたい、ということで人気のあるGo言語の基礎の部分を触ってみました!

まずは触ってみるのが一番ということで
他言語との違いだったりGo言語ならではの仕組みだったりを確かめながら実際に触ってみると
理解が深まると個人的には思います。

記事の流れはおすすめ記事 → ロードマップというようになっておりますので
気になるところからお読みいただけたら幸いです。

# 対象読者

こちらの記事はGo言語について深く触れるものではなく、
Go言語を触ってみたいけど何からはじめていいかわからないという方や
他の言語でも学習方法に困っている方におすすめな記事です。

# 目次
– [はじめに](#はじめに)
– [対象読者](#対象読者)

元記事を表示

Go言語でpingコマンドっぽい、でもpingコマンドじゃないpongコマンドを作ってみた

# はじめに

* Go 言語で pong コマンドを作成しました
* **PO**ng is **N**ot pin**G** :「pong コマンドは ping コマンドではありません」
* 本コマンドは kurehajime 様の作った「 [Go言語でpongコマンドを実装する](https://qiita.com/kurehajime/items/f9d225fab5eaa736913b) 」に多大な影響を受けております

# pong コマンドとは?

まずは、以下の画像をご覧ください(下記 Qiita の記事より借用しております)。

:::note warn
注:この画像・コマンドは私の作ったものではありません。
:::

![pong.gif](https://qiita-image-store.s3.amazonaws.com/0/33890/12c873d0-de1d-bb19-ccb7-7134984c09cd.gif)

あるいは以下の記事、もしくはリポジトリをご覧ください。

https://qiita.com/kurehajime/items/f9d225f

元記事を表示

GoでデータフレームパッケージのOSSを作ってみた話

## はじめに
Goのデータフレームパッケージを作り、OSSとして公開しました。この記事では、このOSSをつくるまでの経緯と、今回作った[Goban](https://github.com/hrbrain/goban)の基本的な仕組みの解説をしていきます。

### こんな人に読んでほしい
– OSSを作ってみたいが、何をしたらいいのかわからない
– Goを使ったデータフレームパッケージを探している
– Gobanにコントリビュートをしてみたい

## データフレームとはなにか
そもそも、データフレームについて聞いたことのない方も多いと思います。データフレームについては、以下の説明がわかりやすいです。

> データフレームとは、スプレッドシートのような、行と列からなる二次元のデータ構造です。データフレームは、柔軟かつ直感的にデータを格納し操作できるため、現代のデータ分析において最も一般的なデータ構造です。

引用元:[DataFrames – Databricks](https://www.databricks.com/glossary/what-are-dataframes#:~:t

元記事を表示

Goの並列テストでよくあるバグ(tt := tt忘れ)に対する対策

この記事は[tenntenn Advent Calendar](https://qiita.com/advent-calendar/2022/tenntenn)の1日目の記事です。

本記事は、[Gopher塾](https://gopher.school)で扱ったテストの話で、参加者の方から質問が出た並列テストにおけるよくあるバグについての解説とGo 1.20以降で入る対策について書きます。

## 並列テストとサブテスト

Goでは、テスト関数内で`(*testing.T).Parallel`メソッドを呼び出すとテストを並列に実行できます。テストを並列に実行することでテストを効率よく行い、実行時間の削減が見込めます。

また、`*testing.T`型には、サブテスト(子テスト)を実行するための`Run`メソッドがあり、サブテストを並列に実行できます。Goではテーブル駆動テストがよく用いられため、各テストケースがサブテストとして実行されます。テストの効率化を考えて、各テストケースを`Parallel`メソッドを用いて並列に実行することが多いです。

## 並列テストでよくあるバグ

元記事を表示

OTHERカテゴリの最新記事