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

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

Golang 最新版を Amazon Linux2 へインストールする

Golang 最新版はこちら

https://go.dev/dl/

執筆時点の最新版は 1.18.3 でした

“`bash
wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz
“`

ファイルを解凍します

“`bash
sudo tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz
“`

パスを追加します

“`bash
echo ‘export PATH=$PATH:/usr/local/go/bin’ >> .bash_profile
“`

確認

“`bash
source ~/.bash_profile
go version
“`

結果
“`bash
go version go1.18.3 linux/amd64
“`

元記事を表示

(続) Ginフレームワークとsqlxを連携させた簡易プログラム例 (SelectとGetの違い、バルクインサート、トランザクション)

[前回の記事](https://qiita.com/rikimaru-odd-person/items/519053f24c20a3344f9c)に続いて、下記3つの使用方法についてお見せしたいと思います。

– SelectとGetの違い
– バルクインサート
– トランザクション

### 前回の記事
https://qiita.com/rikimaru-odd-person/items/519053f24c20a3344f9c

### 始めに、おことわり
– 「使えればいい」レベルでの内容ですので、セキュリティやコード品質は無視しております。ご了承ください。
– クリーンアーキテクチャではなく、ベタベタなController+Model形式での設計であることをご容赦ください。

### 環境とディレクトリ構成
前回と同じです

### 例題のソース
https://github.com/rikimaru-tokyo/gin_sqlx_lesson02

### 1: Select()とGet()の違い
– Select() : 複数行のデータ取得時に使用する。

元記事を表示

github.com/gin-gonic/gin がインストールできない?

## なにが発生した?
Go言語のWebフレームワーク **Gin** が気になったので、Hello,World!的なものを作ろうとした。
その際に、
“`
> go install github.com/gin-gonic/gin@latest
“`
を実行したが、`go build`でパッケージが見つからないエラーが発生した。

## この時の環境
“`
Microsoft Windows [Version 10.0.19044.1766]
(c) Microsoft Corporation. All rights reserved.

C:\Users\7280ayubihs>go version
go version go1.18.3 windows/amd64
“`

## 解決の備忘録

`go install`の実行後に調べてみると、`$GOPATH/pkg/mod`にGinが配置されており、`go build`実行時に`$GOPATH/pkg/mod`にパスが通っていないので、エラーになったようです。

で、この`$GOPATH/pkg/mod`は Go mod

元記事を表示

【自己学習】Go言語を学ぶ(2)

公式チュートリアルから基本を学ぶ
https://go-tour-jp.appspot.com/list

# Functions

関数は、0個以上の引数を取ることができます。
この例では、 add 関数は、 int 型の2つのパラメータを取ります。
変数名の 後ろ に型名を書くことに注意してください。

概要
* 型指定が必要
* mainの引数から別のFunctionsを読み込んで返せる
* 必ずfunction内で`return`を忘れないこと

* サンプルコード
“`go
package main

import “fmt”

func add(x int, y int) int {
return x + y
}

func main() {
fmt.Println(add(42, 13))
}
“`
* 結果:55

`x int, y int`は `x, y int`に省略できる

* サンプルコード
“`
package main

import “fmt”

func add(x, y int) int {
return x + y
}

func

元記事を表示

goでpluginパッケージを使う

## Go Plugin
– lambda関数を共通化できるlambda layerがPluginで作る必要があるみたいなので調べました
– lambdaでなければ、git submoduleとかのほうが使い勝手が良さそう
– Pluginだとローカルファイルとして用意してあげないといけないから

## Plugin側

### サンプル

“`golang
package main

import “fmt”

var V int

func F() { fmt.Printf(“Hello, number %d\n”, V) }
“`

### ビルド

– `-buildmode=plugin`をつけて、`.so`でビルドする
– おそらく、カレントディレクトリでimport pluginをしていないファイルがプラグインとして認識されてビルドされる

“`bash
GOOS=linux go build -buildmode=plugin -o plugin.so
“`

## 呼び出し側
### サンプル
“`golang
package main

i

元記事を表示

WSLでEbitenGameJam用Go言語開発環境を構築

# 経緯
おおよそ2週間でEbitenを使用したゲーム開発を行うEbitenGameJamに参加することになりました。
https://itch.io/jam/ebiten-game-jam

Ebitenについては @eihigh さんの書いている記事がとても参考になります。
https://qiita.com/eihigh/items/1fd6077327f99245b807

普段仕事で使用しているPCはMacですが、自宅用PCはWindowsです。
会社のPCで行うのもなんかなぁ…と思ったのでWindowsPCで開発を行うことにしました。

まったくgo言語触れたことがなく、当初vscodeを使用した開発を~と思っていましたが、
普段主に使用しているのがVimの為、できる限り近い感じでの開発環境を探していたところ、
WSLというのがあるからそれが良いんじゃないか?とアドバイスを頂きましてそれを試すことにしました。

# 使用しているPC
OS Windows 10 Pro
CPU i5-11400

# WSL準備手順
いくつかのサイトを参考にさせて頂きました。ありがとうご

元記事を表示

【自己学習】Go言語を学ぶ(1)

新しい言語としてgo言語を学ぶまずは公式チュートリアルから理解を深める

# Go言語とは
Googleが2009年に公開したプログラミング言語。
Robert Griesemer、Rob Pike、Ken Thompsonによって設計された。

# Go言語の特徴

* オープンソース
* シンプルな構文
* コンパイルが速い
* 並列処理をサポートしている
* ガベージコレクションによるメモリ管理
* 安全性が高い
* 継承がない
* 容易なエラーハンドリング

# 公式チュートリアル

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

まずはHello Worldから

“`go
package main

import “fmt”

func main() {
fmt.Println(“Hello, world”)
}

“`

# Packages

Goのプログラムは、パッケージ( package )で構成されます。
Go言語のソースファイルは必ず「package」文で始まる。Go言語は「パッケージ」という単位でグルーピングされる

元記事を表示

【Go言語】Ginフレームワークとsqlxを連携させた簡易プログラム例→sqlx中心です。

Go言語の[Ginフレームワーク](github.com/gin-gonic/gin)と、同じくGo言語のデータベース処理用ライブラリ[sqlx](github.com/gin-gonic/gin)を連携させた実装例を今回お見せしたいと思います。

「[gorm](https://github.com/go-gorm/gorm)ネタは多いけど、sqlxネタは少ないな」と思ってましたので。

sqlxの使い方にクローズアップさせてまとめました。

### (2022/6/19) 続編作りました。

SelectとGetの違い、バルクインサート、トランザクションについてまとめました。

https://qiita.com/rikimaru-odd-person/items/4151b6c94c0f48882e9c

### 始めに、おことわり
– 「使えればいい」レベルでの内容ですので、セキュリティやコード品質は無視しております。
ご了承ください。
– クリーンアーキテクチャではなく、ベタベタな`Controller+Model`形式での設計であることをご容赦ください。

元記事を表示

Go言語と抽象化

# はじめに

オブジェクト指向的な言語をはじめとして、大抵の言語は抽象化を行うための方法を有すると思います。

Go言語では、オブジェクト指向的な言語ではありませんが、interfaceという型により抽象化を行います。

例えば、package ioが定義しているReader インターフェースについて見てみましょう。

“`go
type Reader interface {
Read(p []byte) (n int, err error)
}
“`

このコードは、**Readという名前のメソッドを持ち、かつ引数として[]byteを取り、かつ戻り値として(int, error)を持つ型は、Reader interfaceにより抽象化できる**ということを主張しています。
(ちなみに、`error`はビルトインで定義されているinterfaceです。)

具体例を見てみましょう。

osパッケージにて定義されている型`File`は、以下のメソッドを持ちます。
“`go
func (f *File) Read(b []byte) (n int, err error)
“`

元記事を表示

もうタイムアウトまで待たない!gomockでゴルーチンをまたいでエラーを出す方法

# TL; DR

– gomockのモックをテストと別のゴルーチンで動かすと、モック未定義エラーが起きてもテストが終了しない
– テストが失敗した際、`go test` のタイムアウトまでフリーズしてつらみ
– そこで、 `*testing.T` をラップした独自のReporterを渡し即時終了するようにする

“`go
func TestHoge(t *testing.T) {
ctrl := gomock.NewController(NewConcurrentTestReporter(t))
defer ctrl.Finish()
}

type ConcurrentTestReporter struct {
*testing.T
}

func NewConcurrentTestReporter(t *testing.T) *ConcurrentTestReporter {
return &ConcurrentTestReporter{t}
}

func (r *ConcurrentTestReporter) Fatalf(format string, args .

元記事を表示

WebSocket Ping-Pong Frame実践

# WebSocket Ping-Pong Frame 実践

## inspire
mdnからWebSocketの規格を見ていたところ、Ping-Pong Frameの実装についてサーバー側からする必要があると記載を見たのでGoから実装しました。
[レファランス](https://websockets.spec.whatwg.org/#ping-and-pong-frames)

## 使うライブラリ
– [gorilla](https://github.com/gorilla/websocket) >= 1.5.0
– golang >= 1.18

## gorillaのAPIレファランス

Ping Frameは直接転送し、Pong Frameは[PongHandler](https://pkg.go.dev/github.com/gorilla/websocket#Conn.PongHandler)を設定することで、Ping-Pong Frameが実装できます。

## ソースコード

### サーバー側
– クライアントと接続が完了したところからのソースコードになりま

元記事を表示

【Go】BeegoでAPI構築してみる

# これはなに?

– Webフレームワーク[Beego](https://beego.vip/)を使ってAPIサーバを立ててみる記事
– 本記事では、BeegoインストールからbeeコマンドによるAPI構築まで試す

# 環境

– Go: 1.18.3
– Beego: 2.0.1
– Bee: 2.0.4

# 前準備

## Docker環境整備

“`:ディレクトリ構成
.
├── api
│ └── docker
│ └── Dockerfile
└── docker-compose.yml
“`

“`Dockerfile:Dockerfile
FROM golang:1.18.3-alpine3.16

ENV ROOT /go
ENV CGO_ENABLED 0

WORKDIR ${ROOT}

RUN apk update && apk add –no-cache git
“`

“`yml:docker-compose.yml
version: ‘3’
services:
api:
container_name: prac

元記事を表示

2021/06〜2022/05 GoタグLGTMランキングTOP30

|タイトル|投稿日|LGTM|コメント数|URL|
|—|—|—|—|—|
|ファイルパーミッションでスロットがしたい|2021-11-22T10:35:01+09:00|620|6|https://qiita.com/jiro4989/items/2530c4f789916521a47a|
|Magicodeという簡単に稼げるエンジニア向けブログサービスを作ったので使って欲しい|2022-04-16T22:05:05+09:00|441|5|https://qiita.com/Taiki92777/items/c53c51b3586078e2318c|
|マイクロサービスにひそむ複雑さに立ち向かう|2021-12-03T11:15:03+09:00|193|0|https://qiita.com/behiron/items/017b12ee7ffa6dfeb254|
|2022~2030年に学ぶべき未来のプログラミング言語3選|2021-09-27T18:06:48+09:00|89|1|https://qiita.com/baby-degu/items/f9e5

元記事を表示

Docker環境を構築し、Golang Echo v5-alphaでJWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、GormのORMが入ったフルスタックフレームワークチックな環境の構築をした

docker環境を構築し、
Go言語のフレームワークのechoフレームワークに、
JWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、
GormのORMと色々入ったフルスタックフレームワークチックな環境の構築をしてみました。

今回の記事は、この記事の作成の為に公開しました、gihubのソースの動かし方の説明になります。
※githubのソースは記事の一番下になります。

記事の評判がよければ、ライブラリーの比較や説明、ソースコードの説明等記事を更新するかもしれません。

※ validation、テストは入っておりません。
あと、errorハンドリングやlog出力等できていないです。

この記事は、golang初心者やechoフレームワークをこれから学ぶ人向けとなります。
自分は、golangの学習を初めて時間があまり経っていないので、少し説明やソースコードに粗がありますが、ご容赦ください

あと、元々echo v4で作っていたのを、echo v5-alphaに書き換えているので、
v5-alphaの作法に書き変わっていない部分があります。

今回詰まった点は

元記事を表示

【Go】Goで配列を爆速で処理してくれるライブラリが素敵だった【koazee】

## はじめに
Goで配列(SliceでもArrayでも)を操作したいと思っていたときに見つけた素敵ライブラリを、備忘録として記録。
JSとかSQLとか使っているとよく使うメソッド群をだいたい使えるようにしてくれる、とても素敵ライブラリ。
~~全部GoogleAdsQueryBuilderにgroup byが無いのが悪い。~~

koazeeの公式github のサンプルを元に、基本的な機能やキモについては
@nqdior様 https://qiita.com/nqdior/items/e225eae820d6157dc05b
に詳しいので、こちらもご一読いただけるといいかもしれないです。 **むしろ必読です。**

今回は、ポケモンの最新版仕様のデータをjsonでまとめられているgithubを見つけたので
初代151匹のポケモンのjsonを引っ張ってきて遊んでみることにします。

今回やってみるのは3つ。

タイプごとに並び替えたい
SQLとかでおなじみのgroup byをやってみます
特定のタイプのポケモンだけ抽出した

元記事を表示

Go言語のフレームワークEchoを使ってみた

# はじめに
Go言語で代表的なフレームワークEchoをチュートリアルを試してみました
環境:MacOS Monterey 12.3.1
   go v1.18.3

# Echoについて
Echoとは
高性能、拡張可能、ミニマリストのGoWebフレームワーク
です

https://echo.labstack.com/

・最適化されたルーター
・拡張性がある
・自動TLS
・HTTP/2
・ミドルウェア
・Data Binding
・Data Rendering
・Templates
・拡張可能

# インストール
最初に環境変数の$GOPATHを設定します
“`
export GOPATH=$HOME/.go
“`
※参考
https://qiita.com/yuku_t/items/c7ab1b1519825cc2c06f

下記を実行します
“`
mkdir myapp && cd myapp
go mod init myapp
go get github.com/labstack/echo/v4
“`

# サーバ起動
server.goというファイルを作成して下記

元記事を表示

【備忘録】Go(fiber)× Dockerでの環境構築を実施する。(Hot Reload対応)

Go×Dockerで環境構築しました。備忘録も兼ねて記載しておきます。
下記構成で、HelloWorldまでは出力することができます!!

“`shell:ディレクトリ構成
~/develop/gotenroku-server $ tree
.
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── go.sum
└── main.go

0 directories, 5 files
“`

“`Dockerfile:Dockerfile
FROM golang:1.17-alpine

ENV TZ /usr/share/zoneinfo/Asia/Tokyo

ENV ROOT=/go/src/app
WORKDIR ${ROOT}

ENV GO111MODULE=on

COPY . .
EXPOSE 1323

RUN apk upgrade –update && \
apk –no-cache add git

RUN go get -u github.com/cosmtrek/air

元記事を表示

AmazonのURLをひたすらDynamoDBに登録するだけのAPIをLambda Function URLsでつくった

# はじめに
この記事はLambda(Function URLs)とDynamoDBと連携させる内容となっています。
前回の記事の続きとなっているため同様の手順は省略しています。

GoでLambda Function URLs ハンズオン
https://qiita.com/tkhs1121/items/b1e332acdbc50fad8c45

# 環境
MacBook Air M1
開発言語 Go

# 追加で必要なパッケージのインストール
“`
go get -u github.com/aws/aws-sdk-go
“`

# ソースコード
“`main.go
func HandleRequest(ctx context.Context, payload Payload) error {
url, err := parseRequest(payload)
if err != nil {
return err
}
isAmazonURL, err := checkAmazonURL(url)
if err != nil {
return err
}
i

元記事を表示

GolangでSymbolブロックチェーンのトランザクションを送信する

この記事は「自分の得意なプログラミング言語でSymbolブロックチェーンを動かす方法」をGolangで実践したものです。

https://qiita.com/nem_takanobu/items/09b6b687f3cbe10af945

### import
“`go
import (
“fmt”
“time”
“bytes”
“net/http”
“crypto/rand”
“crypto/ed25519”
“encoding/hex”
“encoding/json”
“encoding/base32”
“encoding/binary”
)
import “golang.org/x/crypto/sha3”
“`

### アカウント作成
“`go
pub, priv, _ := ed25519.GenerateKey(rand.Reader)
publicKey := hex.EncodeToString(pub)
privateKey := hex.EncodeToString(priv[:32])
fmt.Println(publicK

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事