- 1. Goでファイル検索を行うサーバーを立てる
- 2. Go 言語で Mattermost Bot を作成する
- 3. 気象庁サイトから取得したJSON天気データを使って明日の天気をLINEで送信する機能を作ってみた
- 4. カジュアルゲームをEbitenで作る
- 5. GoでPadding Oracle Attackしたい!
- 6. Gopacketでパケットをキャプチャしたり生成したりしてみる
- 7. Go 1.18 で追加される debug/buildinfo
- 8. nvim-dapを利用したGo言語デバッグ
- 9. AxumでGoのチュートリアル「Writing Web Application」をやってみた
- 10. Go 言語で GitLab Bot の作成
- 11. goyacc で生成したコードに VSCode で Go to Definition できない場合の対処
- 12. Mattermost 403 エラー
- 13. KubernetesでCloud Spanner Emulatorを用いたローカル開発環境を構築する
- 14. Ubuntuに最新バージョンのGo言語をインストールする
- 15. ESP32 向けに TinyGo をセットアップする
- 16. 地形生成アルゴリズム 開発NG集
- 17. PulumiのGoでAWS App Runnerを構築する
- 18. Goでgorilla/mux使用時、URIの「/」→「//」にするとどうなるか
- 19. 軽量プログラミング言語経験者のGoとの付き合い方
- 20. pgGeocoderとpg_featureservで、簡易ジオコーダAPIを試してみる
Goでファイル検索を行うサーバーを立てる
# はじめに
この記事はGo Advent Calender23日目の記事です。
ファイルパスを検索し結果をJSONで返すREST APIサーバーを立てます。
ひとまず動きのイメージを掴むデモです。![out](https://user-images.githubusercontent.com/16408916/143503512-6e172a98-f973-4c80-b1dc-99ea0ede0a71.gif)
検索窓に検索キーワードを入力し、検索ボタンを押すとlocateコマンドを走らせて、結果をブラウザに表示します。
本記事は[locate-server](https://github.com/u1and0/locate-server) v3.1.0の時点のREADMEを補完するドキュメントを記事としました。
この記事を読むために必要な知識を挙げます。
* Go
* Gin(フレームワーク)
* ShellScript
* `locate`(検索エンジン)
* `updatedb`(データベース)
* HTML5
* JavaScript
* jQue
Go 言語で Mattermost Bot を作成する
法政大学情報科学部 2 年の阿部哲也です。
今回は大好きな Go 言語で Mattermost の BOT を作成してみました。# Mattermost とは
Mattermost (マターモスト) とは、オープンソースのセルフホスティング式のチャットツール。
自分で構築する Slack みたいな感じ!
# Mattermost を Docker compose で構築
docker-compose が導入されていることを確認します。
“`
>> docker-compose -v
docker-compose version 1.16.1, build 6d1ac21
“`git clone で mattermost をクローンします。
“`
git clone https://github.com/mattermost/mattermost-docker.git
“`起動します。
“`
cd mattermost-docker
docker-compose up -d
“`なにも設定を変えていない場合は、http://localhost
気象庁サイトから取得したJSON天気データを使って明日の天気をLINEで送信する機能を作ってみた
# はじめに
今年も終わりが近づいてきましたね。今年はじめの2月に気象庁の天気予報のAPIが公開されたと話題になりました。正確にいうとAPIではなく、気象庁の気象情報ページで使われるJSONデータを取得できるらしいです。以下が実際のURLです。340000のところを該当する場所のコードにすればその場所の天気情報を取得できます。
https://www.jma.go.jp/bosai/forecast/data/forecast/340000.json
今回は、このJSONデータを使って天気情報を取得し、LINEで送信するというところまで実装していこうと思います。個人的に雨が降るか降らないかだけが重要で尚且つ、雨の時だけ天気情報を知りたいと思っているので、そういった実装をgolangでしていこうと思います。
![LINE_capture_661874734.264569.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869962/6ec6f95b-875d-472e-a5d6-50292912b7af.j
カジュアルゲームをEbitenで作る
[Go Advent Calendar 2021](https://qiita.com/advent-calendar/2021/go) (カレンダー2) 22日目の記事です。
#はじめに
「気軽にゲームを作る」をテーマに、2DゲームエンジンEbitenで1つ作品を作ります。EbitenはシンプルなAPIが特徴の、クロスプラットフォームで動く2Dゲームライブラリです。
詳しい機能や学習に役立つサイトなどは、
公式サイト
https://ebiten.org/
や別記事 [production-ready なGo製2Dゲームライブラリ Ebiten の紹介 & リンク集](https://qiita.com/eihigh/items/1fd6077327f99245b807)(@eihighさん) にありますのでぜひご覧ください。
また、本カレンダー13日目にもEbitenの記事 [はじめてのゲームプログラミング(Ebiten)](https://zenn.dev/hokita/articles/66cc118b227ae3)(@hokita222さん)があります。#プ
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 mainimport (
“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 parserimport (
“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 mainimport (
“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のご紹介_