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

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

go開発環境をDockerで作成する②

# 最終目的
– go言語でWebアプリを構築するためのgo開発環境をDockerで作成する。

# 目標
– [Docker上にコンソール立ち上げ環境を作る。](https://qiita.com/eigetsu/items/555efb6f1fec0425d35f)
– フレームワークginを使った簡単なREST APIサーバーを立ち上げる。← 今ここ

## Goのフレームワークの選定
フロントエンドはWebだけとは限らない。バックエンドとフロントエンドは分け、JSONでやり取りするRESTful APIとする。
GitHubのStars、Forks、日本での利用数、Echoはリリースが頻繁なのも(良いも悪いも)気になったので、ginを選択。

https://github.com/gin-gonic/gin

## 簡単なAPIサーバーを考える

環境構築がまずの目的なので、APIサーバーは単純なものをginを使用して作る。
状態(とりあえずは必ずOK)を返すヘルスチェックAPIのみとする。

~~~apiblueprint: API仕様
# GET /api/health-c

元記事を表示

ASP.NET Core Blazor WebAssembly 公開について

あ、すいません
過去に投稿された記事、現在進行系で書いている記事についてですが
あくまでも、私のメモなので
チュートリアル、ドキュメントではないので、注意してください
それでも、よかったら見てください

用事で、ASP.NET Core Blazor WebAssembly(以下blazorWasm)を使うことがあり、
アプリケーションを公開するときに、すごく困ったのでメモ;

環境
.net6.0 version 6.0.300 windows
go version go1.18.3 windows/amd64

VisualStudio 2022(以下vs2022)

vs2022のテンプレートから、アプリケーションを作成後のリリースで
Blazor Serverであれば、dllを実行できる環境でdotnet runしまえば、問題は特にないのですが、
blazorWasmには、dllがなく当時私が困ったので、今後や、たまたま記事を見つけた人のためのメモ

blazorWasmは公開後、指定のフォルダーにwwwrootフォルダーがあり、その中身が
リリースに必要なフォルダーですが、中

元記事を表示

Go で文字列を for-range で回したら rune 型が出た件

このように、文字列を直感的に配列の如く扱っていいだろうと高を括っていたら、
`for-range` でまさかの `rune` 型が飛び出してきて、見事にぶちのめされました。

## 問題のコード

文字列から “ぴえん(?)” を全て除去するプログラムです。
今回は標準パッケージの `strings.ReplaceAll

元記事を表示

Goのgoroutine, channelを使って並列処理

goのgoroutine,channelを使って並列処理をしてみました。
今回は[郵便局](https://www.post.japanpost.jp/zipcode/dl/oogaki-zip.html)のサイトから各都道府県の郵便番号データを全都道府県分ダウンロードした上で、
これを10件ずつ並列処理で解凍してDBに登録するところまでを試してみました。

## 郵便番号データは以下からダウンロード
[https://www.post.japanpost.jp/zipcode/dl/oogaki-zip.html](https://www.post.japanpost.jp/zipcode/dl/oogaki-zip.html)

## 前提環境
go1.8
“`
# 郵便番号データのcsvはSJISの為、以下のパッケージをダウンロード
go get -u golang.org/x/text/encoding/japanese golang.org/x/text/transform

# DBはmysql ORMはgormを利用
go get -u github.com/go-sq

元記事を表示

go開発環境をDockerで作成する

# 最終目的
go言語でWebアプリを構築するためのgo開発環境をDockerで作成する。

# 目標
* Docker上にコンソール立ち上げ環境を作る。

## goの選定

https://go.dev/doc/devel/release

現在(2022/06/04)、最新のgoは1.18.3。

https://go.dev/doc/go1.18

1.17と1.18で大きな仕様変更(Genericsの導入、Fuzzingが標準機能)あり。今までのアップグレードに比べて最大の変更ではないか?
Genericsは1.19で正式になり、1.18では試験的実装とのこと。
安定している1.17にしようかと思っていたが、勉強のためなので最新の1.18にして、Genericsを使用し始めよう。
なので、1.18系とする。

## dockerイメージの選定

クラウド上にDeployすることを考えると、linux環境になる。destributionを考える。開発中にいろいろやりたいとするとubuntu。

https://hub.docker.com/_/golang?tab=tags&p

元記事を表示

Goでシンプルなコマンドラインツールを作ってみた

## はじめに

Goを使ったWebアプリケーション開発を半年以上経験していますが、業務外ではこれまで技術本を読んだり、Udemyなどを使った学習を主にしてきました。
これまでインプットをメインに自己学習をてきたので、これからはアウトプットもしていきたいと思い、Goを使ってコマンドラインツールを作ってみました。

## 作成したもの

今回作成したツールは **[pn-checker](https://github.com/gracefulm/pn-checker)** という「引数で指定した数字が素数かどうか判定するだけのシンプルなコマンドラインツール」です。
**実用性のない**且つ**くだらない**ツールを作ってみたいという思いから、さらに、50%くらいの割合で `Think for yourself, stupid!(自分で考えろバカ!)` と言ってくる仕様にしてみました。
まあ、いわゆるクソコマンドです。

コマンド作成には以下のパッケージを使用しました。

– [spf13/cobra](https://github.com/spf13/cobra)
– コマンドライン

元記事を表示

ハッカソン未経験がBIPROGY(旧日本ユニシス)様主催のに参加し最優秀賞含め三冠達成してきた話

# 自己紹介

どうも!令和のディープインパクトこと山田哲人こと塩見泰隆です

これが言いたかっただけなのでこの記事はもう終わりです
ありがとうございました

嘘です、もうちょっとお付き合いください
そしておそらく来年もこのハッカソンイベントがあると思いますのでみなさん参加してみてください!

# BIPROGYとは?

自分は正直この社名を聞いてピンときませんでした…(ごめんなさい)
社名が変わったばかりのようで、旧社名は日本ユニシスというそうです
普通の人間はディズニーランドの!って思うらしいですが、私は[JPX日経400のWikipediaの記事](https://ja.wikipedia.org/wiki/JPX日経インデックス400)をを読むのが趣味なのでそっちで思い出しました

せめてみなさん社名だけでもおぼえてタブを閉じていってください
この先もう2つぐらい名前を覚えてほしいサービスがあるのでもう少々お待ちください

# BIPROGY DX HACK -User’s voice “Solve the problem”-

毎年5月の終わり頃に開催されているようです!

元記事を表示

GridDB クラウド Version 1.2 の紹介

今回は、以前のブログに続いて新しい GridDB クラウドサービスについて紹介します。クラウドサービスの基本については、以前のブログ [GridDB Cloudの紹介][1] をご覧ください。今回は、クラウドサービスのバージョン1.2の新機能について説明します。

GridDBの新バージョンのリリースに伴い、GridDB クラウドに組み込まれた [GridDB Web API][2]が利用可能になりました。WebAPIの基本的な使い方は、[こちら][3]で紹介しています。WebAPIの主な利点は、HTTPリクエストを使ってコンテナを作成し、データを直接データベースにプッシュできることです。これにより、[Telegraf][4]のような他のサービスを使用して、メトリクスや他のデータをGridDBデータベースに記録することが可能になります。

このブログでは、まず`curl`を使った簡単なWeb APIコマンドを紹介します。その後、Telegrafをクラウドサービスにインストールして使用する方法についても紹介します。

## クラウドでGridDB Web APIを使う

Web APIの

元記事を表示

GitHub ActionsでAWS ECS FargateにgRPCサービスを自動デプロイする

# はじめに
AWS ECS にgRPCサービスをFargate起動タイプにて自動デプロイするための設定を作成いたしました。

# 参考にしたテンプレート
GitHub Actions 公式docsに設定に関する解説とテンプレートが記載されているので、そちらを参考にして設定を進めました。

https://docs.github.com/en/actions/deployment/deploying-to-your-cloud-provider/deploying-to-amazon-elastic-container-service
# クラスターとサービスの作成
GitHub Acitonsを使用して自動デプロイを行うためには、あらかじめECS上にクラスターとサービスを作成しておく必要があります。
`aws-cli`を用いてローカル環境からリソースの作成を行うか、もしくはAWSコンソール画面からリソースの作成を行なってください。

# タスク定義について
タスク定義のテンプレートリポジトリ内部にコミットしておきます。

“`json:task-definition.json
{

元記事を表示

【Golang】ステートメントまとめ

# 24 if文

“`go
if result2 := by2(10); result2 == “ok”{
fmt.Println(“great 2”)
}
“`
result2の値をこの式以降使用しない場合は、セミコロン;をつなげて条件式を一行で書くことができる。

# 25 for文
“`go
func main() {
sum := 1
for sum < 10 { sum += sum fmt.Println(sum) } } ``` phpのようにfor文は書けるが、上記のように省略することもできる 初期値をforの前に定義、インクリメントは省略 # 26 range文 ```go func main() { l := []string{"Python", "go", "Java"} for i := 0; i < len(l); i++{ fmt.Println(i, l[i]) } for i, v := range l{ fm

元記事を表示

【A Tour of Go】基本編③ 〜構造体、配列、スライス、マップ〜

公式の A Tour of Go ではじめてGo言語を触ってみました。
以下、構造体、配列、スライス、マップについて学んだことのメモ。

前回の記事はこちら

https://qiita.com/BitterBamboo/items/58d80a1a1a85e18188ce

https://qiita.com/BitterBamboo/items/f72ce6f7ce20e6b5f6c7

## ポインタ

* ポインタは値のメモリアドレスを指す
* 変数`T`のポインタは`*T`型で、ゼロ値は`nil`

“` go
var p *int
“`

* `&`演算子は、そのオペランドへのポインタを引き出す

“` go
i := 42
p = &i
“`

* `*`演算子は、ポインタの指す先の変数を示す(*間接参照*)

“` go
fmt.Println(*p)
*p = 21 // ポインタ p を介して i へ値を代入する
“`

## 構造体

### 構造体とは

* 構造体(`struct`)は、フィールドの集まり

“` go
package main

元記事を表示

【A Tour of Go】基本編② 〜フロー制御〜

公式の [A Tour of Go](https://go-tour-jp.appspot.com/list) ではじめてGo言語を触ってみました。
以下、フロー制御(for, if, switch, defer)について学んだことのメモ。

前回の記事はこちら

https://qiita.com/BitterBamboo/items/58d80a1a1a85e18188ce

## `for`

* 初期化ステートメント: 最初のイテレーションの前に初期化が実行される
* 条件式: イテレーションごとに評価される
* 条件式の評価が false となった場合にイテレーションを停止
* 後処理ステートメント: イテレーションごとの最後に実行される

“` go
package main

import “fmt”

func main() {
sum := 0
for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) // 0 + 1 + ... + 9 = 45 } ``` * 初期化ステートメントと後処理ステート

元記事を表示

【A Tour of Go】基本編① 〜パッケージ、変数、関数〜

公式の [A Tour of Go](https://go-tour-jp.appspot.com/list) ではじめてGo言語を触ってみました。
以下、パッケージ・変数・関数について学んだことのメモ。

## パッケージ

### package

* Goのプログラムはパッケージで構成される

“` go
// プログラムは main パッケージから開始される
package main

// “fmt” と “math/rand” パッケージを import
import (
“fmt”
“math/rand” // `package rand` ステートメントで始まるファイル群
)

func main() {
fmt.Println(“My favorite number is”, rand.Intn(18))
}
“`

### import

* `import`ステートメントの書き方
* 括弧で複数の`import`を整理する(*better*)
* 複数の`import`ステートメントを書く

“` go
// factored import st

元記事を表示

grpcurlを用いてgRPCサービスの動作確認を行う

# はじめに
gRPCサーバーの開発を進めている際に、gRPCサーバーに対しての動作確認をローカル環境で行いたい場合があると思います。
そこで、動作確認の際に、便利なツールが公開されているので紹介します。

# grpcurl

https://github.com/fullstorydev/grpcurl

# install
今回はMacにて使用するので、以下のコマンドでinstallを行います。
“`
brew install grpcurl
“`

# 事前準備
gRPCサーバーの`main.go`に以下の処理を追記しておきます。

下記のソースを追加
“`
s := services.NewServer(client)

reflection.Register(s) ⇦追記
log.Printf(“server listening at %v”, lis.Addr())
if err := s.Serve(lis); err != nil {
log.Fatal(err)
}
“`
上記の設定を追加しておかないと、grpcurlコマンド使用時に以下のよ

元記事を表示

Goを小さく実行するための簡易シェルスクリプト

# はじめに
昨日初めてGoを書きました。

筆者は新しい言語を書くときは`haskell-playground`や`javascript-playground`みたいなディレクトリを作り、「ネットで見つけた便利なコード」や「試しに動かしたいちょっとしたコード」などをそこで動かしながら、少しずつ新しい言語を学びます。

なので今回も同様に`go-playground`というディレクトリを作って、そこでgoのコードをあれやこれやと動かして遊んでいました。

# なぜシェルスクリプトを書いたのか
そこまでは良かったのですが、書いているうちに**試しにコードを動かすたびにmain関数を毎回書き換えること**がちょっと面倒だなぁと思いました。

具体的に説明しますと、例えば`gob`というgoでバイナリデータを扱うプログラムをちょっと動かしてみたいと思い、以下のようなコードを書いたとしましょう

“`gob.go
package main

// importは省略
func store(data interface{}, filename string) {
//バイナリデータ

元記事を表示

【AtCoder】C++のmultisetを使う問題をGo言語で解く

# 概要
2022-05-28(土)に開催されました[NOMURA プログラミングコンテスト2022(AtCoder Beginner Contest 253)](https://atcoder.jp/contests/abc253)の[C – Max – Min Query](https://atcoder.jp/contests/abc253/tasks/abc253_c)をGo言語で解く方法を紹介します。

# 問題と解答のアプローチ
Go言語で、問題文に沿って実装してみます。
$x$について下記のような制約がありますので、
問題文の多重集合$S$を、mapで書くことでメモリ制限を超えないようにします。
“`math
0 \leq x \leq 10^9
“`
下記の書いてみますと、クエリ3で$S$の最大値と最小値を求めるところを
工夫をしないと、実行時間制限をオーバーしてしまいます。

“`go
package main

import (
“bufio”
“fmt”
“os”
“strconv”
)

var sc = bufio.NewScanner(os.S

元記事を表示

Go を公式パッケージからインストール ( Ubuntu / RaspberryPi OS / WSL2 )

インストール方法は、こちらを基にしています。
「ラズパイに Go をインストールする」
https://zenn.dev/ysmtegsr/articles/20d6e0c7159be2

# 環境

– Go Version 1.18.2
– Raspberry Pi OS Lite
– Release date: April 4th 2022
– System: 32-bit
– Kernel version: 5.15
– Debian version: 11 (bullseye)

また、同様にして Ubuntu20.04 , WSL2 にもインストールできました。

# ダウンロード
https://go.dev/dl/
こちらから、該当のアーキテクチャを選択し、リンク先をコピーして使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5539aac0-c8eb-090c-9b80-ef477b9ca406.png)

– Raspberr

元記事を表示

Cloud Functions (Go言語) & PubSub & Cloud Scheduler を利用してcronを実現する

方法を3ステップで解説します

# STEP1 トピックを作成する

GCP の PubSub のコンソールからトピックを作成する

名前は、「hello-functions」にしました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38174/7100bd83-21bd-a557-33b3-bd517563cb27.png)

# STEP2 メッセージを受信して起動するアプリケーションを Cloud Functions にデプロイする

## コード

GCP の Cloud Functions のコンソールから「関数の作成」を選択して出てくるテンプレートと同じ内容です

“`go:hello_functions.go
package p

import (
“context”
“log”
)

type PubSubMessage struct {
Data []byte `json:”data”`
}

func HelloPubSub(ctx context.Cont

元記事を表示

【gin】goでAPIサーバー

# golangでAPIサーバー
[gin](https://github.com/gin-gonic/gin)というフレームワークを使ってAPIサーバーを建て、CRUD処理を実装します。
プログラム全体は[こちら](https://github.com/shuyaeer/go_api_server)においてあります。

## 環境
MacBook Pro (14-inch, 2021)
Go 1.18.2
gin 1.77

## APIの設計
焼き鳥屋の商品情報を扱うものを想定します。
– 商品一覧の取得
– 単一商品の取得
– 新商品の登録
– 在庫情報の変更
– 商品の削除

これらを実装します。

## ディレクトリとファイル類を作成
“`bash
$ mkdir go_api_server
$ cd go_api_sever
$ touch main.go # プログラムを書くファイルを作成
$ go mod init go_api_server # モジュールを管理するファイルを作成
$ go mod tidy
“`

使用する外部モジュールであるginもこ

元記事を表示

「STEP UP GO」第1回イベントレポート

# 導入

2022年5月28日開催の __「STEP UP GO」__ というメルカリさん主催の学生・第二新卒向けのイベントに参加させていただきました。

5月から7月にかけて行われる全3回の勉強会の第1回では、
前半でGolangの基本情報をメルカリのtenntennさんに紹介していただきつつ、
後半ではメルカリUSに所属されているNSEGAさんとのパネルディスカッションを拝聴しました。

Qiitaの記事にするほど綺麗にまとめられているわけではないですが、
自分が知って勉強になったことなどをメモ書き程度に書き留めておこうと思います!

# 学び
インプットは良質なアウトプットするために行う。
勉強をやみくもにするのではなく、アウトプットが前提にあるべきということを再確認した

# Goについて

* 使っていないimport宣言を許していないのは、ビルドが遅くなる要因を排除する目的があるから
* なんで許さないのか → 開発のスケールしやすくなることをGo自体が目指しているから。
* 言語ごとの開発の背景を学ぶべきである
* 「Goに入ってはGoに従え」

*

元記事を表示

OTHERカテゴリの最新記事