Go関連のことを調べてみた2021年12月22日

Go関連のことを調べてみた2021年12月22日

GoでPadding Oracle Attackしたい!

「 [Applibot Advent Calendar 2021](https://qiita.com/advent-calendar/2021/applibot) 」 22日目の記事になります。
前日は @ref3000 さんの [Unity でサクッと機械学習を体験してみよう【ML-Agents】](https://qiita.com/ref3000/items/40a0915fbc4478b5cadb)という記事でした。

## はじめに
業務で暗号化に興味を持ってパディングオラクル攻撃という名前に惹かれたので今回はGo言語でパディングオラクル攻撃をやっていきます。

## AES CBCモードについて
今回のパディングオラクル攻撃をする対象の暗号文はAESのCBCモードを使用して暗号化しました。AESは平文をブロック長ごとに暗号化するブロック暗号で、ブロック長が128bit、鍵長が128/192/256bitの3種類です。

CBCモードは一つ前の暗号文ブロックと平文ブロックをXORとってから暗号化する方法で前のブロックに依存するため同じ平文であっても異なる暗号文になるため推測

元記事を表示

Gopacketでパケットをキャプチャしたり生成したりしてみる

この記事は[富士通クラウドテクノロジーズ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/fjct) 22日目の投稿です。

昨日は@kodakkuさんの「**[教師なし学習で周期表(金属)を分析してみる【主成分分析・R・Python】](https://qiita.com/kodakku/items/e082965d2792bc51e2f1)**」でした。
主成分分析することで、同族の元素が似たような性質をもっているということが可視化されてて面白かったです。
私はデータ分析については素人なのですが、主成分分析をするときにはこの記事を参考にしたいと思います!

## はじめに

こんにちは。FJCT21卒新入社員の@kswです。
10月に仮想ネットワークの運用・開発を行うチームに配属され、一人前のインフラエンジニアになるために日々奮闘しています。

今回は、一人前のインフラエンジニアの必須スキルの一つである(と私が勝手に思っている)「パケットの気持ちがわかる」を身に付けるため、Gopacketを使って実際にパケッ

元記事を表示

Go 1.18 で追加される debug/buildinfo

Go 1.18 で新しく追加される [`debug/buildinfo`](https://pkg.go.dev/debug/buildinfo@go1.18beta1) パッケージについて調べました。

※ 特に記載がない限り 2021 年 12 月 19 日時点の情報になります。

## 概要

https://pkg.go.dev/debug/buildinfo@go1.18beta1

従来からビルドに使用された Go のバージョンや依存パッケージの情報はバイナリに含まれており `go version -m` で出力できましたが内部パッケージとして実装されているため外部からは利用できませんでした。 [^1] [^2]
これらの機能を外部から利用できるようにしたのが `debug/buildinfo` です。

https://github.com/golang/go/issues/39301

[^1]: https://github.com/rsc/goversion
[^2]: https://knqyf263.hatenablog.com/entry/2021/02/12

元記事を表示

nvim-dapを利用したGo言語デバッグ

# はじめに
Go言語のデバッグどのようにしていますか?
printデバッグだったり、Delveを使ってCLIでやったり、IDEのデバッグ機能だったりかと思います。
私は、nvim-dapを利用して、Neovimでデバッグしているので、その紹介となります。

![intro.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218282/c75c5e82-1ed1-b1f2-9ee8-f3f737d71846.gif)

# 準備
下記プラグインを利用していきます。
– [nvim-dap](https://github.com/mfussenegger/nvim-dap)
– [nvim-dap-ui](https://github.com/rcarriga/nvim-dap-ui)
– [nvim-dap-go](https://github.com/leoluz/nvim-dap-go)
– [nvim-dap-virtual-text](https://github.com/theHamsta/n

元記事を表示

AxumでGoのチュートリアル「Writing Web Application」をやってみた

[フューチャーアドベントカレンダー](https://qiita.com/advent-calendar/2021/future)の22日目の記事です

# はじめに
私はプログラミング初心者ですが、ITエンジニアリングスキルを高めて手に職をつけたい!という気持ちがあります。

そこで、まずは社会で比較的需要の多い(のか?)Webバックエンド開発の基礎を習得したいと思いました。Webバックエンドフレームワークは星の数ほどあれど、それらに共通した要素は多いはずで、どれか一つにある程度習熟してしまえば、新たなフレームワークを学ぶのは容易になるはずです。

と考えると何でもいいような気がしたので、自分の好きな言語であるRustのWebフレームワーク[`Axum`](https://github.com/tokio-rs/axum)を選びました。ただ、`Axum`はかなり新しいフレームワークで、チュートリアルなどが見当たらないので、Goの[`net/http`](https://pkg.go.dev/net/http)のチュートリアル[Writing Web Application](http

元記事を表示

Go 言語で GitLab Bot の作成

書き途中です

# GitLab の Bot を Golang で作成

します

# 準備

以下の Github を参考にして、Bot を作成します。

https://github.com/xanzy/go-gitlab

“`
go get github.com/xanzy/go-gitlab
“`

# ソースコード

“`
package main

import (
“log”

“github.com/xanzy/go-gitlab”
)

func main() {
git, err := gitlab.NewClient(“-eo1D7ZVkyczkvTt4G7V”,gitlab.WithBaseURL(“http://192.168.202.129:9010/api/v4”))
if err != nil {
log.Fatalf(“Failed to create client: %v”, err)
}

// Create new project
p := &gitlab.CreateProjectOptions{
Name:

元記事を表示

goyacc で生成したコードに VSCode で Go to Definition できない場合の対処

下記のようなファイルを入力として

“`yacc:parser.go.y
%{
package parser

import (
“bytes”
“fmt”
“io”
“strconv”
“strings”
“unicode”
)

func DoSomething(s io.RuneScanner) (string, error) {

}

“`

goyacc を下記のように実行すると

“`winbatch
goyacc -o parser.go parser.go.y
“`

下記のような Go のコードが出力されますが

“`go:parser.go
// Code generated by goyacc -o parser.go parser.go.y. DO NOT EDIT.

//line parser.go.y:1

package parser

import __yyfmt__ “fmt”

//line parser.go.y:3

import (
“bytes”
“fmt”
“io”
“strconv”
“s

元記事を表示

Mattermost 403 エラー

# Go 言語で Mattermost BOT を作成する

Mattermost と Go 言語で Bot を作ろうとして、リクエストを投げると 403 エラーが出力された。

# ソースコード

“`
package main

import (
“fmt”
“net/http”
“net/http/httputil”
“bytes”
“os”
“encoding/json”
)

type BODY struct {
channel_id string
message string
}

func HTTPPost(mes string) {

requestBody := &BODY{
channel_id: “1ngefhpjojyabd9fc7n8twt3xh”,
message: “hello”,
}

//リクエストbodyをjson.Marshal関数を使って作成する
jsonString, err := json.Marshal(requestBody)
if err != nil {
fmt.Println(err)

元記事を表示

KubernetesでCloud Spanner Emulatorを用いたローカル開発環境を構築する

この投稿はグレンジ [Advent Calendar 2021][advent-calendar]の21日目の記事です。

[Cloud Spanner Emulator][cloud-spanner-emulator]を利用して、Kubernetes上でローカル開発環境を構築します。

appコンテナからspannerコンテナへ接続するサンプルを作ってみます。
環境は[Helm][helm]を使って構築していきます。

## イメージ作成

Go、gcloud、[spanner-cli][spanner-cli]を利用できるようにします。

“`dockerfile:build/app/Dockerfile
FROM golang:1.17.5-buster

# https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=ja
RUN echo “deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/

元記事を表示

Ubuntuに最新バージョンのGo言語をインストールする

#はじめに
UbuntuにaptでGo言語をインストールしようとすると、少し古いバージョンがインストールされてしまうので、最新バージョンがインストールされるようにします。

#環境
Ubuntu 20.04.3 LTS

#Goをインストール
以下のコマンドを実行すると、Goのバージョンは1.13でAPTのソースはUbuntuのサイトをさしています。

“`
$ apt info golang
Package: golang
Version: 2:1.13~1ubuntu2
Priority: optional
Section: devel
Source: golang-defaults
Origin: Ubuntu
Maintainer: Ubuntu Developers
Original-Maintainer: Go Compiler Team
Bugs: https://bugs.launchpad.net/ubuntu/

元記事を表示

ESP32 向けに TinyGo をセットアップする

このページには、 ESP32 + TinyGo を使ってマイコンプログラミングを始めるための情報を記載します。
ESP32 を搭載したボードは多数ありますが、ボード固有の話よりもまずは ESP32 全般の環境を立ち上げます。
あと、試してないですが、 ESP8266 および ESP32-C もこのページに従って環境立ち上げできるはずです。

## TinyGo とは

マイコンや WASM などの Small Places 向けの Go Compiler です。
ここでは Go の文法でマイコン開発ができるもの、という程度の認識でよいです。

* [TinyGo – Go on Microcontrollers and WASM](https://tinygo.org/)

このページは 2021/11/18 にリリースされた TinyGo 0.21 を対象としています。

## ESP32 とは

WiFi + Bluetooth を内蔵するマイクロコントローラーです。
Tensilica の Xtensa LX6 マイクロプロセッサを採用し、デュアルコアとシングルコア版があります。

元記事を表示

地形生成アルゴリズム 開発NG集

### まえがき (FUN関係者の方々に向けて)

このNG集は [FUN Advent Calendar 2021](https://adventar.org/calendars/6526) に投稿させていただく記事です。
公立はこだて未来大学(FUN)の先輩の方々には、入学前という立場にも関わらず様々な形でお世話になっています。。同級生もやさしい&面白い人ばかりで、改めてFUNを選んでよかった…と感銘を受けています。皆さんこれからもどうかよろしくお願いします。

# 概要

自分は近頃、地形生成アルゴリズムの実装にハマっています。
先日にはこんなものをリリースしました↓

https://github.com/TadaTeruki/RDGL

(よければ★スターしてね!)

使い方の解説などは[**この記事**](https://qiita.com/TadaTeruki/items/a78a8e463e4edfda1884)に載せているので、興味のある方ぜひ見てみてください
タイトルは若干誇張してますが、、ご愛嬌。

### NG集??

この**RDGL**という代物ですが、

元記事を表示

PulumiのGoでAWS App Runnerを構築する

## Pulumiってなに?

以前書いた記事の通り、インフラのプロビジョニングツールです。

https://qiita.com/runeleaf/items/0e2b69bae38164aa826a

今回はGoでAWSのApp Runner環境を構築してみます。

前回からだいぶ間が空いているのですが、変わったことといえばPulumi 3.0がリリースされたこと、AWSネイティブプロバイダーを発表したことでしょうか。

https://www.infoq.com/jp/news/2021/11/pulumi-aws-native-provider/

なにがどう変わったのか細かく見るのもアレなので今回はPulumiでApp Runnerの環境をつくりたいと思います。

ちなみにまだRubyには対応していない。

## 準備

macOS Big Sur

“`
$ sw_vers
ProductName: macOS
ProductVersion: 11.6
“`

“`
$ pulumi version
v3.20.0
“`

AWS環境変数設定

“`

元記事を表示

Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか

## Goでサーバを立ち上げる
のは簡単です。
ルートに、URIと関数をセットで登録し、起動すればOKです。
パッケージは、`gorilla/mux`を使っています。
URIをいじった際のメソッド(`GET`、`POST`)を追いたいので、標準エラー出力とレスポンスにメソッドの中身を出力しています。
なぜ標準エラー出力かのツッコミは、一旦置いといてください。

“`go
import (
“net/http”
“github.com/gorilla/mux”
)

func main() {
r := mux.NewRouter()
r.HandleFunc(“/api/out”, out)
http.ListenAndServe(“:8080”, r)
}

func out(w http.ResponseWriter, r *http.Request) {
method := r.Method
println(method)
w.Write([]byte(method))
}
“`

## 正しいURIでアクセス
してみます。上記ソースを起動し、API Clie

元記事を表示

軽量プログラミング言語経験者のGoとの付き合い方

# はじめに
[朝日新聞社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/asahi)の第20日目を担当する[M研](https://cl.asahi.com/)の松原です。
宜しくお願いします。

普段はTypeScriptやPythonを触っており、Goを書き始めた当初は「あれもない」「これもない」という物足りなさに満ちていました。
3ヶ月くらいGoと向き合って考え方が変わってきたので、軽量プログラミング言語と比較したGoの特徴や、見てきたドキュメントについてまとめたいと思います。

# 想定読者
– 一通りのチュートリアルは終えた人
– クラスベースのオブジェクト指向言語に触れたことがある人
– Go言語なんかしっくりこないな〜って人

# 「Goに入ってはGoに従え」
– Goにないものは結構あるので、まずはそれをちゃんと理解する
– 物事にはトレードオフがつきもの、Goはシンプルさと変更の少なさに重きをおいている
– 「これがないのはイケてない!プンプン」と思うものもあるかもしれないが

元記事を表示

pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる

# はじめに

先日(2021/12/04)の [FOSS4G Japan 2021 Online](https://www.osgeo.jp/events/foss4g-2021/foss4g-2021-japan-online/foss4g-japan-2021-online-core-day) イベントでは、「[pgGeocoderのご紹介](https://www.osgeo.jp/events/foss4g-2021/foss4g-2021-japan-online/foss4g-japan-2021-online-core-day#sponsor5)」というタイトルで発表させて頂きました。

_FOSS4G Japan 2021 Online – pgGeocoderのご紹介_