- 1. Go 1.21で注目したい機能
- 2. Docker + Goで始めるREST API開発 開発環境編
- 3. gopls was not able to find modules in your workspace. への対処
- 4. JWT認証を作成中にecho.Context.Get()の引数でぬまった話(Golang + Echo)
- 5. ナイーブな再帰フィボナッチでマイクロベンチマーク
- 6. [Go]メソッド
- 7. Go の string と rune 周りのお話し
- 8. ざっくりDDD・クリーンアーキテクチャにおける各層の責務を理解したい①(ドメイン層・ユースケース層編)
- 9. 【Go】ログイン機能でウェブアプリを作ってみる(12)
- 10. Regoを使ってAPIのアクセス制限をしてみる
- 11. フリーランスエンジニアの年収や案件相場
- 12. Ebitengineの環境構築にちょっと苦労した話
- 13. 【Go】Minioソースコード解析(1) – エントリポイント、ビット腐敗アルゴリズム、サーバーエントリーポイント
- 14. [プロトコルバッファ] protoc-gen-go: program not found or is not executable の解決方法
- 15. Go(echo)で簡易的なCookieを実装してみた
- 16. Goのディレクトリ構成の標準について
- 17. Go言語向けNCMB SDKの使い方(InstallationのCRUD操作)
- 18. Go言語向けNCMB SDKの使い方(ロールのCRUD操作)
- 19. OpenTelemetry で始める分散トレース
- 20. 【翻訳】Goの落とし穴集 (原題: 50 Shades of Go)
Go 1.21で注目したい機能
https://go.dev/blog/go1.21
Goの1.21がリリースされましたね!
なんといっても今回特筆すべきはslicesパッケージの登場だと思います
多言語を扱うエンジニアさんはGoのスライスに扱いづらさを感じた方も多いんじゃないでしょうか
他の言語と遜色ない機能が追加、かつ直感的な関数名のものが増えたので自分が嬉しいなと思った物を紹介したいです# slicesパッケージ
## [Contains](https://pkg.go.dev/slices#Contains)
sのスライス内にvが存在するかをチェックし、存在すればtrueが返ります“`golang
func Contains[S ~[]E, E comparable](s S, v E) bool
“`[サンプル](https://go.dev/play/p/_F9v_sScpD_I)
“`golang
m := []string{“taro”, “jiro”, “saburo”}
ok := slices.Contains(m, “jiro”)
fmt.Println(fmt.Sp
Docker + Goで始めるREST API開発 開発環境編
## 目次
1. 構成
2. フォルダ構成
3. dockerfileとyamlファイル
4. goの実装
5. 動作検証## 1.構成
|ミドルウェア|バージョン|
|—-|—-|
|golang|13.4.16|
|docker|18.16.1|## 2.フォルダ構成
“`
┣━backend/
┃ ┣━build
┃ ┃ ┣━Dockerfile
┃ ┃ ┗━.go_env
┃ ┗━cmd
┃ ┗━main.go
┗━docker-compose.yml
“`## 3. dockerfileとyamlファイルの作成
#### まずはDockerfileの作成を行います。
Dockerfileは、Dockerイメージを作成するための手順書となります。
そのため、goのどのバージョンを利用するのか?や、どのフォルダで作業を行うのか?ここには記載していませんが、今後出てくる、ミドルウェアのインストールについても、このDockerfileに記載します。
“`Dockerfile
# goバージョン
FROM golang:1.21.0
gopls was not able to find modules in your workspace. への対処
## VSCodeにおけるGoのモジュール周りのエラー
参考書の写経やハンズオンイベントでのコード管理で、たまに出会います。
![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366105/c936bc7d-ff34-211e-9a94-8c2f39d82517.png)
“`
gopls was not able to find modules in your workspace.
When outside of GOPATH, gopls needs to know which modules you are working on.
You can fix this by opening your workspace to a folder inside a Go module, or
by using a go.work file to specify multiple modules.
See the documentation for more information
JWT認証を作成中にecho.Context.Get()の引数でぬまった話(Golang + Echo)
## 目次
– [x] [今回の記事の経緯](#今回の記事の経緯)
– [x] [ぬまった箇所](#ぬまった箇所)
– [x] [解決策](#解決策)
– [x] [参考文献](#参考文献)## 今回の記事の経緯
今回はバックエンド側のGolangを用いたJWT認証のロジックを考えているときにぬまったお話をいたします。The Clean Architectureに基づいてロジックを下記のように実装していました。
“`history_controller.go
package controllerimport (
“backend/model”
“backend/usecase”
“net/http”
“strconv”“github.com/golang-jwt/jwt/v4”
“github.com/labstack/echo/v4”
)type IHistoryController interface {
GetAllHistory(c echo.Context) error
// 以下省略
}type historyControl
ナイーブな再帰フィボナッチでマイクロベンチマーク
# これは何?
もともと
https://qiita.com/fsdg-adachi_h/items/5feeda2ed19f879fdf9a
という URL で公開されていた記事に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6854/fd51abff-28a5-b664-b4a3-9b6773e7adf3.png)というコメントを書いたら、その記事は削除されて。
同じ方が、全く同じような内容でhttps://qiita.com/fsdg-adachi_h/items/c54135cf0a562019295c
という記事を公開されて。
なぜか私はコメントできない(ブロックされてるのかな)ようなので、コメントで書きたかった追加情報に関する記事を書こうと思った。## int の長さの影響なのかどうか
元のコードが go は `int`。環境から類推するに 64bit 整数。
C / C++ は、おそらく 32bit。Java の int は 32bit。ということで不公
[Go]メソッド
# 概要
* [前回](https://qiita.com/hasesiu/items/993a2e20c70219f016e2)の続き
* 今回はメソッドについて学習
* 教材を読むに、次のインターフェースと合わせて、特に重要な単元のようだ。参考
https://www.oreilly.co.jp/books/9784814400041/#
# メソッド
* ユーザ定義の型に付随する関数としてメソッドが定義できる
* `func (レシーバ) メソッド名(引数) 戻り値`の形式
* 関数にレシーバが追加されている。レシーバは変数とユーザ定義型を指定する
* Javaとは異なり、オブジェクトとは別の場所で定義しており、紐付にレシーバを使っている。
* また、オーバロードはできなため、一つのレシーバに対して同じメソッド名は複数定義できない“`go
type Person struct {
name string
age int
}
// メソッド
func (p Person) toString() string {
return
Go の string と rune 周りのお話し
Go で文字列からN番目の文字を抜き出したい際に、以下のようなコードを想像する方は多いのではないでしょうか?
“`go
s := “Hello World”
fmt.Println(s[0]) // 72
“`https://goplay.tools/snippet/4YzKExavktD
私もそのうちの一人でした。`fmt.Println(s[0])` の値として期待するのは ”72” ではなく “H” です。この挙動は私が業務で使用している node.js とは異なる挙動で気になったので調べてみました。
# String とは
> In Go, a string is in effect a read-only slice of bytes.
>https://go.dev/blog/strings#what-is-a-string
Go において string は read-only な byte のスライスです。
つまり、`fmt.Println(s[0])` の値として表示された “72” は byte を表しています。
“`go
s := “H
ざっくりDDD・クリーンアーキテクチャにおける各層の責務を理解したい①(ドメイン層・ユースケース層編)
# 概要
弊社で開発中のプロダクトは、ドメイン駆動設計とクリーンアーキテクチャを組み合わせた設計となっています。
これまでフロントエンドの開発を担当することが多かった中で、golangでのAPI開発を担当した際に、「この処理はRepositoryに書くべき?」「Usecaseにこの処理を書いたら責務を持たせすぎ?」「Domain ServiceとUsecaseはどう分ける?」など迷うことが多々ありました。そこで、これら設計に関する考え方を整理するために具体的な実装を踏まえてこの記事を書いています。
この後、インフラストラクチャ層・プレゼンテーション層は別の記事として書く予定です。# DDD(ドメイン駆動設計)とは
> ドメインの専門家からの入力に従ってドメインに一致するようにソフトウェアをモデル化することに焦点を当てるソフトウェア設計手法である。
>[ドメイン駆動設計](https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88)
【Go】ログイン機能でウェブアプリを作ってみる(12)
こんにちは。
Part 12は「リフレッシュ /auth/refresh」です。
現在、有効期限24時間のアクセストークンで認証を行なってます。
「認証の時間を伸ばしたい!でもアクセストークンの期限は伸ばしたくない・・・」
そんな場合はどうしましょうか。解決方法の1つとしてリフレッシュトークンという別のトークンを使います。
アクセストークンとリフレッシュトークンの違いはこんな感じです。– アクセストークン
– 認証トークン。制限されたリソースにアクセスするときに使う
– 有効期限が短い(今回は30分)
– Authorizationヘッダーでやり取りする
– リフレッシュトークン
– アクセストークンを再取得するため、だけのトークン
– 有効期限が長い(今回は3日)
– アクセストークンが期限切れの場合、リフレッシュトークンを使ってアクセストークンを再取得できる
– 今回はCookieでやり取りするでは、このリフレッシュトークンが使えるように変更していきましょう!
# 今回の目標
– ログイン時にリフレッシュトー
Regoを使ってAPIのアクセス制限をしてみる
# はじめに
どうも僕です。先日、セキュリティキャンプがありましたね。そこで面白そうなものがありました。
セキュリティ・キャンプ全国大会2023年のB7クラスで「 Policy as Code入門」の講義を担当させていただきます。今年はありがたいことに講義時間が去年に比べ倍になったので、コンテンツもがっつり増量しました
資料も公開しておくのでご興味ある方はご笑覧ください #seccamphttps://t.co/nyor8qsle8
— mizutani (@m_mizutani) フリーランスエンジニアの年収や案件相場
こんにちは!
フルリモート専門JOBエージェント「Remogu(リモグ)」でITエンジニアのお仕事探しをお手伝いしている山本美咲です。
ここでは、「山本美咲の学びきろく☆」を書き残していきます。
_______________________________________
お仕事(ITエンジニアのお仕事探しをお手伝い)をしている時ふと思いました。
「フリーランスの年収や案件の相場は、大体どのくらいなんだろう。」
いてもたってもいられなくなった私は、フルリモートワーク案件における平均月額報酬をまとめてみました。
**言語・フレームワーク別 月額報酬ランキング**
![スクリーンショット-2023-07-26-18.13.20-1024×772.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459168/16b57ba5-06aa-a81b-ef96-e64d510d4862.png)さすがエンジニアです…。
圧倒的な月額報酬の高さです。このように、フリーランスエンジニアとして
Ebitengineの環境構築にちょっと苦労した話
# 目次
1. [概要](#概要)
1. [課題](#課題)
1. [やったこと](#やったこと)
1. [結論](#結論)
# 概要
Ebitengineの環境構築の確認(https://ebitengine.org/en/documents/install.html)
をやろうとしたらエラーが出た
# 課題
“`powershell
go run github.com/hajimehoshi/ebiten/v2/examples/rotate@latest
“`
で確認する。
エラーがでた
“`
package github.com/hajimehoshi/ebiten/v2/examples/rotate@latest: can only use path@version syntax with ‘go get’ and ‘go install’ in module-aware mode
“`
# やったこと
エラーは参照の方法をGOPATHからモジュールにしろっていうことっぽい
modファイル作ってmain()で動かしてみる。
“` power
【Go】Minioソースコード解析(1) – エントリポイント、ビット腐敗アルゴリズム、サーバーエントリーポイント
# 【Go】Minioソースコード解析(1) – エントリポイント、ビット腐敗アルゴリズム、サーバーエントリーポイント
MinIOは、高性能で高可用性の分散オブジェクトストレージソリューションを実現するためのオープンソースオブジェクトストレージサーバーです。これはAmazon S3(Simple Storage Service)と互換性があり、プライベートクラウドストレージ、パブリッククラウドストレージ、バックアップ、アーカイブ、大規模データストレージなど、さまざまなアプリケーションシナリオに使用できます。MinIOは大規模データのストレージ、高速データ転送、オブジェクトメタデータのストレージと検索をサポートしています。
MinIOの主な特徴と用途は次のとおりです:
1. **分散オブジェクトストレージ**:MinIOは水平にスケーリングでき、データを複数のストレージノードに分散して高性能とスケーラビリティを提供します。
2. **高性能**:MinIOの設計目標は、高いスループットと低遅延のデータ転送を提供し、大容量ファイルの高速読み書きが必要なアプリケーションに適しています
[プロトコルバッファ] protoc-gen-go: program not found or is not executable の解決方法
## 概要
Go言語で分散サービスを書く方法を学びたいと思い立ち、「[Go言語による分散サービス
―信頼性、拡張性、保守性の高いシステムの構築]」(https://www.oreilly.co.jp/books/9784873119977/) で勉強を始めました。
その中「2.4 プロトコルバッファのコンパイル」で次のエラーで困った時の解決法のメモです。“`console
~/proglog/StructureDataWithProtobuf$ protoc api/v1/*.proto –go_out=. –go_opt=paths=source_relative –proto_path=.
protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
–go_out: protoc-gen-go: P
Go(echo)で簡易的なCookieを実装してみた
# はじめに
以前、[Go(echo)とMySQLでAPIサーバーを構築](https://qiita.com/T_death/items/e5d99d26b235ddf7659a)してみました。それの続きとして今回は、Go(echo)を使ったCookieの実装をしてみました。
サーバー構築とかバックエンドとか全然やったことなかったので、無知が故に沼った箇所が多々ありました。自分への戒めとして、それらも記述したいと思います。## 実装した処理の流れ
* フロント → localhost:3000
* バック → localhost:8080
* localhost:3000→localhost:8080/setSessionに、データをPOSTメソッドで送る+Cookieの作成
* localhost:3000→localhost:8080/readSessionに、GETメソッドでブラウザ側にCookieがあるかを確認たったこれだけ。
## GoとCookie
まずはCookieとは何かを知る必要があり、さらにそれをどのようにGoで実装するのかを知る必要がありまし
Goのディレクトリ構成の標準について
### GoでWebAPIを作成するにあたり、Goのディレクトリ構成に標準が存在するということで、調べた結果をアウトプットします。
## 目次
1. Goのディレクトリ構成について
2. ディレクトリ構成一覧
3. 各ディレクトリの意味
4. 参考にしたサイト## 1. ディレクトリ構成について
#### Goのアプリケーションプロジェクトの基本的なレイアウトとなります。
Go開発チームによって定義された公式の標準ではありません。
これまでの大規模プロジェクトに共通するフォルダ構成になっているようです。## 2. 一覧
“`
┣━Project名/
┃ ┣━cmd
┃ ┣━internal
┃ ┣━pkg
┃ ┣━vender
┃ ┣━api
┃ ┣━web
┃ ┣━configs
┃ ┣━init
┃ ┣━scripts
┃ ┣━build
┃ ┣━deployments
┃ ┗━tests
┗━docker-compose.yml
“`## 3. 各フォルダの意味
### 1. /cmd
#### 本プロジェクトのメイン
Go言語向けNCMB SDKの使い方(InstallationのCRUD操作)
NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。
そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。
新しくGo言語向けのSDK開発をはじめたので、その使い方を紹介します。今回はInstallation(デバイストークン)のCRUD操作について解説します。
## ソースコード
ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。
[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)
## インストール
SDKのインストールは下記コマンドで行います。
“`bash
go get -u github.com/NCMBMania/ncmb_go
“`## インポート
続けてSDKをインポー
Go言語向けNCMB SDKの使い方(ロールのCRUD操作)
NCMBはモバイル向けのBaaS(mobile Backend as a Service)ですが、サーバー側のデータとNCMB上のデータを連係させたいというニーズは良くあります。
そんなときには各言語向けのSDKがあると便利です。サーバー向けにはRuby、Python、PHP、Java、C#のSDKがあります(すべて公式サポート対象外の、コミュニティSDKという位置づけです)。
新しくGo言語向けのSDK開発をはじめたので、その使い方を紹介します。今回はロール(グループ)のCRUD操作について解説します。
## ソースコード
ソースコードはGitHubにて公開しています。ライセンスはMIT Licenseになります。
[NCMBMania/ncmb\_go](https://github.com/NCMBMania/ncmb_go)
## インストール
SDKのインストールは下記コマンドで行います。
“`bash
go get -u github.com/NCMBMania/ncmb_go
“`## インポート
続けてSDKをインポートします。
“`go
OpenTelemetry で始める分散トレース
昨今、オブザーバビリティという言葉を耳にすることが増えました。オブザーバビリティとは、システムの状態をどれだけ理解し説明できるかを示す尺度です。
近年のソフトウェアは分散システムに始まり複雑化しているため、挙動を把握するための情報を集めて分析することで、システムを理解できるようにすることが重要です。このような情報にはメトリクス・トレース・ログがあり、[OpenTelemetry](https://opentelemetry.io/) はこれらを取得するためのOSSツールです。
この記事では、OpenTelemetry を使ってトレースを取得しようとしている方向けに、色々なケースで取得する方法を紹介します。
# 前提
言語:Golang 1.20.3
実行環境:GCP Cloud Run# 分散トレースの重要性
分散トレース(単にトレースとも呼ばれます)とは、1つのリクエストがアプリケーションを構成するさまざまなサービスによって処理される過程を追跡する方法です。
処理過程のどこで障害が発生しているか、パフォーマスが低下しているかという原因を特定するのに有効です。
【翻訳】Goの落とし穴集 (原題: 50 Shades of Go)
少し前の記事ですが、勉強になったので、翻訳で共有させて頂きます。
[元記事](https://golang50shad.es/)のタイトルは `50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs` です。(50 shades of ~ は`Fifty Shades of Grey` という小説のもじりだと思います。)
※作者の方の許可も[頂けました](https://twitter.com/kcqon/status/1691301160307888128)。
—
# 概要
Goはシンプルで楽しい言語ですが、他の言語と同様に、いくつかの落とし穴があります… 落とし穴の多くは、必ずしもGo言語に責任があるとは言えません。これらのミスの中には、別の言語からGoに移る際に自然と引っかかってしまう罠もありますし、開発者の誤った思い込みや詳細の見落としに起因するものもあります。
これらの落とし穴の多くは、時間をかけて公式の仕