- 1. Your contents.
- 1.0.1. Golangでは暗黙的な型変換もあることを知ってた?
- 1.0.2. Gopherくんの動く壁紙を作ったwww
- 1.0.3. Golang, MySQL, nuxt.jsで動かしてみる。
- 1.0.4. 【Golang】Ginを使ってフラッシュメッセージを表示させる
- 1.0.5. マイコン操りたいのでtinygo環境構築とgoroutineしてみた
- 1.0.6. Golang + gorilla/mux + LambdaProxyIntegration + ServerlessFrameworkを動かすまで
- 1.0.7. Dockerでスクレイピング環境構築
- 1.0.8. GoでAPIを作る際の技術選定
- 1.0.9. Golang-文字数を数える方法,4バイト以上の絵文字もある
- 1.0.10. Golang同じ文字列を繰り返して連結する方法
- 1.0.11. Slack でタコピー風に会話する
- 1.0.12. レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話
- 1.0.13. go、パス
- 1.0.14. GoでHTML (+ CSS, JavaScript) を表示する
- 1.0.15. 【対処法】unable to open tcp connection with host ‘localhost:1433’: dial tcp [::1]:1433: connectex: No connection could be made because the target machine actively refused it.
- 1.0.16. GoのCLIでテキスト入力をVimとかでやりたかった件
- 1.0.17. 【Golang】”net” モジュールを使った静的リンクバイナリを Docker + scratch で使う際のビルドの注意【”net/http” “net/url” など】
Go1.18がでたのでコレクション操作とかいくつか触った記録
## [github.com/samber/lo](https://github.com/samber/lo) をつかったコレクション操作
“`go
package _goimport (
“github.com/samber/lo”
“github.com/stretchr/testify/assert”
“testing”
)func TestLodash(t *testing.T) {
type ArtistID int
type Artist struct {
ID ArtistID
Name string
Age int
}type ArtistMap = map[ArtistID]Artist
artists := []Artist{
{
ID: 1,
Name: “A”,
Age: 25,
},
{
ID: 2,
Name: “B”,
Age: 45,
},
{
ID: 3,
Name: “C”,
Age: 30,
}
validatorの *csfield タグはArray, Slice, Mapのlenを比較したい時につける
## この投稿で使用している言語、ライブラリのバージョン
* Go v1.17.7
* [github.com/go-playground/validator](https://github.com/go-playground/validator) v10.10.0## 疑問に思ったこと
validatorのタグには、`gtecsfield`と`gtefield`や、`ltcsfield`と`ltfield`といった`cs`付きとそうでないものがあります。
この違いは何か?
例えば `gtecsfield`/`gtefield`は以下のような説明があります。
| Tag | Description |
|:———–|:————|
| gtecsfield | Field Greater Than or Equal To Another Relative Field |
| gtefield | Field Greater Than or Equal To Another Field |この説明を読んで、ある構造体Aが別の構造体Bを持ってい
golang template
テンプレートの定義にはdefineを使う。
“`html
{{ define “TemplateName” }}
{{ template “child” }}
{{ end }}
“`
テンプレートの使用
“`html
{{ tempalte “TemplateName” }}{{ define “child” }}
HTML Text
{{ end }}
“`## 追記
ginのrouterでテンプレートを読み込むと
上記のやり方だと1つのファイルの内容しか反映されない。
解決方法は“`base.tmpl.html
{{ define “top” . }}
{{ end }}{{ define “bottom” .}}
{{ end }}
“`“`some.tmpl.html
{{ template “top”}}Your contents.
{{ template “bottom }}
“`一般的に使われてる命名
l
Golangでは暗黙的な型変換もあることを知ってた?
## 環境
“`bash
Go version: go1.17.8
“`## コード
下記のコードにあるように、
明示的に変換しないとエラーになるタイプ (`int`) と
変換せずにそのまま代入できるタイプ (`map[string]int`) があることがわかります。“`golang
package mainimport (
“fmt”
“runtime”
)type MyInt int
type MyMap map[string]intfunc main() {
fmt.Printf(“Go version: %s\n”, runtime.Version())var x MyInt
var y int
x = y // コンパイルエラー: cannot use y (type int) as type MyInt in assignmentvar m1 MyMap
var m2 map[string]int
m1 = m2 // OK
m2 = m1 // O
Gopherくんの動く壁紙を作ったwww
# 動く壁紙とは?
Windowsでゲームをプレイする方なら知っているかもしれませんが、[Wallpaper Engine](https://store.steampowered.com/app/431960/Wallpaper_Engine/?l=japanese)という壁紙を設定するアプリがあります。(Steamで300円程度)
このアプリでは、自分好みの壁紙をダウンロードしたり、自分で壁紙を作成することもできます。
そして壁紙として登録できるのは画像だけでなく、動画やUnityで作成したプログラムなんかもあります。
[Wallpaper Engineで動かせるプログラムをUnityで作る](https://qiita.com/mochi5420/items/010d5571c441f4bc6a4c)自分もこのWallpaper Engineで、コロコロ動くBB-8(スターウォーズに出てくるロボット)の壁紙を使ってます(かわいい)。
さて、そんなある日(?)[本物の golang を… 本物の Gopher を、お見せしますよ。](https://qiita.com/mat
Golang, MySQL, nuxt.jsで動かしてみる。
## Docker環境構築
– バックエンド側のコンテナ内で`go mod init {$MODULE_NAME}`し`go.mod`ファイルを作成する
– このファイルは直接さわらずに、コマンドを実行にて変更する
– `go get github.com/labstack/echo/v4`でEchoをインストールする
– [参考 / Gin Web Framework](https://github.com/gin-gonic/gin#installation)## Go(バックエンド)
– フレームワークはEchoを使ってみる
– RestAPIに適しているとのこと## Nuxt3(vue3:vite)
– Vueのフレームワーク
– tailwindを使う [参考](https://tailwindcss.com/docs/guides/nuxtjs)### Error: Unknown at rule @tailwind CSS
– vscode拡張機能の`PostCSS Language Support`をインストールする### Error
【Golang】Ginを使ってフラッシュメッセージを表示させる
# はじめに
Ginでフラッシュメッセージを実装する情報があまり見つからなかったため、備忘録として残します。
コードが冗長的だったり、良い書き方ではなかったりするかもしれませんが、ご了承いただければと思います。# フラッシュメッセージ機能の実装
フラッシュメッセージを表示させるために、Cookieに一時的に保存しすぐに削除することでリダイレクトされた時のみ表示するようにしています。“`golang:flash/flash.go
package flashimport (
“github.com/gin-gonic/gin”
)func SetFlash(c *gin.Context, status string, msg string) {
c.SetCookie(“Status”, status, 1, “/”, “localhost”, true, true)
c.SetCookie(“Msg”, msg, 1, “/”, “localhost”, true, true)
}“`
“Status“にはメッセージの種類(success,danger等
マイコン操りたいのでtinygo環境構築とgoroutineしてみた
# あらすじ
会社で使用している機器のGPIO機能をテストしようと思ったので環境構築して使ってみたの巻。# tinygoを入れる
https://tinygo.org/getting-started/install/windows/
これに従えばOK。
scoopを使わずにManual Installに従ったほうがシンプル。
好きなところに解凍してexeにpathを通す。# avrのツールを入れる
お手軽なのはArduino IDE内のavrdudeにPathを通す方法。
`C:\Program Files (x86)\Arduino\hardware\tools\avr\bin`
とかにあるはず。# その他
LLVMと本家goが必要といわれたらこれらもPathを通す。# コーディングする
今回使用するのはESP32くん。
tミリ秒で無限にLチカする関数を用意し、500msと300msでトグルするようにして呼び出す。
goキーワードを書き足すだけで以降の処理と並行して実行されるらしい。なんかすごい!“`golang:main.go
package mainim
Golang + gorilla/mux + LambdaProxyIntegration + ServerlessFrameworkを動かすまで
# 概要
タイトル通り、GolangアプリケーションをLambdaプロキシ統合で動かします## Lambdaプロキシ統合ってなに
ここに書いてあるhttps://docs.aws.amazon.com/ja_jp/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
これを使うとLambda関数を小分けにしなくても、アプリケーション側でルーティングを振り分ける従来の開発方法でサーバーレスなアプリケーションが作れる
## 必要なもの
・AWSアカウント
・ServerlessCLI
インストール、認証情報の設定が必要です公式ドキュメント
https://www.serverless.com/framework/docs/getting-started
## 実装
`sls create –template aws-go-mod –path go-test`
テンプレートから雛形を作ってもらいます
`go-test`の部分はお好きなプロジェクト名を入れてくださいこ
Dockerでスクレイピング環境構築
自分1人では、環境をサクッと構築しスクレイピングしていましたが、メンバー間で共有したいときに面倒だったのでDockerで再現しました。
GoではHTMLの操作に、Agoutiを使用。
HTML解析には、goqueryを使っています。# サンプルコード
“`:main.go
package mainimport (
“log”
“strings”“github.com/PuerkitoBio/goquery”
“github.com/sclevine/agouti”
)func main() {
log.Println(“処理開始…”)// ChromeDriver
driver := agouti.ChromeDriver(
agouti.ChromeOptions(“args”, []string{
“–headless”,
“–window-size=1280,800”,
}),
agouti.Debug,
)if err := driver.Start(); err != nil {
log.Fata
GoでAPIを作る際の技術選定
## 概要
GoでAPIを作ることになったので、ライブラリやアーキテクチャの検討をした際のメモ## Web framework
:star: Ginhttps://gin-gonic.com/
標準ライブラリの[net/http](https://pkg.go.dev/net/http)でもよかったけど、フレームワークを使って楽できるところはしたかった
その他にも[echo](https://github.com/labstack/echo)や[chi](https://github.com/go-chi/chi)など選択肢は豊富だが、2022/03時点でGinが最も人気が高そうで、触ってみて問題なさそうだったのでhttps://github.com/mingrammer/go-web-framework-stars
## API specification
:star: swaghttps://github.com/swaggo/swag
コード内のコメントからSwaggerドキュメントが生成でき、Swagger UIも使えて便利
複数のフレームワークをサポート
Golang-文字数を数える方法,4バイト以上の絵文字もある
## 背景
こちらの記事 [UTF-8 のテーブル(MySQL5.6)に竈門禰?豆子が格納できない問題を調べてみた](https://qiita.com/ykami/items/d45ec72f8a5ea8b3288d)がきっかけで、
`Golang`における絵文字の文字数を確認する方法を調査して見ました。ちなみに、`Golang` のソースコードや文字列リテラルは `UTF-8` が採用されています。
`UTF-8` は、英数字は 8bit で表現して、それ以外は 16,24,32bit で可変的に表現しています。
例えば、ひらがなカタカナ漢字の様な日本語は 2 byte のものが多いのですが、上記の記事にでもあった一部の異体字([wikipedia](https://ja.wikipedia.org/wiki/異体字セレクタ))は 4 byte だったりします。あと、? とかの絵文字も 4byte のものが多いのですが、
??? や ???? といった絵文字は複数の絵文字を組み合わせた絵文字で、 4byte 以上になったりします。## 確認用コード
Go
Golang同じ文字列を繰り返して連結する方法
## Golang での同じ文字列を繰り返して連結する方法
– 環境
“`bash
$ go version
go version go1.17.2 darwin/amd64
“`– 方法
“`golang
package mainimport (
“bytes”
“strings”
)func main() {
// repeat byte
bufBytes := []byte(“?”)
println(“repeat byte:” + string(bytes.Repeat(bufBytes, 3))) //???// repeat strings
str := “?”
println(“repeat strings:” + strings.Repeat(str, 3)) //???// repeat rune
// rune 型のスライスにはrepeat関数が用意されていないため、for 文を使う必要がある。
bufRunes := []rune(“?”)
for i := 0; i < 3; i++ { bufRune
Slack でタコピー風に会話する
「Slackでの文章が怖い」と言われたので何か改善できないかと思い、まずはメッセージを全てタコピー風にする CLI を Go で作成しました。(GitHub でスターをくれると喜びます。)
https://github.com/Code-Hex/takopi
## タコピー?
タコピーは「タコピーの原罪」という少年ジャンプ+で連載中の漫画のキャラクターです。「っピ」を語尾につけるのが特徴なので文章を柔らかく見せてくれるだろうと考え採用しました。
## CLI の作成
Go 有名な形態素解析ライブラリ [github.com/ikawaha/kagome](https://github.com/ikawaha/kagome) を利用しています。
文章を加工するためにいくつか工夫しました。
1. メッセージを正規化する
2. 正規化済みの文字列に対して形態素解析を行う
3. 置き換えたい内容が見つかれば置換する置き換えたいものは map として[定義](http
レシピ作家のレシピを検索できるトイアプリがちょいバズったので爆速でLINE Botを作った話
こんにちは、家庭では休日の料理担当をしている二児の父です。
山本ゆりさんやリュウジさんなど有名レシピ作家さんのレシピをよく参考にするのですが、ブログ記事、Instagram、Youtubeなど皆さん複数のチャネルにレシピを公開してて探しにくいなぁと常々思っていたため、チャネル横断でレシピを検索できる、制作期間わずか3日の[トイアプリ](https://couch-potato.vercel.app/yuri-yamamoto)を公開してTwitterでお知らせしました。
すると山本ゆりさんご本人がリアクションしてくださり(!)、フォロワー数100人ちょっとだった自分のツイートにいいね!が止まらない状況に。これに気を良くして、さらに**近所のスーパーで安くなってる食材を調べて、関連レシピを検索できる機能**を追加してLINE Botにしてみたよ、という話です。
 を表示する
# 問題
Go言語でサーバーを立ち上げてHTMLを表示させる際、cssとjsファイルをHTMLに適用させるのに少し時間がかかりました。
備忘録としてHTML + CSS + JavaScriptのページを表示する方法を記載していきます。# 解決方法
結論から言うと、go:embedを使用しました。
下記のテックブログを参考にして、静的ファイルを変数に格納 -> ファイルシステムを取得して読み込むという方法で課題を解決しました。https://future-architect.github.io/articles/20210208/
下記にコードを記載しますが、全てを記載すると記述が多くなるため省略してあります。
全コードが気になる方はgitを確認してください。
https://github.com/Makoto87/test_go_embedgoのバージョン
“`
go version go1.17.3 darwin/amd64
“`ディレクトリ構成
“`
.
├── go.mod
├── main.go
└── views
├── main.html
【対処法】unable to open tcp connection with host ‘localhost:1433’: dial tcp [::1]:1433: connectex: No connection could be made because the target machine actively refused it.
社内ツールの開発を試みてGoでSQLserverを扱っている公式チュートリアルを進めていたところ、タイトルのエラーに遭遇して少し苦戦しました。その対処法を記事にします。
[https://www.microsoft.com/en-us/sql-server/developer-get-started/go/windows/step/2.html](https://www.microsoft.com/en-us/sql-server/developer-get-started/go/windows/step/2.html)## TCPIPを無効から有効に切り替える

以下に対処法が書いてありましたが英語なので見逃してしまう方がいるかもと思い記事にしました。
[https://community.grafana.com/t/not-ab
GoのCLIでテキスト入力をVimとかでやりたかった件
# はじめに
CLIのTwitterクライアントとか作りたいなー って思った
なので、複数行のTweetをコマンドラインで入力するんだったら、Vimとか使いたいなーって思った## ググった
[GoでVimを開いて編集内容をパースする方法](https://qiita.com/lighttiger2505/items/d3b9ee9884c75a7819d8)
最高やん!## 結果
[kotaoue/go-eeditor](https://github.com/kotaoue/go-eeditor)を用意した“`Go
import (
“fmt”“github.com/kotaoue/go-eeditor”
)func main() {
editor := eeditor.NewEditor()
b, _ := editor.Open()
fmt.Println(string(b))
}
“`
みたいなコードで、Vimでテキスト編集した結果をbyteで受け取れる起動時のパラメータ変更すれば、Emacsも使える
“`
editor := eedito
【Golang】”net” モジュールを使った静的リンクバイナリを Docker + scratch で使う際のビルドの注意【”net/http” “net/url” など】
> Go 言語(以下 Golang)v1.16 以降で、”`net`” モジュールを使ったバイナリを Docker のマルチステージ・ビルドでコンパイルし、`scratch` イメージで使いたい。
例えば “`net/http`” や “`net/url`” パッケージなどを使って `HTTP GET` リクエストするものなど。しかし、静的リンクしないと `standard_init_linux.go:228: exec user process caused: no such file or directory` エラーが発生するし、静的リンクさせてもデータが取得できない。
**Go v1.16 + Docker v20.10 以降で動く情報**が欲しかったのですが、色々ググっても Go v1.**4** 時代の古い情報や、古い Golang と Docker のバージョンの組み合わせ情報しかありませんでした。あっても新旧混在の組み合わせだったりと、なかなか動かなかったので未来の自分のググラビリティとして。
## TL; DR (今北産業