- 1. GoでWebアプリケーションを作る(1)
- 2. [Go]string、Rune、コードポイント、[]byteの差異について
- 3. Go 1.21で注目したい機能
- 4. Docker + Goで始めるREST API開発 開発環境編
- 5. gopls was not able to find modules in your workspace. への対処
- 6. JWT認証を作成中にecho.Context.Get()の引数でぬまった話(Golang + Echo)
- 7. ナイーブな再帰フィボナッチでマイクロベンチマーク
- 8. [Go]メソッド
- 9. Go の string と rune 周りのお話し
- 10. ざっくりDDD・クリーンアーキテクチャにおける各層の責務を理解したい①(ドメイン層・ユースケース層編)
- 11. 【Go】ログイン機能でウェブアプリを作ってみる(12)
- 12. Regoを使ってAPIのアクセス制限をしてみる
- 13. フリーランスエンジニアの年収や案件相場
- 14. Ebitengineの環境構築にちょっと苦労した話
- 15. 【Go】Minioソースコード解析(1) – エントリポイント、ビット腐敗アルゴリズム、サーバーエントリーポイント
- 16. [プロトコルバッファ] protoc-gen-go: program not found or is not executable の解決方法
- 17. Go(echo)で簡易的なCookieを実装してみた
- 18. Goのディレクトリ構成の標準について
- 19. Go言語向けNCMB SDKの使い方(InstallationのCRUD操作)
- 20. Go言語向けNCMB SDKの使い方(ロールのCRUD操作)
GoでWebアプリケーションを作る(1)
こんにちは。
今日からはGo言語を使って簡単なWebアプリケーションを作成します。
# 目的
– あなたがプログラミングを行う際の選択肢として、Goを挙げられる為の第一歩となること
– より、知らない人に知ってもらうことを重要視しています# 全体の流れの確認
– Goとは
– 特徴
– どこで使われているの?
– Hello, World作成
– 実行
– クロスコンパイルの体験
– 変数とその定義方法
– 変数の種類
– 変数定義方法
– 不具合箇所は、最高の講師に教えてもらおう
– 不具合の修正
– 関数
– 関数の定義
– 関数を書いてみる
– 関数の実行される順番
– パッケージ
– パッケージを使う
– パッケージを作る
– 構造体
– 構造体の定義
– 構造体への関数の関連付け
– 牛丼屋型と、注文する関数を定義する
– Webアプリケーション
– httpを起動する方法
– はじめてのGo言語Webアプリケーシ
[Go]string、Rune、コードポイント、[]byteの差異について
各概念の説明は参考ページにわかりやすく記述されていますのでそちらをご参照ください。
ここでは、概念の違いに注目して理解を深めることや端的に表現することを目的としています。## byte型とstring型について
“`go
var scentence string
//スライス作成←scentence[index]はbyte型:1byteごとに区切られる
codePointPre := []byte{scentence[index]} //[]byteにコードポイントが格納される
//バイト配列へ変換←scentence[index:index+1]はstring型
codePointPre := []byte(scentence[index:index+1]) //[]byteにコードポイントが格納される
“`1.Goが準拠するUTF-8は可変長エンコーディング。
文字列にインデックスでアクセスしたときに得られるbyte値は1byteごとであるので、scentenceは英数字の場合にのみ対応。マルチバイト(かなカタカナ漢字)にはstringをbyteにキャスト
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