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

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

【Go初学者向け】Goの構造体を他言語のオブジェクトの感覚で操作したらハマった

# 注意点

– ポインタ型の話について詳しくは触れません。構造体+ポインタの話は他の記事を参照ください。
– 値渡し、参照渡しという単語を使わずに内容を記述します。

# この記事で伝えたいこと

– 構造体について
– オブジェクトに似ているのは見た目だけ!
– 変数としての動きは参照型ではなく値型!そのため、int や bool 等のいわゆるプリミティブな型と同じ動きをする!
– 構造体をポインタ型に変換しない状態で、引数に渡したり range の for で扱う際の動きに注意!

# この記事の対象読者

– Java や Ruby 等の他のオブジェクト指向言語の知識をベースに Go の学習に取り組み始めた方
– 構造体という、Go におけるオブジェクトのようなもの操作にまだ慣れていない方
– Go のコードの中で構造体を扱って、「不思議な動きするな…」と感じている方

# Go の構造体の操作でハマった

– 筆者は今まで Java や Ruby でコードを書いておりました。Go に関しては最近勉強を始めたばかりの初学者です。Go の勉強を進める中で、「構造体」とい

元記事を表示

Go言語のGinフレームワークで静的ファイルを表示してみた


Go言語のGinフレームワークで静的ファイルを表示してみた

**現実味がありすぎると良くないことありますよね**

 いやー。空想は空想でいいんですよ?

 でも現実を謳っていて、現実味が欠けていると、ちょっとなあ、て思う時があります。

 
 まあいいんですけどね。

結局は変わらないものが良いんですよね。

**目次**
– [1. Ginフレームワークとは](#1-ginフレームワークとは)
– [2. コード例](#2-コード例)
– [3. おわりに](#3-おわりに)

## 1. Ginフレームワークとは

 `Gin`は、`Golang`で書かれたWebフレームワークです。

 `martini`に似た`API`を持ちながら、非常に優れたパフォーマンスを発揮し、最大で40倍高速であることが特徴です。

 `martini`(マティーニ)は`Go`言語で書かれたWebフレームワークで、モジュラー設計と使いやすさが特徴ですが、パフォーマン

元記事を表示

Goを利用し、API経由で自分の草の情報を取得したい

# はじめに

GitHubのコントリビューション、俗にいう「草」の情報をGitHub APIを利用して取得する方法を紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/486da189-dab6-89be-4607-9d848451852f.png)

なお取得するのは自分のコントリビューション情報です。また言語としてはGoを利用します。

“`
$ go version
go version go1.20.3 linux/amd64
“`

# 事前準備

事前準備として、アクセストークンの作成を行います。

① アクセストークンの作成ページへ移動します。

https://github.com/settings/tokens

② Generate new token を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/5b43c

元記事を表示

[Go言語]LINE ログイン連携方法 メモ

## 概要

* Go言語でLINEログイン連携する方法についてメモする。

## LINEログイン シーケンス

* 以下のようなLINEログイン連携シーケンスをGo言語で実装する。

“`mermaid
sequenceDiagram
participant U/A as U/A
participant WebApp as テスト用Webアプリケーション
participant LINE as LINEログインサーバー
participant ProfileAPI as LINEプロファイルAPI

U/A->>WebApp: LINEでログインをクリック
WebApp->>U/A: LINEログインサーバーの認可エンドポイントへリダイレクト
U/A->>LINE: 認可エンドポイントにアクセスし、ログイン情報を入力
LINE->>U/A: 認可コードとともにテスト用WebアプリケーションのリダイレクトURLへリダイレクト
U/A->>WebApp: 認可コード
WebApp->>LINE: 認可コー

元記事を表示

開発環境の整備のためのDelve設定

## 概要

EchoのAPI開発環境の整備のためにDelveを導入する。
また、airが導入済みの環境なので共存を目指す。

## Delveとは

Goのコードデバックできるようにするライブラリとなっている。
https://github.com/derekparker/delve
使い方に困惑するところがあるのだが、IDEと組み合わせることで実行処理を途中で止めれるようになりので、うまく動作しないときや実装の結果確認といった確認作業がリアルタイムできるようになる。確認のためのログ仕込みとかが不要になるのでGoの開発においては導入しておくと便利だと思っている。
イメージ的には、Railsのbyebugに近いものではある。
IDEと組み合わせないとコンソール上でブレークポイントの設置などをしなくてはならないです。

## Delveの導入

利用しているDockerfileに以下のコマンドを追加する

“`
RUN go install github.com/go-delve/delve/cmd/dlv@latest
“`

その後、`docker compose build`

元記事を表示

Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた


Go言語で与えられた入力文字列が有効なMACアドレスの形式を満たしているかどうかを判断するIsMacAddressを作ってみた

**Happy set**

「キェェェェェェアァァァァァァシャァベッタァァァァァァァ!!!」

「マタシャベッタァ!!!!」

「ハッピィィデェェウメツクシィィテェェエ!!!」

「レストインピィィィッッスマデイコウゼ!!」

「イツカミタァァァ??!ジゴクモイイトコロッッオォォゥ!!」

「アイォヲヲヲバラマイテェエィィィイエエ!!!!!」

**目次**
– [1. MACアドレスとは](#1-macアドレスとは)
– [2. コード例と実行例](#2-コード例と実行例)
– [3. おわりに](#3-おわりに)

## 1. MACアドレスとは

 MACアドレス(Media Access Control Address)とは、ネットワーク内のデバイスを一意に識別するために使用される固有の識別子です。

 MACアドレスは通常、6つの2桁の16進数がコ

元記事を表示

Go言語におけるマップの使い方

### はじめに
こちらを日本語訳してみます。

https://go.dev/blog/maps

コンピュータサイエンスにおいて最も便利なデータ構造の一つがハッシュテーブルです。Goでは、このハッシュテーブルを実装した組み込みのマップ型を提供しています。マップは、高速な検索、追加、削除を実現します。

### マップの宣言と初期化
Goでのマップの型は`map[KeyType]ValueType`と表されます。`KeyType`は比較可能な任意の型であり、`ValueType`は任意の型です。

“`go
var m map[string]int
“`

マップ型は参照型であり、初期化されていないマップは`nil`を指します。`nil`マップは読み取りには空のマップとして振る舞いますが、書き込みを試みるとランタイムパニックを引き起こします。マップを初期化するには`make`関数を使用します。

“`go
m = make(map[string]int)
“`

### マップの操作
Goはマップを扱うための馴染み深い構文を提供しています。この文はキー`”route”`に値6

元記事を表示

ginフレームワークのテンプレートエンジンで画像を表示する方法

# はじめに
こんにちは,りゅうです
GoのwebフレームワークであるGinを利用してアプリを作っているのですが,フロントで画像を表示するためのAPIを作成中に情報がなくて困ったので記事にしました

# やりたいこと
GitHubもそうですが,フロント側で画像を表示するときには画像がレンダリングされたHTMLを埋めこんでいるようです(ちがったらごめんなさい)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/842766/10fb9188-cc41-ff1d-6df9-5aa96a00d93c.png)

この画像表示用URLを発行するためにGOのテンプレートエンジン機能を活用します.
テンプレートエンジンの機能自体はGO側にもあるのですが,今回はGinフレームワークを使っているので,Ginのみを使ってこれを実装していきたいと思います.

# 実装してみる
まずはテンプレートのためのGoのコードです
`ioutil`を使ってバイト列として画像をファイルを開きます
そのバイト列をさらにbas

元記事を表示

Jaeger超入門

# 概要

この記事は、Jaegerを理解する第一歩目として読むことを目的に書きました。この記事の前半では、Jaegerの概要を説明し、類似OSSといくつかの観点で比較します。後半では、Jaegerを動かしながら理解を深めていきます。

![jaeger-logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43869/78ef9a17-7982-41d7-2245-627753a1a894.png)

:::note info
この記事の執筆時点のJaegerの最新バージョンは、1.5.4です。参照する公式ドキュメントや動作確認するデモアプリケーションのバージョンも1.5.4です。
:::

# Jaegerとは

Jaegerは、分散トレーシングを実現するOSSです。分散トレーシングとは、マイクロサービスアーキテクチャーで分散されたサービス間のリクエストのフローを追跡することで、システム全体のパフォーマンスの改善とトラブルシューティングに役立てる機能です。

例えば、以下のような複数のサービスで構

元記事を表示

Go言語のtestingパッケージを使ってみた

自分の関わっているWebサービスは、一部をGo言語で実装している。
今回、testingパッケージを導入して、単体テストの一部を自動化したので、そのメモを残します。

# 環境
“`
% sw_vers
ProductName: macOS
ProductVersion: 13.5
BuildVersion: 22G74
% go version
go version go1.21.6 darwin/arm64
“`

# ソースコード
2つの数値を加算する関数`add`をテスト対象として記述したテストコードを例としています。
### テスト対象
“`example/add.go
package example

func add(a, b int) int {
return a + b
}
“`

### テストコード
“`example/add_test.go
package example

import “testing”

func TestAdd(t *testing.T) {
type Args struct {
a int
b int

元記事を表示

GoでgRPCサーバーを立ててみる5(client.goの実装、動作確認)

お疲れ様です。

今日は「client.goの実装、動作確認」について部分いたします。

# client.goの実装

gRPCサーバーとやり取りするclient.goの実装をしていきます。

“`article/client/client.go
package client

import (
“context”
“io”

“github.com/k88t76/GraphQL-gRPC-demo/article/pb”
“github.com/k88t76/GraphQL-gRPC-demo/graph/model”
“google.golang.org/grpc”
)

// Clientからサービスを呼び出せるようにする
type Client struct {
conn *grpc.ClientConn
Service pb.ArticleServiceClient
}

func NewClient(url string) (*Client, error) {
// client connectionを生成
conn, err := grpc.D

元記事を表示

Go言語でLINE botを使って画像を送信してみた


Go言語でLINE botを使って画像を送信してみた

**imagin**

考えるな、感じろ。

感じるな、動け。

動くな、手を上げろ。

強盗だ!

何?理解できない?

考えるな、感じろ。

……。

**目次**
– [1. LINE botとは](#1-line-botとは)
– [2. コード例](#2-コード例)
– [3. おわりに](#3-おわりに)

## 1. LINE botとは

 LINE botは、LINE Messaging APIを使用してLINEプラットフォーム上で動作する自動応答プログラムです。

 ユーザーからのメッセージに対して自動で返信したり、特定のイベントに基づいて情報を提供することができます。

 ビジネスでの顧客サポートや、エンターテイメント、教育目的での情報提供など、幅広い用途に使用されています。

## 2. コード例

以下に簡単なコード例を示します。

`YOUR_SECRET_TOKEN`
`YOUR_ACCESS_TOKEN`

元記事を表示

Go言語での重複排除処理とカスタムマップ型の利用

## はじめに
配列やスライスから重複する要素を排除したい場面って、意外としばしば出くわしますよね。今回は、そんな時に役立つ`CustomMap`型を使った解決方法をご紹介します。

### `CustomMap`型の定義
まずはじめに、重複をスマートに管理し、すっきりと排除するための`CustomMap`型を定義してみましょう。この型は、`map[string]bool`をうまくラップして、文字列のキーに`true`を割り当てます。キーが自動的に一意になるので、これを使えば重複排除の土台がしっかりと築かれます。

“`go
type CustomMap map[string]bool
“`

### `NewCustomMap`関数の実装
重複排除の鍵となるのは、`NewCustomMap`関数です。この関数が、与えられた文字列リストから新しい`CustomMap`インスタンスを作り上げるんです。文字列をマップのキーとして使うことで、キーの一意性が保証されます。**Goのマップでは、各キーは一意でなければならず、同じキーに対して値を再度設定しようとしても、最初の値が上書きされる

元記事を表示

【Go言語】Katana使ってみた

# katanaとは

https://github.com/projectdiscovery/katana

Project Discovery社が開発したOSINTのWebクローラーツール。
OSINTとは、*Open Source Intelligence*の略で、公開されている情報を収集・分析する手法の1つ。意図しない情報が公開されていた場合、サイバー攻撃に用いられる可能性がある。

# Katanaでなにができる?

* 高速かつ完全に構成可能な Web クローリング
* 標準モードとヘッドレスモードのサポート
* JavaScriptの解析・クローリング
* カスタマイズ可能な自動フォーム入力
* スコープ制御(正規表現などによるフィルタリング)
* JSON形式やファイル形式の出力
* STDIN、URL、複数URLのリストによる入力

# インストール

以下コマンドでインストールする。

“`
go install github.com/projectdiscovery/katana/cmd/katana@latest
“`

# 使い方

`-h`をつけるとオ

元記事を表示

Mattermost をフル活用するために Mattermost の拡張機能を調べてみた

## この記事の目的

以前 Slack の拡張機能を調べたので,Mattermost の拡張機能も確認します.

https://qiita.com/caunu-s/items/5981d6faff2a3736abb0

本記事は Mattermost の起動方法,拡張機能の検証,Slack との比較をまとめたものです.

:::note info
こちらの記事を参考にして,Mattermost サーバーの構築および Plugin や Apps framework の開発を行うことができます.
:::

## 構成

![mattermost-network-architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997806/431a7fb7-74b7-2d38-5dd6-affe1dbf6276.png)

本記事では様々な経路・構成を用いて接続を検証しています.
(結果として図が複雑化してしまいましたが…) 通信経路の自由度が高いことがよくわかると思います.

## サービ

元記事を表示

【認証機能バグ】Apple IDを利用したログインができなくなった

## シチュエーション
ある日、これまで利用できていたAppleIDを利用した認証機能が利用できなくなった。
AppleIDを利用して認証するユーザーはサービスを利用することができない。
早期に問題の解決を求められる。

– ログインをしていないため、UserIDでログを絞り込むことができない
– [Appleのシステム状況は問題発生していない](https://www.apple.com/jp/support/systemstatus/)
– Twitterなどを見てもAppleIDでログインできないサービスは複数ある様子

なぜ、認証機能がうまく動作しないのだろうか?

## 問題箇所

> email_verified
A string or Boolean value that indicates whether the service verifies the email. The value can either be a string (“true” or “false”) or a Boolean (true or false). The system may n

元記事を表示

Go言語でAWSを操る: パッケージsessionについて


Go言語でAWSを操る: パッケージsessionについて

**とあるバンドマン**

_「いやー、いいセッションだったね」_

_「こちらこそ、魂が震えるライブだった」_

_「それにしてもこんな所で、こんな良いギタリストに出会えるとは」_

_「私こそ!こんなに良いドラマーに出会えるとは」_

_「いやー」_

_「いやー」_

_「「ここが異世界でなければなー」」_

_「あの私たちをひいてきたトラックの

Go言語における「nil」とゼロ値の理解

Go言語では、変数に初期値を割り当てずに宣言すると、その型のゼロ値が自動的に割り当てられます。この機能は、プログラムのバグを減らし、初期化の手間を省くことに役立ちます。

### 基本型のゼロ値

– 整数型(int, int8, int16, int32, int64 など): ゼロ値は 0 です。
– 浮動小数点型(float32, float64): ゼロ値は 0.0 です。
– 論理型(bool): ゼロ値は false です。
– 文字列型(string): ゼロ値は空文字列 “” です。

### 複合型のゼロ値

– ポインタ: ゼロ値は nil です。これは、何も指していないことを意味します。
– スライス: ゼロ値も nil です。長さと容量がともに0のスライスを表します。
– マップ: ゼロ値は nil で、キーと値のペアが存在しないことを意味します。
– チャネル: ゼロ値は nil で、初期化されていないチャネルを表します。
– インターフェース: ゼロ値は nil で、どの具体的な値も保持していないことを意味します。
– 構造体(struct): 各フィールド

Goのスライスの定義で少しハマったこと

かなり初歩的な理解不足だったと思うのですが、忘れないために備忘録として残します。

## TL;DR
スライスの宣言だけと初期化は厳密には違い、nil sliceと空sliceの挙動が違うよという話

## 何をしてしまったのか
以下のようなことを実現するつもりでした。
– 特定のスライスとスライスを組み合わせて、一つの変数(hogeList)にしてレスポンスを返す
– 空だった場合は`{“List”:[]}`でjsonで返却する
echoを使った簡単なイメージは以下の通りです。
“`go
package main

import (
“net/http”

“github.com/labstack/echo/v4”
)

type (
Hoge struct {
ID int `json:”id”`
Name string `json:”name”`
}
HogeResponse struct {
HogeList []Hoge `json:”hogeList”`
}
)

func main() {
e := echo.New()
e.GET

Go言語でSlackのOAuth2認証を使ってみた

## はじめに

前回は魔法のスプレッドシートの更新通知を流してくれるSlackAppを作成しました。

https://qiita.com/piny940/items/2f0126ad5d71775b3628

一般にSlack Appを公開するにはOAuth2.0認証をできるようにする必要があります。今回はGo言語でOAuth認証のためのサーバーを(サクッと?)立てる方法を解説していこうと思います。

完成したコードはGithub上で公開しているので参考程度にどうぞ。

https://github.com/piny940/magic-spreadsheet-notifier

## 環境

Golang 1.21.1
labstack/echo 4.11.4
slack-go/slack 0.12.3

今回はechoを用いてサーバーを立てましたが、Ginとかを使っても大体同じようなコードになると思うので適宜読み替えてください。

## 手順

基本的に[ドキュメント](https://api.slack.com/authentication/oauth-v2)に従い実装