Go関連のことを調べてみた

Go関連のことを調べてみた

【Go】マップのキー・バリューを昇順・降順にソートする

# はじめに

Goのmapは順序を保持しないため、並び替えたい場合はひと工夫が必要です。

以下のようなマップをキー・バリューそれぞれで昇順・降順に並べ替えていきます。

“`go
m := map[string]int{
“Taro”: 23,
“Keiko”: 41,
“Jun”: 11,
“Azusa”: 16,
}

// マップは順序を保持しない
for k, v := range m {
fmt.Printf(“Name: %s, Age: %d\n”, k, v)
}
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/911578/1bd39d49-ef5d-5a21-039c-393540a67c2c.png)

## キー(文字列)でソートする

### 昇順

“`go
// 先にキーだけソート
keys := []string{}
for k := range m {
keys = append(ke

元記事を表示

Golangでhttpサーバーを作り直して、「Tiny Shiba.」と名付けた

golangのnet/httpを使った簡易WEBサーバー「Shiba.」をgithubにて公開していたのですが。HandleFuncが勝手にスレッドを作って動いているマルチスレッドなサーバーだと知って作り直し初めまして

どうせなら、構造体を使ったURLの指定を思い浮かんだので使いたい。そして、実行スレッド数を指定できる方法を海外のウェブで見つけたので、それも取り込んで作り直したら。ワンソースなプログラムでまとまりました

“`go:shiba.go
package main

import (
“fmt”
“time”
“net/http”
“golang.org/x/time/rate”
“log”
)

//

var (
filePath string = “public”

limiter = rate.NewLimiter(1, 3)
)

//

type urlRotator struct {
path string
function func(w http.ResponseWriter, r *http.Request)
}

func

元記事を表示

Goの基本構文一覧

## 1. HelloWorld
Goのプログラムの開始地点は`main`パッケージの`main`関数です。
“`go
package main

import “fmt”

func main() {
fmt.Println(“Hello World!”)
}
“`
## 2. 変数宣言
“`go
// 変数
var num int = 10
// 定数
const constNum int = 20
“`
Goの基本のデータ型は以下の通りです。
| データ型 | 値 |
|:–|:–|
| int8
int16
int32
int64 | 8~64ビット整数 |
| uint8
uint16
uint32
uint64 | 8~64ビット符号なし整数|
| float32
float64 | [単精度浮動小数点](https://ja.wikipedia.org/wiki/%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6

元記事を表示

Go言語のJson出力をjson serverの形式に揃える方法

## はじめに

Go言語で集めたデータをjsonで保存.そのjsonをjson-serverでホストしてフロントエンドから取得,及び変更する簡易な自作ツールを作成していた.
運用期間を延ばしてもそこまでjsonが肥大化する性質のツールではないためjsonもGitリポジトリで管理したい.しかし,Go言語標準ライブラリのjson encoderのデフォルトの出力形式とjson-server側で変更した際に整形される形式が異なっている.
そのため,Go言語でデータ取得した後json-serverの変更が実行された場合や,json-serverの変更が実行された後に再度Go言語でデータを取得した場合にGit上ではファイル全てが書き換えられたように認識されてしまい変更履歴が機能しない.
なのでGo言語標準ライブラリのjson encoderの出力形式をjson-serverと同じ形式にしたい.

## 対処

以下愚直にjson encoderを使用したコードとその出力.json-serverの形式と違う部分は1行にまとめられていることとHtml要素がエスケープされていることだった.

“`

元記事を表示

Golang_study_1

## 本日やったこと
– GO言語を学ぶための環境構築
– [参考にさせていただいた記事](https://qiita.com/melty_go/items/c977ba594efcffc8b567)
– goのインストール
– vscodeをGO開発向けにカスタマイズ
– 静的チェック
– デバッグ
– goのプロジェクト作成
– GO言語の基礎学習
– [A Tour of Go](https://go-tour-jp.appspot.com/list)
– Git環境の構築
– gitのインストール
– GitLabアカウント作成
– ローカルマシンの既存プロジェクトフォルダをgitリポジトリ化
– GitLabの空プロジェクトと上記ローカルリポジトリの同期

## 詰まった点
### GO関連
– Goのプロジェクトを作成するときに実行する“`go mod init <モジュール名?>“`がよくわからなかった
– 変数の宣言時に、型を変数名のあとにつける感じが慣れない

元記事を表示

Vercel FunctionsでGoのAPIサーバをデプロイする!

# はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。(同担OKです😉)

今回は、運用にお金を使いたくない人向けの味方「Vercel Functions」にステートレスなGoのAPIサーバをデプロイする方法をまとめました。

前提として、Vercel Functionsのデプロイに向いているものは以下の条件にクリアしたものになると思います😇
– ステートレス(セッション管理などをしない)
– 小規模なAPIサーバ
– 一回のデータ取得に時間が掛からない

# セットアップ
1. Vercelのアカウント登録
1. Vercel CLIのインストール
– npmの場合、`npm i -g vercel`
3. Vercelにログイン
“` npm
vercel login
“`

# APIエンドポイント作成
### ディレクトリ構成
これを元に、ご自身で構成を変えていただければと思います🫣
“`
.
├── api # エンドポイント用
│ ├── articles # APIの例
│ │ └── index.go
│ └── index.go

元記事を表示

【未経験・独学】Next.js+TypeScript+GoでWebアプリケーションを開発しました

# はじめに
大学も情報系ではなく、仕事もITとは程遠い社会人ですが、プログラミングに興味を持ち勉強を開始しました。まだまだ機能は追加していく予定ですが、一番実装したい機能がじっそうできたので紹介させていただきたく本記事を作成しました。

# アプリ解説
予備試験、司法試験に出題される各法令を表示、各法令内で指定した条文番号にジャンプ、各法令内でキーワード検索をするアプリです。

https://raku-roppou.vercel.app/

## 開発の動機
予備試験、司法試験本番では紙の六法を使用します。しかし、日ごろの勉強では紙の六法を引くのが面倒なことがあります。私も受験生時代は紙の六法を引くのが面倒なときは例えばe-govで条文をPCで見ていました。ただ、e-govは重かったりピンポイントで特定の条文にジャンプするのが困難と言う問題を感じていました。このような不便さから条文を見ようと思っても「まあいいか」と怠ることがよくありました。以上のような受験生時代に感じていた問題点を解決すべく本アプリを開発しました。

## 機能
## ユーザー機能
* 条文表示
* 条文にジャン

元記事を表示

Go言語でブロックチェーンのシステムを作成する(その5)

## はじめに
前回は、nonceの実装までやりましたが、今回はマイニングの実装をしていきます。

– 前回までの記事

https://qiita.com/jun_11/items/a1adf93ba02292321b25

https://qiita.com/jun_11/items/259f0a777e12b3fa1b32

https://qiita.com/jun_11/items/61adfc340792cdb2af08

https://qiita.com/jun_11/items/88f9a40648444b597529

– バージョン
– Go 1.22.0

## マイニングとは
マイニングとは、トランザクションを確認し、新しいブロックをブロックチェーンに追加するプロセスです。
具体的には、以下のステップが含まれます。
1. トランザクションの収集
2. nonceの計算(プルーフ・オブ・ワークの計算)
3. ブロックの追加と報酬の受け取り

1.では、未確認のトランザクションを収集し、新しいブロックにまとめます。
2.では、前回の記事で実装した、nonceを

元記事を表示

外部ライブラリを利用せず、structをPretty Printしたい

外部ライブラリを利用せず、Go言語でstructをPretty Printする方法を2つ紹介します。

# fmtパッケージを利用する

`fmt.Printf`を利用する場合、書式指定子に`%+v`を指定すればよいです。

“`go
package main

import (
“fmt”
“time”
)

type Employee struct {
ID int
Name string
HireDate time.Time
}

type Department struct {
ID int
Name string
Employees []Employee
}

func main() {
department := Department{
ID: 9876,
Name: “営業部”,
Employees: []Employee{
Employee{ID: 100, Name: “佐藤”, HireDate: time.Date(2001, 1, 1, 1, 1, 1, 1, time.UTC

元記事を表示

JavaのOptionalをgolangにportする

# はじめに

Java さわってますか?私は10年近くさわってません。[JDK 8 Release Notes](https://www.oracle.com/java/technologies/javase/8all-relnotes.html#JSERN108)を見ると2014年5月15日にリリースされているので大体10年です。

この10年位は golang をさわってます。

Javaの勉強もしなければなと思いつつも、作りたいアプリケーションも特にありません。ドキュメントを読んでるだけというのも長続きしないかなと思ってます。そんな時に以下の2つのブログを読みました。

* [Goのヌル安全について](https://zenn.dev/nobonobo/articles/f49dd93073fdd3c6c663)
* [元JavaエンジニアがGoに感じた「表現力の低さ」と「開発生産性」の話](https://inside.dmm.com/articles/ex-java-engineer-thoughts-about-go/)

これらを読んで「 Java の Optional

元記事を表示

GoLangを使うのはなぜ?

Go言語(Golang)は、Googleによって開発されたオープンソースのプログラミング言語です。近年、その人気が高まっており、様々な用途で使用されています。

Go言語を使う理由は、以下のようなものが挙げられます。

**1. シンプルでわかりやすい**

Go言語は、C言語のような構文を持ちながら、よりシンプルでわかりやすい言語です。そのため、初心者でも比較的簡単に学ぶことができます。

**2. 高速な処理速度**

Go言語は、C言語のようにコンパイルされる言語です。そのため、実行速度が非常に速いです。

**3. 並行処理に優れている**

Go言語は、goroutineと呼ばれる軽量スレッドを用いて、簡単に並行処理を行うことができます。

**4. 標準ライブラリが充実している**

Go言語は、標準ライブラリが充実しています。そのため、様々なタスクを簡単に実行することができます。

**5. 静的型付け**

Go言語は、静的型付け言語です。そのため、実行時エラーを防ぐことができます。

**6. テストがしやすい**

Go言語は、テストがしやすい言語です。そのため、コ

元記事を表示

Vscodeでgoテストのタイムアウトを伸ばす

1. vscodeでSettingsを開く
![スクリーンショット 2024-04-19 12.25.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961840/82794284-ef96-fad5-d369-c70605deea0f.png)

1. `go.testTimeout`を検索
1. タイムアウトを設定する

– 参考

https://stackoverflow.com/questions/73033725/how-to-edit-default-go-test-timeout-in-visual-studio-code

元記事を表示

[Go]JSON文字列とデータオブジェクト間の変換

# 概要
Golangにおける標準パッケージ `json` を使った以下の操作について記述。
JSON文字列を構造体に変換( `json.Unmarshal` )
構造体をJSON文字列に変換( `json.Marshal` )

※Railsでいうところの `.to_json` , `JSON.parse` のお話。

以下、基本的な処理のサンプルコード。
https://go.dev/play/p/W5Of2mG79Mf

“`sample.go
package main

import (
“encoding/json”
“fmt”
“log”
)

// パースしたJSONを受け入れる構造体
type jsonBlock struct {
StringKey string `json:”string_key”`
IntKey int `json:”int_key”`
FloatKey float64 `json:”float_key”`
}

func main() {
// パース対象のJSONバイナリ
jsonBlockBin := []

元記事を表示

[Go言語]goqueryを用いたWebスクレイピングメモ

## 概要

* ライブラリ`goquery`を用いたWebスクレイピング方法についてメモする。

## goquery 概要

* Go言語で開発されたライブラリ。
* 主にHTMLドキュメントの解析と操作を行うために使用される。
* jQueryのようなシンタックスを模倣しており、HTMLドキュメントを簡単に選択、操作、抽出することができるように設計されている。

**主な特徴**

1. **jQuery風の操作**: jQueryの選択子やメソッドを模倣しているため、WebページのDOM要素を簡単にトラバース(走査)や操作が可能。これにより、HTMLドキュメントからのデータ抽出が容易になる。
2. **HTMLドキュメントのパース**: HTMLをパースしてドキュメントオブジェクトモデル(DOM)を作成し、その後、要素を簡単に検索して操作できる。これはWebスクレイピングやテストデータの生成など、さまざまな用途で利用できる。
3. **軽量で高速**: Go言語の軽量性と高速な実行速度を活かし、効率的なHTMLドキュメントの処理を実現する。

**使用時の留意事項**

1.

元記事を表示

JWTのBase64URLデコードで引っかかった話

JWTの各要素をパースする処理を自前で書いていたときに、ちょっと詰まってしまったので備忘録として記述しておく。

# 結論
– Base64エンコードとBase64URLエンコードは異なるものである。
– JWTのヘッダ、ペイロード、署名はそれぞれBase64URLエンコードされているものなので、取り出すにはBase64URLデコードしないとダメ。
– Goならば `base64.RawStdEncoding.DecodeString`関数を使う。

# Base64エンコードとBase64URLエンコード
要約すると以下の違いあり。

**Base64エンコード**
`A-Z, a-z, 0-9, +, /`しか扱うことができない通信環境において、元のデータをこれらの文字にエンコードする方式。
パディング文字として`=`が使われる。
主にEメール、Basic認証、インターネット掲示板で使われる。

**Base64URLエンコード**
URLでは`+, -`は特別な意味をもつため、Base64エンコード済み文字列の中でこれらに相当する文字はそれぞれ`-,_`に変換して扱う方式

元記事を表示

Antlr4の構文解析をgo言語に組み込もう

# antlr4
https://www.antlr.org/
antlr4((ANother Tool for Language Recognitionのversion4の頭文字です)は与えられたテキストに対してルールを設定し、それに応じた処理への振り分けを行うパッケージです。大分ざっくり言うと自作のプログラミング言語(DSL:Domain-Specific Language)を作ることができます。
ただ、antlr4が構文を解析した後の各パーツに対応する処理は自分で書かなければいけません。go言語でこの部分を作る機会があったのでその例を紹介したいと思います。
今回は四則演算のstringを処理して計算結果を返すようなparser(生成された構文解析器)を作ろうと思います。

# 環境構築
vscodeの拡張機能を入れれば、すぐに使えます。以下の記事を参考にしました。
https://qiita.com/i-tanaka730/items/4eeaae247f70895c3456

# grammarファイル
antlr4に読み込ませるinputファイルです。
ここに、構成要素や演算

元記事を表示

Go言語 Docker開発環境構築方法 メモ

## 概要

* DockerでGo言語の開発環境を構築する方法について備忘録としてメモする。

## 環境情報

* OS:WSL2 Ubuntu-22.04
* Docker:24.0.7
* docker compose : v2.10.0
* Visual Studio Code:1.85.1

## 手順

### 1. 作業用フォルダにDockerfile、docker-compose.ymlを作成する

* 任意の作業用フォルダの直下に次の2ファイルを作成する

* `Dockerfile`

“`dockerfile
# ベースイメージ
FROM golang:1.22rc1-alpine3.19
# コンテナ内のディレクトリ作成
RUN mkdir /go/src/app/
# 作業用ディレクトリ設定
WORKDIR /go/src/app/
# ホスト上のファイルをコンテナ作業用ディレクトリにコピー
COPY ./ /go/src/app/
“`

※ベースイメージは[公

元記事を表示

最近登場したプログラミング言語の多様性:未来への道

![Internship-Robby-Coding-1024×522.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3771407/9f05d86d-9343-baab-3069-69c6dd97f2ad.jpeg)

近年、テクノロジーの進歩に伴い、新しいプログラミング言語の登場が加速しています。これらの言語は、異なる用途やニーズに応えるために設計され、開発者コミュニティに革新的なアプローチをもたらしています。以下では、最近注目されているいくつかの新しいプログラミング言語を紹介します。

Rust(ラスト):

Rustは、システムプログラミングのためのモダンで安全な言語として急速に人気を集めています。メモリの安全性と並行性を重視し、パフォーマンスと安全性を両立させることが特徴です。システムレベルのプログラミングや組み込みシステムの開発に適しています。

Kotlin(コトリン):

Kotlinは、Java Virtual Machine(JVM)上で動作する静的型付けのプログラミング言語です。An

元記事を表示

Compute Engine に MySQLをインストール【CentOS 7】

# はしがき

ネットにある記事を参考にしながら作業を行うと躓くことが多くありました。この記事では、Compute Engine上でMySQLが動き、ローカルからログインできるところまでの手順を記載します。

無料枠のCompute EngineでMySQLを使いたい人には参考になるかもしれません。

最後には、Go言語を使ったGCEのインスタンスの起動と停止、IPアドレス取得プログラムが書いてあります。

## 環境

* 2024年4月17日
* Mac OS 14.0 (Intel Mac)
* Google Chrome

# 手順

## Compute Engineのインスタンスを作成

有効になっていない場合は、Compute Engine APIを有効化

* リージョン:us-west1
* ゾーン:us-west1-b

* マシンタイプ:e2-micro
* ブートディスク:
* OS:CentOS
* バージョン:CentOS 7
* ブートディスクの種類:標準永続ディスク
* サイズ:30GB

* 「詳細オプション」→「ネット

元記事を表示

TypeScript+React+Goで適当にアプリを作ってみる

# この記事について
色々あってReact+Goについて知る必要が出てきたので、勉強がてら適当にアプリ作ってみました。React+TypeScript+Goのアプリって結構世間にありそうだし、ネットに情報たくさんあるから勉強しやすいかなとか思ってたらとんでもない。これをトレースすればOKみたいな記事がなくって結構苦労したので、何なら自分が記事書くか、という感じ。

# 記事の作者について
最近はPMしかやっていないザコRubyist。ReactとGoの経験はなく、TypeScriptは実務でほんのりやったくらい。ちなみに次の職場ではエンジニアやらない。

# ソースはここ
https://github.com/gitk47320/go_react
* ReactとかGoとかど素人で、ネットの情報かき集めてとりあえず動くところまで何とかしたというレベルなので、使用時はその辺気をつけてほしい
* 言い訳がましいですが、命名とか細かいところでイケてないなあって思うところはありますので、そこはご愛敬。気が向いたら直す予定

# アプリの構成について
* ローカル環境はdockerで構築
* フ

元記事を表示

OTHERカテゴリの最新記事