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

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

0埋めの文字列にする

## やったこと go言語で0埋めの関数なかったのでつくっった。 テストコードとか書いてないので確実に動くかはわかんないけど多分大丈夫(適当) “`golang package main import ( “errors” “fmt” “strconv” “github.com/labstack/gommon/log” ) func main() { n := 1000 width := 3 var s string s, err := padNumberWithZeros(n, width) if err != nil { log.Error(“err : “, err) return } fmt.Println(s) } // padNumberWithZeros : 数理をセロで埋めます // n : 埋めたい数値 // width : 桁数 func padNumberWithZeros(n int, width int) (s string, err error) { l := len(strconv.Itoa(n))
元記事を表示

Go言語・SendGrid・REST APIでお問い合わせメール送信API

##概要 Go言語を使って、Jsonファイル形式で送られてきたデータをメールで送信する。 モバイル開発において、お問い合わせフォームの内容をWebを使って送信する必要があったので、モバイル側から送られてきたデータをWebを通してメール送信をするプログラムを作成した。 OSはWindows ###参照した記事
Goでメール送信!SendGridを使って簡単に実装する方法
https://qiita.com/katekichi/items/d94e078b376151858ca4 ##事前準備 まずメール送信を肩代わりしてくれるサービスSendGridを登録する必要がある。 申請をして、早くて数時間、遅くても1営業日で審査は終わる。SendGridは月12,000通までのメール送信なら無料で使える。 https://app.sendgrid.com/ 審査が通ればログインしてAPIキーを所得。 Settings → API Keys → Create API Key(青いボタン)を押す。Permission はとりあえず Full Access で大丈夫。 AP
元記事を表示

Go言語を0から習得してWeb開発をする

##基本このサイトだけで大丈夫 https://leben.mobi/go/ このサイトで学習を進めれば入門レベルからWeb開発まで習得できます。 ただ一部古い部分があって、現在ではエラーが起きてしまう可能性のあるプログラムやコマンドがありました。本記事ではそういったような、私がこのサイトで学習していた際に必要になったその他の情報や備忘録を書いていきます。 ##Web開発編で出てくるデータベースの構築と操作 https://prog-8.com/docs/mysql-env-win こちらはprogateのサイトになっております。Windows環境と書いてありますが、Mac用のリンクもこのページにあります。このサイトを見るのはWeb開発編に入った後で大丈夫です。 ##実行でエラーが起きたので備忘録 ###Web開発編「JSON形式で外部設定ファイルを作成・利用する方法」で起きたエラー その1 ~~~ \Go\goWeb> go run main.go build command-line-arguments: cannot find module for path _/C_
元記事を表示

【個人開発】Githubのプロフィールに、Qiita・Zennの記事などを一覧表示させる、Github Actionsのアクション作ったよ!

# 宣伝 GithubのプロフィールはREADMEによって管理できることはご存知かと思います。 [プロフィールの README を管理する – GitHub Docs](https://docs.github.com/ja/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme) そのREADMEにて、Qiita・Zennで書いた記事や、connpassの参加イベントを取得することで、最新のアクティビティを表示したいという要望を叶えるのが本アクションです。 以下のようなプロフィールを作ることが出来ます。 ![Screen Shot 2022-02-16 at 11.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496036/91c6cfa5-ef26-0c5a-a8f8-e9fdab6ef354.png)
元記事を表示

# 【Go】一人コードリーディング会を始めます。(4回目)

## はじめに 元ネタはtenntennさんの伝説カンファレンスの一部になります。 [https://www.youtube.com/watch?v=X0tzCL5gqr8](https://www.youtube.com/watch?v=X0tzCL5gqr8) コードリーディング会とは何人かで同じコードを各々で読んで、発見を共有して理解を深めましょう!というのが趣旨と理解しています。しかし知人で一緒にGoを学んでくれる人も見つけられず、悲しくも一人でコードリーディング会を開催することになりました。 やってみたら読めない箇所が多すぎました。1文ずつ嚙み砕いてGo言語の理解を深めていく作業になりました。その過程の不明点と解釈を記事にして公表していこうと思います。僕と同じ程度の理解度(初学者)の方が、不明点を理解するきっかけになればうれしいです。 ※1日の学びを1記事にするので情報量は少なめです。徐々に情報量を増やして有益な記事を書けるよう頑張ります。 ※個人の解釈を投稿する記事なので誤った情報が多々あると思います。申し訳ありませんがご了承ください。誤りについてはご指摘いただけるとう
元記事を表示

【Go】組み込み関数makeとnewの違いについて

Goには、組み込み関数(元々言語に用意されている関数のことです。)としてmakeというものと、newがあります。 それぞれ、スライスや構造体など何かを『生成』するのに使用します。使い方は多岐に渡りますが、何より慣れないうちは、 >「あれ、この場合はmakeか?それともnewの方か?どっちだ。。。」 と混同される方も多いかと思います。 今回はそれらの違いについて、ざっくりと解説いたします。 # 最初に結論から 組み込み関数makeは、**「スライス(slice)」**、**「マップ(map)」**、**「チャネル(channel)」** のデータ構造体を生成するために使用します。 そして組み込み関数newは、**指定した型のポインタ型**を生成するために使用します。 # 一つずつ解説 ## make まず、上記でも「述べたように、組み込み関数makeは、**「参照型」** と呼ばれる、「スライス(slice)」、「マップ(map)」、「チャネル(channel)」の3つデータ構造を生成することができます。 makeによる参照型生成のパターンは以下の通りです。 | 呼び出し形式 |
元記事を表示

区間選択アルゴリズム

#何を書いているか 区間選択アルゴリズムの備忘録。 C++とGoで記述。 プログラミングスキルチェックの問題で選択アルゴリズムを使って解く問題に出会ったので。 #コード ここでは終わりと次の始まりがつながらない区間を選択するパターン。 つながった場合も選択可能とする場合はコードの示した箇所を等比較にすればよい。 C++版 “`C++ #include using namespace std; int main() { // cin.tie(0); // ios::sync_with_stdio(false); int N; cin >> N; vector X(N), L(N); for (int i = 0; i < N; i++) { cin >> X.at(i) >> L.at(i); } vector> p(N); for (int i = 0; i < N; i++) { p[i].firs
元記事を表示

Go言語の環境設定

# Go言語の環境設定(mac) ### 1. インストール “` $ brew install go $ go version “` `go version`で`go version ~~`とバージョンが出てきたらインストールできている証拠. ### 2. PATHを通す zshの方は`.zshrc`, bashの方は`.bashrc`に以下を追記. “` export GOPATH=$(go env GOPATH) export PATH=$PATH:$GOPATH:bin “` (ちなみに、`.zshrc`や`.bashrc`は`/Users/(ユーザー名)/`にあります. vimだのopenだのfinderから探すだのしてみてください.) また, これらのファイルは隠しファイルなので, finderで見つけたい方はfinder上で`control`+`command`+`.`を押下してください. 隠しファイルが列挙されます.(もう一度押下すれば元に戻せます) なんとこれだけ. 意外と難しいようで簡単なようで, こういった文献を探すのが下手だとそれ
元記事を表示

DDDを意識したgolangでの実装

本記事はDDDについて超わかりやすく記述されている以下書籍を読み、golangではどうなるかを記載したものです。 [ドメイン駆動設計 モデリング/実装ガイド](https://little-hands.booth.pm/items/1835632) — ## ユースケース 例として、タスク管理アプリケーションを考える。 ・タスクを登録する ・タスクを延期する ・タスクを完了する — ## オブジェクトの生成や更新時に守らなければいけないルール(ドメイン知識) ・タスクステータスは未完了/完了の2種類でタスク作成時は未完了ステータス ・タスク完了すると完了ステータスとなり、ステータスは戻せない ・タスクの期日は1日ずつ、3回まで延期できる DDDで重要なのは、ドメイン層にドメイン知識を寄せて、ドメイン知識がわからない途中参入した他のエンジニアにもドメイン知識の遵守を強制できる状態にすることである — 駄目なケース(ドメイン知識がドメイン層にない)を見てみる。 ドメイン層 “`go type Task struct { ID str
元記事を表示

マイクロサービスのヘルスチェック実装において依存先への負荷を軽減したい

## 概要 この記事は、ヘルスチェック実装で依存先の負荷を減らすためにキャッシュを検討してみた話と、Goで実装する場合は https://github.com/alexliesenfeld/health が便利そうなので実装してみた、という記事です。 ## はじめに マイクロサービスにおいてヘルスチェック機能を実装する際は、DB等の正常性確認に加えて依存先のサービスの正常性も含めて確認したくなります。 そのような実装を加えた際に問題になるものの一つとして、**依存先のサービスへのリクエスト量が増える**点があります。原因としては次のようなものがあると思います。 – KubernetesのReadiness Probeによって高頻度に実行される – 自分自身も多くのサービスの依存先となっており、ヘルスチェックのリクエストを多く受ける そのような理由により依存先へのリクエストが増えた際に問題になるのが次のような点です。 – ヘルスチェック起因のリクエストが負荷になる – 依存先サービス側のログにヘルスチェック起因のものが増え調査しづらくなる マイクロサービスにおいて負荷への対
元記事を表示

RaspberryPi4BにGoを入れる。

#概要 ちょっとしたツールを使おうと思ったらGoで書かれてたからGoを入れようとしてハマった話。 #手順 好きなところに“`wget https://golang.org/dl/go1.17.7.linux-armv6l.tar.gz“`でダウンロード。 “`sudo tar -C /usr/local -xzf go1.10.1.linux-armv6l.tar.gz“`で展開。今回は“`/usr/local“`を指定。 “`~/.bashrc“`に“`export PATH=$PATH:/usr/local/go/bin“`を追記してパスを通す。 “`source ~/.bashrc“`で適用。 #ところが… “`go version“`が通らず“`no such file or directory“`が返る…。 あちこち調べるもののピンとこない。 なんとなく“`uname -m“`を打ってみると“`aarch64“`と返ってきた。ここで気がついた…参考ページが結構古くてターゲットも**RaspberryPi**としか書いていないことに。
元記事を表示

【Go】テンプレートエンジンを使ってコンテンツを表示してみた

# はじめに Goの標準で用意されているテンプレートエンジンを使って,HTMLページを表示させてみた. # 環境 – macOS BigSur – Go 1.17.5 darwin/arm64 # テンプレートエンジンとは 本題に入る前にテンプレートエンジンについて説明する. テンプレートエンジンとは「テンプレート」と呼ばれる雛形に「データ」を組み込んで最終的なHTMLを生成するもの.Web用のテンプレートエンジンは多くの本格的なフレームワークに含まれている.Goも例外ではなく,数種のテンプレートエンジンが組み込まれている.通常,ハンドラがテンプレートエンジンを呼び出してデータをテンプレートに組み込み,出来上がったHTMLをクライアントに返す.簡単なイメージ図はこんな感じ. template-engine.png
元記事を表示

# 【Go】一人コードリーディング会を始めます。(3回目)

## はじめに 元ネタはtenntennさんの伝説カンファレンスの一部になります。 [https://www.youtube.com/watch?v=X0tzCL5gqr8](https://www.youtube.com/watch?v=X0tzCL5gqr8) コードリーディング会とは何人かで同じコードを各々で読んで、発見を共有して理解を深めましょう!というのが趣旨と理解しています。しかし知人で一緒にGoを学んでくれる人も見つけられず、悲しくも一人でコードリーディング会を開催することになりました。 やってみたら読めない箇所が多すぎました。1文ずつ嚙み砕いてGo言語の理解を深めていく作業になりました。その過程の不明点と解釈を記事にして公表していこうと思います。僕と同じ程度の理解度(初学者)の方が、不明点を理解するきっかけになればうれしいです。 ※1日の学びを1記事にするので情報量は少なめです。徐々に情報量を増やして有益な記事を書けるよう頑張ります。 ※個人の解釈を投稿する記事なので誤った情報が多々あると思います。申し訳ありませんがご了承ください。誤りについてはご指摘いただけるとう
元記事を表示

Go言語_Slice

# Go言語 Slice ## The Go Blog 『[Arrays, slices (and strings): The mechanics of ‘append’](https://go.dev/blog/slices)』から >Arrays have their place—they are a good representation of a transformation matrix for instance—but their most common purpose in Go is to hold storage for a slice. Go言語における配列の最も共通する目的はスライスのストレージを保持するため >A slice is a data structure describing a contiguous section of an array stored separately from the slice variable itself. A slice is not an array. A slice describes a piece of
元記事を表示

順列計算

プログラミングスキルチェックの問題を解く際に順列計算を行う場面が多くなった。 以下の記事を参考にさせていただきgolangで実装してみました。 [順列の全探索をするプログラム(競技プログラミング向け)](https://qiita.com/suzuki-navi/items/a80677a0747232843957) @suzuki-navi 様ありがとうございます。 備忘録目的です。 “`go type Cat struct { id int eat_time int fuman int } (中略) //呼び出し側 cat_len:=len(cats) pat:=1 for { sb:=”” i:=0 for i=0;i
元記事を表示

GolangにORM導入(ent migration編)

#記事作成にあたり GolangでORMを導入し、マイグレーション/CRUD処理を実施。GolangのORMはGORMやPrismaが有名だが、entを採用。entの説明や導入方法を記載。 #アジェンダ 1. entとは 2. 環境情報 3. インストール 4. スキーマ定義 5. マイグレーション実行 #1. entとは Facebook社(Meta)提供のGolangのORM。公式リファレンスや機能も充実。 ![スクリーンショット 2022-02-14 13.03.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/4dc8b1f1-5baa-1af3-d3b9-2d1d0e4f950c.png) #2. 環境情報 PC:Mac(CPUはintel製) Go:1.17.6 ←Goのver大事。versionは1.16以降をインストールしてください。 開発エディタ:Visual Studio Code #3. インストール “`shell:ディレクトリ作成 ~/go/src
元記事を表示

Golangで実装したAPIをCloud Runにデプロイする

## 本記事の内容 * Go言語で実装したAPIをCloud Runにデプロイする * gcloud cliのインストール * artifact registryへのdocker imageのpush ## はてなブログにて掲載しています。 https://moritomo7315.hatenablog.com/entry/go-cloudrun-deploy
元記事を表示

【Go】GitHub上の「特定の1ファイル」を取得する

Go言語でAPIを使う練習のため、タイトルにある「GitHubのリポジトリにある特定の1ファイルの内容を取得する」プログラムを書いてみました。

取得するファイル(GitHubリポジトリ側)

今回はチュートリアル用のリポジトリから、以下のようなREADME.mdのコンテンツを取ってきてみたいと思います。

This is a script for API-tutorial
元記事を表示

[Golang] reflectパッケージの使い方を調べたら書く

# はじめに 最近reflectパッケージを使う機会があったので、その時どう書けばいいか調べたことをメモ書き。 気が向いたら更新してく。 面倒なのでimportとかは端折る。 # reflect パッケージ なにものなのかは [godoc](https://pkg.go.dev/reflect) を見る。 [DeepL翻訳](https://www.deepl.com/ja/translator)様様で翻訳した内容↓ > reflectパッケージは、プログラムが任意の型を持つオブジェクトを操作することを可能にする、ランタイムリフレクションを実装しています。典型的な使い方は,静的な型interface{}を持つ値を受け取り, TypeOfを呼んで動的な型情報を取り出し,それをTypeで返すというものです. > > ValueOfを呼び出すと、実行時データを表すValueが返される。ZeroはTypeを取り、その型に対するゼロ値を表すValueを返す。 godocにも書かれているが [https://go.dev/blog/laws-of-reflection](https://g
元記事を表示

Golangのデバッガdelveで「error layer=debugger can't find build-id note on binary」と表示されたときの対処法

## 問題 表題の通り、以下のエラーによりVSCodeでGolangのデバッグ実行に失敗するという問題に直面しました。 ``` 2022-02-12T08:26:42+09:00 error layer=debugger can't find build-id note on binary panic: runtime error: slice bounds out of range [:2] with length 0 ---(省略) ``` ## 解決 go-delve/delveの[issue](https://github.com/go-delve/delve/issues/2900)によると `@latest`でインストールされる`delve@1.8.2`(2022/02/13時点)ではこの問題に対処されていないため VSCodeの拡張機能などによるインストールではなく手動でdelveをインストールします。 ``` # Install at tree head: $ go install github.com/go-delve/delve/cmd/dlv@mast
元記事を表示