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

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

Goに入門してみた(自分用学習メモ)

会社でなんかGOやるかもしれない…という話を聞き
個人的にも気になってはいたので(シングルバイナリのプログラムをクロスコンパイル出来るという部分)
入門してみることに

# まず、GOとはからググることに(Wikipediaを読んでみよう
https://ja.wikipedia.org/wiki/Go_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
> Goはプログラミング言語の1つである。Googleにおいて2009年~~設計された
> マスコット・キャラクターはGopher(ホリネズミ)

あのキャラクター、「Gopher」というらしい

>言語の正式名称はGo

GOでもgolangでもなく「Go」だそう

# ふーんって感じなので、まずは基本を学んで見る
https://go-tour-jp.appspot.com/welcome/1

## packages
goのプログラムはパッケージで構成される
プログラムのエントリポイントはmainパッケージ(mai

元記事を表示

2023年だし日本語勉強する

# あけましておめでとうございます(*1)

2023年が明けました!素数の年ですね!(大嘘)

最近勉強をさぼりがちなので、本からインプットを受ける題材でプログラムを組んでみる。
去年影響を受けたのが

+ ゆる言語学ラジオ
+ ずんだもんのRTA

なので、「日本語xずんだもん」に関する物とする。今回は会話の相手をずんだもん化させる。

zundamon
著作権が怖いので、ぼかしてます

会話の中に組み込むシステムなので会話の真ん中にシステムが来るイメージ。

“`mermaid
sequenceDi

元記事を表示

gRPCに入門してみた

## 参考ドキュメント
– https://developers.google.com/protocol-buffers/docs/overview
– https://grpc.io/docs/languages/go/quickstart/

## 必要なツール
– golang
– 1.19.2
– cli
– protobuf
– goenv
– go module
– [google.golang.org/grpc](https://github.com/grpc/grpc-go)
– goのgRPCの実装
– [google.golang.org/grpc/cmd/protoc-gen-go-grpc](https://github.com/grpc/grpc-go/tree/master/cmd/protoc-gen-go-grpc)
– goのgrpcコードの生成ツール

## 環境準備

“`sh
$mkdir $WORKSPACE
$cd $WORKSPACE
$brew install protobuf
$goenv loca

元記事を表示

【Golang】プロセカのリザルト画像からスコアをまとめるプログラムを作った話

# はじめに

 どうも、Shakku です。
 都内某高専の情報科2年生です。(2023/1/25時点)
 バックエンドのエンジニアを目指すべく、Go言語を個人でお勉強中です。
 今回はじめてQiitaの記事を書いてみるので、誤字脱字や変なところがあると思いますがお許しを…

# 制作経緯

 普段[プロセカ](https://pjsekai.sega.jp/)をプレイしていて、楽曲ごとの良かったリザルトを見返したいなーと思った時がよくあります。

>
>惜しかったリザルト

 スクリーンショットを撮ったりTwitterに投稿したりはよくしますが、昔に出したリザルトを振り返るときはちょっと面倒なんですよね。
 また、ゲーム内の機能ではキャラ育成面でのハイスコアしか振り返れません。

 そこで、Go言語の勉強も兼ねて、

元記事を表示

goqu – SELECT 編

## 概要

* [goqu package – github.com/doug-martin/goqu/v9 – Go Packages](https://pkg.go.dev/github.com/doug-martin/goqu/v9)
* [doug-martin/goqu: SQL builder and query library for golang](https://github.com/doug-martin/goqu)

goqu は SQL ビルダー。
SQL 文を動的に生成したいときに便利。

## 基本

~~~go
package main

import (
“fmt”

“github.com/doug-martin/goqu/v9”
)

func main() {
sql, params, err := goqu.From(“user”).ToSQL()
fmt.Printf(“%s %v %v”, sql, params, err)
}
~~~

以下の SQL が生成される。

~~~sql
SELECT * FROM “user”

元記事を表示

Microsoft AzureでGo + Gin + GormのWebアプリケーションをデプロイする

# あらすじ
Microsoft Azureを使用したGo + Gin + GormのWebアプリのデプロイができたので、メモ程度に書き込みます。

## 環境
・Mac OS
・Microsoft Azure
・Visual Studio Code

# Microsoft Azure操作
## アカウントの作成、またはログイン
[Azure公式サイト](https://azure.microsoft.com/ja-jp/free/search/)でアカウントの作成、またはログインを行う。

## Webアプリの作成
[Webアプリ]の[作成]を選択
![Screen Shot 2023-01-23 at 22.00.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3039114/66457293-08e3-4065-8fc9-1361014f27d5.png)

[基本]画面の各種項目設定後、[確認および作成]ボタンクリック後、作成
例)
![Screen Shot 2023-01-23 at

元記事を表示

Go言語でLVMを操作して、論理ボリュームやスナップショットを作成

Linux の 仮想化ソフトウェア Libvirt/KVM を利用する時に、ネットワークの仮想化では Open vSwitch (OVS) があり、ストレージの仮想化は Logical Volume Manager (LVM) を併用すると便利な環境が作れる。これは仮想化環境で利用するために、LVM を Go言語で操作する方法について検討したメモである。

## LVMの概要とスナップショットボリューム

LVMは、外部ストレージ装置の助けを借りずにLinux OS で、ディスクドライブの2重化 や RAIDアレイ を構成する機能を提供して、ドライブなどのハードウェアが故障した時に、保存したデータを失う事態を回避することができる。さらに、論理ボリュームのある時点の状態を固定化したスナップショットを作成することができる。このスナップショットボリュームを更新しても、元になった論理ボリュームのデータが変更されることは無い。スナップショットの元になったオリジンボリュームに変更を加えても、スナップショットボリュームの内容が書き換わることが無い。

そのため、スナップショットは、バックアップ、テ

元記事を表示

React:簡易APIクライアント

作成:2023年1月24日
体重など健康データを保存するアプリとバックエンドを作ってみたく、バックエンドをGo、フロントエンドをReactで作成予定です。
前回の記事で[Goで簡易APIサーバー](https://qiita.com/RYO_/items/14f3ffd5b44ef95da9ac)を作りましたので、今回はReactで簡易APIクライアントを作成します。

# React簡易クライアント
Reactのプロジェクトを作成します。
“`
% npx create-react-app api-react
“`
フォルダapi-reactの中で実行します。
“`
% yarn start
“`
実行できました。

axiosをインストールします。
“`
% yarn add axios
“`
[React で

元記事を表示

【Go】テスト時にno such file or directoryエラーとなる。

## やったこと

・下のようなcsvファイルを読み込む処理があり、テストを実行すると、csv/sampleファイルが存在するにもかかわらず、no such file or directoryエラーとなる。
・go run コマンドで実行すると問題なく処理できる。

“`readCsv.go
func (b *boxerService) CreateBoxers() error {
fpath := “csv/sample.csv”
f, err := os.Open(fpath)
if err != nil {
logger.Info(“Error while opening sample.csv: ” + err.Error())
}
defer func() {
f.Close()
}()
~ 中略
return nil
}
“`

### パッケージ構成

“`
┌ csv
│ └ sample.csv
└service
└ readCsv.go
“`

## エラー内容

“`
Error while opening sam

元記事を表示

Golangの学習環境を爆速で構築する

## はじめに
普段はLaravelを使って開発をしているのですが、静的型付け言語も学習してみたいと思い、Golangの学習を始めました。そこでGolangの学習環境を構築したので、記事にします。

今回作成した環境のコードはGithubにあげているので、良ければクローンして使ってみてくださいね。

P.S. スターなんかを付けてもらえると泣いて喜びます・・。

■Golangの学習用環境はこちら

https://github.com/fumiakikobayashi/go-learning-environment

## 本環境の使用方法 〜初回セットアップ編〜
※ 事前にDocker Desktop for MacやDocker Desktop for Windowsなどでご自身のPC環境にDockerのインストールは済ませておいてください

はじめにリポジトリをクローンして、対象のディレクトリに移動します
“`
$ git clone https://github.com/fumiakikobayashi/go-learning-environment.git
$ cd go

元記事を表示

好きな言語でプラグインが実装できる?Extismを触ってみた

# TL; DR

– [Extism](https://github.com/extism/extism) で、手軽にアプリケーションに3rd-partyのプラグインを挿せるようになる!
– プラグインはアプリケーション本体と異なる言語で書いてもOK
– プラグインをWASMへコンパイルすることで実現

# はじめに

ネットを徘徊していたら、WASMを使った面白いプロダクトを見つけました。

https://extism.org/

アプリケーションの機能を追加するためのプラグインを、(アプリケーションの利用者が)作成できるようにするためのシステムです。
特徴的なのは、WASMを使うことで **アプリケーション本体とプラグインを別の言語で実装できる** 点です。利用者は自分の好きな言語を使って機能拡張が可能です。

開発の背景として、アプリケーションのコミッターが新機能の要望でつぶれてしまわないように、利用者側で3rd-partyのプラグインを開発できる土壌を用意したいという思いがあるようです。

([公式ページ](https://extism.org/docs/overv

元記事を表示

“Preemptive interface Anti-Pattern in Go” とは?

# はじめに

`Go`には`Preemptive interface Anti-Pattern in Go`という考え方があります。

https://medium.com/@cep21/preemptive-interface-anti-pattern-in-go-54c18ac0668a

私はこちらの記事を読み初めて知りました。

ただ、原文を読んだだけでは理解が難しかったので自分なりに手を動かして自分の言葉で整理してみたのが本記事の内容となります。
英語力に自信がなく、自動翻訳の力を借りています。また、間違っている可能性もあるため真の情報としては原文のご確認をお願いします。
(本記事の内容が間違っていたらご指摘のほどお願いします。)

# TL;DR

– `Preemptive Interface`という実装パターンがあります。
– `Java`のような`interface`を明示的に継承させる必要がある言語では有効となります。
– `Go`では`interface`は暗黙的に継承されるのでそこまで有効ではありません。

# `Preemptive Interface`とは

元記事を表示

【Golang】Go 公式の脆弱性チェッカー govulncheck 【Goのための脆弱性管理】

Go 言語で、`go get` した Go モジュールの、パッケージの脆弱性をローカルでチェックできる公式ツール 「`govulncheck`」が [2022/09/06 に発表された](https://go.dev/blog/vuln)ので、その使い方([TL; DR](#tl-dr-%E4%BB%8A%E5%8C%97%E7%94%A3%E6%A5%AD))とリリース情報の翻訳([TS; DR](#go-%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E7%AE%A1%E7%90%86))です。

いままでも [Snyk](https://snyk.io/) などの [CI](https://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A%E7%9A%84%E3%82%A4%E3%83%B3%E3%83%86%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3) で似たようなチェッ

元記事を表示

【Golang】文字列スライスのソート速度比較【2023 年上半期版】

> Go 言語(以下 Golang)の `slice`(可変配列)のソートで速度比較をしたい。

Golang で文字列のスライス(`[]string`)をソートするには、`sort` パッケージの `sort.Slice` や `sort.Strings` 関数を使うのが簡単です。

ところが、Golang の `slices` パッケージのソート(golang.org/x/exp/slices.Sort)が速いらしいと聞いて速度比較(ベンチマーク)してみました。

どうやら、[クイックソート](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%BD%E3%83%BC%E3%83%88)と[ヒープソート](https://ja.wikipedia.org/wiki/%E3%83%92%E3%83%BC%E3%8

元記事を表示

labstack/echoとmiddleware.Loggerとエラーレスポンス

github.com/labstack/echoのロギングについての備忘録です.
echoのログを活用していきたい…と考えてます。

# 前提

* go 1.19
* echo v4.10.0
* echoのErrorHandlerはDefaultHTTPErrorHandlerを使用
* https://github.com/labstack/echo/blob/v4.10.0/echo.go#L389-L429

# はじめに、正常応答させてみる

echoの`middleware.Logger`をカスタマイズせずに使用します。

“`go
// ~省略

e := echo.New()
e.Use(middleware.Logger())

// ~省略

e.GET(“/”, func(ctx echo.Context) error {
return ctx.String(http.StatusOK, “Hello world!”)
})
“`

curlで呼び出します
“`sh
#localhost, port=8888で実行しているとき
curl

元記事を表示

PHPerが学ぶGo言語③ 例外処理

っす。豚野郎です。
今回は例外処理を書いていきます。

Go言語は例外処理構文(try、catch等)がありません。
その中で例外処理を実行していきます。

※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。

**go version go1.19.4 darwin/amd64**

# 1. fmt.Errorf()
“`sample.go
package main

import “strconv”
import “fmt”

// fmt.Errorf()で例外情報作成
// fmt.Errorf()の戻り値の引数はerrorにする。
func Calculation(num int) (string, error) {
if num != 1 {
// Go言語では、エラー情報を2番目に返すことを推奨されている
return “”, fmt.Errorf(“1ではありません。”)
}
num += 1
return “1 + 1 =

元記事を表示

QiitaのAPIを使って、IT資格の参考書を自動ランキングするサイト作ってみた

こんにちは、暇があれば個人開発している厚木です。
今回は、エンジニアにウケそうな新規サービスを出したので、その宣伝記事です。

## 作成物
[毎日QiitaのAPIから、IT資格試験の書籍を紹介している記事を集計して、自動的にランキングサイト](https://qiibooks.com/)を作成しました。
書籍の情報登録以外は、全て自動で行われています。

https://qiibooks.com/
![](https://storage.googleapis.com/zenn-user-upload/d441d2527cc4-20230121.png)

## なぜ作ったのか
最近「[mybest](https://my-best.com/)」という比較サイトをよく見ていて
「これIT分野でもできるんじゃね?」と思ったのがきっかけです。
で、エンジニアが本を買うとしたら資格本かなー、、、くらいしか考えずに作りました。

作ろう決心した30分後、Qiitaを使ってテック系の本をランキングする「[テックブックランク](https://techbookrank.com/)」という同じ系統

元記事を表示

【Go】古い記法で書いたbuild constraintsは後方互換するのか調べてみた

# はじめに
build constraintsのための記法は、ver1.17以上で新しい書き方になっていたことを最近知りました。

https://go.dev/doc/go1.17#gofmt

古い記法
“`go
// +build ignore
“`

現在の記法
“`go
//go:build ignore
“`

そこでふと「Goは後方互換が保たれた言語だけど、ビルドタグも同様に後方互換されるんだろうか?」という疑問が浮かびました。
今回は、build constraintsの後方互換(?)について調べてみた内容を書いてみます。

# 調べた結果
`go fmt`コマンドを使えば、ver1.16以下で使用されていた古い表現を検知して、自動的に現行の表現を追加してくれるみたいです。

>Go versions 1.16 and earlier used a different syntax for build constraints, with a “// +build” prefix. The gofmt command will add an equivalent

元記事を表示

【Hugo】wowchemyテーマで静的サイトを生成する際 fatal: ‘origin’ does not appear to be a git repository… が発生した時の対応

静的サイトジェネレータ Hugo でハマった問題に対応した内容の忘備録です。

## 環境
– MacOS Ventura
– Hugo (Theme: wowchemy)

## 問題
初めてHugoを導入しようと頑張って作成したサイトをいざ生成しようと、`hugo` コマンドを実行すると、下記のエラーが発生。リポジトリが読めないとのことなので、URLが変わったのかと思いましたがそんなことはなく。。
ちなみに昨日までは問題なく動作していました。まさに「なにもしてないのに壊れました」っていうアレです。

“`
go: github.com/wowchemy/wowchemy-hugo-themes/modules/wowchemy/v5@v5.7.1-0.20221127215619-58b270a3e103: invalid version: git ls-remote -q origin in /var/folders/pd/jt86y4cj2kbdw_k5rwjjt_dr0000gn/T/hugo_cache/modules/filecache/modules/pkg/mod

元記事を表示

interfaceやprotocolってなんぞ?

## はじめに
私は、現在大学生なのですが、同じ学部の大学生からソフトウェアエンジニアのバイトをできる人が集まりませんでした。そこで今回は使用している`interface`をわかりやすく解説していこうと思います。

Goにおける`interface`は他言語にも実装されており、JavaやObjective-Cも同様の語句で使用・実装できます。ただ、私の専門がswiftなので`interface`と同じ役割の`protocol`を使います。 :pray:
説明上は`interface`を使いますが、コード上では`protocol`と書きます。

## そもそも`interface`とは?

`interface`の説明の前に、、、オブジェクト指向って知ってる?:thinking:

### オブジェクト指向(言語)をざっくり解説
「この世の全てのものは`object(モノ)`であり、`モノ`はそれ固有の処理を有する。その`モノ`が集まってこの世の`モノ`はできている。」みたいな考え方。`モノ`を表現する方法で`class`や`struct`を使用します。
例)荷車:タイヤ(回転して

元記事を表示

OTHERカテゴリの最新記事