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

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

[Go言語] Golang + AWS Lambdaを実行するとfork/exec /var/task/main: exec format error: PathError

## 概要
Serverless FrameworkやSAMやbuildしたものをそのまま上げてみるなどして、AWS LambdaにGoをデプロイするとどのケースでも以下のエラーがCloudWatchに出力されていた。筆者はM1 Macを使っていることで詰まった。

“`
fork/exec /var/task/main: exec format error: PathError
null
“`

## 解決策

### 一般的な解決法
go buildがなんかしらおかしいはずです。以下のようにgo buildはしましたか?
生成したバイナリのディレクトリ位置も確認してみたください。

“`
$ GOOS=linux go build .
“`

### M1 Macユーザー
go build時にLambdaで指定しているアーキテクチャに合わせていますか?
デフォルトはx86_64のため設定を変更をしていなければ以下のようにamd64でbuildするようにする

“`
$ GOARCH=amd64 GOOS=linux go build .
“`

元記事を表示

リモートワークで固定IPするために: VPNの認証のためにRADIUSサーバーをつくる

ピリカでは開発環境へのアクセスを保護するための一環としてIP制限をしていますが、ピリカという会社は元々リモートで仕事をしている人が多く、またオフィスのIPアドレスは動的IPの時代が続いていました。

そこで、各自のIPアドレスを固定化するためにVPNやプロキシサーバーを構築していますが、その認証の管理をできるだけGoogle Workspaceの権限を元にやりたいと考えました。

この記事では、VPNやプロキシの認証をするための前段として、Google Workspaceの情報と連動した独自の認証基盤をどのように作ったかを紹介します。

## 全体の設計

このVPN/認証プロキシシステムの設計はこのようになっています。

![20210922102253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609129/03a9115c-ac92-e7f7-0b72-67adddca76bd.png)

Google Workspaceの生のパスワードをシステムが受け取って認証するのは、APIが存在しないし

元記事を表示

Lambda, Amazon Textractを利用してS3に保存した画像からテキストを抽出する(Golang)

# はじめに

S3に画像を追加すると、自動的にその画像内のテキストを抽出し、テキストファイルとして保存する、というシステムを[Lambda](https://aws.amazon.com/jp/lambda/)・[Amazon Textract](https://aws.amazon.com/jp/textract/)・Golangを利用して作りました。

作成手順を共有します。

### 完成イメージ

![ocr.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455240/80ef8a6e-a645-99ad-8d4e-ab1f62fb8046.png)

### Textractとは

[Amazon Textract](https://aws.amazon.com/jp/textract/)はAWSが提供するクラウドOCRサービスです。詳しくは以下の記事を参照してください。

https://qiita.com/windows222/items/07c3683c052d6e2b

元記事を表示

VSCode + Remote ContainerでGoの開発環境を作ったけどimportできなくて悩んだ話

# 概要
[前回の記事](https://qiita.com/ka-zuu/items/3144780ee528815e7557)でVSCodeでDockerのDevContainerをサクッと起動して、OS環境を汚さない快適開発環境を作れるようになったけど、Goでサンプル実装しようとすると、どうにもうまく行かない。
具体的には、自分の作ったpackageをimportできない。
情報を色々検索したところ、Goの推奨する標準構成が色々変わったことに、インターネッツの記事が追いついていなく、新旧の情報が錯綜しているためだった。
結果的に解決できたので、その備忘録を書いておく。

# 結論
結論から書くと、こちらのサイトを最初から参考にして環境作っておけばよかった・・・という話・・・
[Go 脱初心者への道](https://zenn.dev/shellyln/articles/b2992891f8f3f9381025#1.-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E4%BD%9C%E6%88%90%E3%83%BB%E3%83%91%E

元記事を表示

Go言語でhttpリクエスト結果が403の解決方法の一例

# はじめに

カクヨムのサイトをGo言語の`net/http`のライブラリーを使用していてデータ取得していたけど
ある時から、403と表示するようになった。curlコマンドでは取得できるのでなんでかわからなかったけど
可決方法が分かったのでやり方を記載する。

# 失敗時のやり方

以下のプログラムを組んだ時に403と返す。

“`go:main.go
package main

import (
“fmt”
“io/ioutil”
“net/http”
)

func main() {
url = “https://kakuyomu.jp/”
web1(url)
}

func web1(url string) {

resp, _ := http.Get(url)
defer resp.Body.Close()

byteArray, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(byteArray))
}
“`

実行すると以下の通りになる。

“`:log

4</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>nginx</div> <div class='tag-cloud-link'>golang,</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/karosuwindam/items/6c06674ae3645e0f41f2'>元記事を表示</a></div> <h3 id="outline__6"><a href='https://qiita.com/gs1068/items/ed1637cf57400ed6ca21'>Golang Dockerマルチステージビルドで環境構築</a></h3> <blockquote><p>#結論<br /> Dockerマルチステージビルドを使用して可能な限りコンテナイメージを小さくしてみました。結果は以下の通りです。正直数十MBくらいになることを期待していましたが、意外と小さくならなかったです。もっと改善点があると思いますが、今回は開発中のアプリが問題なく動作するまでにとどめます。</p> <p>“`<br /> $ docker images<br /> REPOSITORY TAG IMAGE ID CREATED SIZE<br /> go conventional ed4436ad7be4 35 minutes ago 955MB<br /> go use-multi 40c0d5f36f4c 17 hours ago 548MB</p> <p>“`</p> <p># ゴール<br /> – Dockerマルチステージビルドを使用してDockerコンテナを立ち上げる。<br /> – 現在開発中のGoファイルの動作に問題がないこと。<br /> – `マルチステージビルド使用前よりもコンテナイメージが小さくなること。`</p> <p># 実行環境<br /> – Mac 11.5.</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>Docker</div> <div class='tag-cloud-link'>dockerfile</div> <div class='tag-cloud-link'>golang,Go</div> <div class='tag-cloud-link'>docker-compose</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/gs1068/items/ed1637cf57400ed6ca21'>元記事を表示</a></div> <h3 id="outline__7"><a href='https://qiita.com/QT21-004-2_HCB/items/2fadc7cb42abc36af19b'>[Go]型変換チートシート(int, string, float, time, etc)</a></h3> <blockquote><p>自分用に型変換をまとめました。随時更新していきます。<br /> 足りない情報があればコメントをいただきたいです。</p> <p>### intの変換 </p> <p>“`go<br /> // int → int64<br /> int64(int)</p> <p>// int → string<br /> strconv.Itoa(int)</p> <p>// int64 → int<br /> int(int64)</p> <p>// int64 → string<br /> strconv.FormatInt(int64, 10)</p> <p>// string → int<br /> strconv.Atoi(string)<br /> “`<br /> ### floatの変換<br /> “`go<br /> // float → string<br /> v := fmt.Sprintf(“%.2f”,3.1425)<br /> // “3.14”</p> <p>// float →float(四捨五入)<br /> v :=3.1415<br /> fmt.Println(math.Round(v*100) / 100) // 3.14<br /> fmt.Println(math.Round(v*1000) / 1000) // 3.141<br /> “`<br /> ### Time型の変換<br /> “`go<br /> // int → time<br /> ti</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>プログラミング</div> <div class='tag-cloud-link'>チートシート</div> <div class='tag-cloud-link'>golang,Go</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/QT21-004-2_HCB/items/2fadc7cb42abc36af19b'>元記事を表示</a></div> <h3 id="outline__8"><a href='https://qiita.com/inoriko711/items/ee9f28b266f4ce492464'>様々な言語での日時表記</a></h3> <blockquote><p>#背景<br /> 日時表現は割とよく使うけど、言語で書き方統一されてなくて正直やり辛いな~~<br /> 似てるけどちょっと違う、が多くてよくミスってしまうな〜〜<br /> と思ったので覚書程度にまとめます。</p> <p>というわけで、いろんな言語で現在の年月日・時刻を「2021年10月02日 23時00分00秒」の形式で出力します。<br /> とりあえずはJava, Ruby, Python3, Go, php。適宜更新します</p> <p>#Java(8以上)<br /> SE8から加わったDate and Time APIのおかげで実装がぐっと楽になりました。</p> <p>“`Java:Main.java<br /> import java.time.LocalDateTime;<br /> import java.time.format.DateTimeFormatter;</p> <p>public class Main {<br /> public static void main(String[] args) {<br /> // SE8から加わったクラス。現在の日時を取得<br /> LocalDateTime dateTime = LocalDateTime.now();</p> <p> // 独自のフォーマットを準</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Java</div> <div class='tag-cloud-link'>Ruby</div> <div class='tag-cloud-link'>Python</div> <div class='tag-cloud-link'>PHP</div> <div class='tag-cloud-link'>Go</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/inoriko711/items/ee9f28b266f4ce492464'>元記事を表示</a></div> <h3 id="outline__9"><a href='https://qiita.com/Esfahan/items/b22c2b026dfab454ca96'>mtailで「文字列がマッチしない場合」という否定条件を作る</a></h3> <blockquote><p>## 概要<br /> golangの正規表現では文字列がマッチしない否定文(Negative look ahead and behind)がサポートされていない。</p> <p>そもそも肯定でも否定でも、`(?`を使うと以下のようにエラーになる。</p> <p>– error parsing regexp: invalid or unsupported Perl syntax: `(?=`<br /> – error parsing regexp: invalid or unsupported Perl syntax: `(?!`</p> <p>[mtail](https://github.com/google/mtail)というgolangで書かれたログ収集ツールを使っていて、「特定の文字列がマッチしない場合ログを収集する」という条件を付けたいのだが、当然これもサポートされていないし、mtailではgolangそのものを書けるわけではないので、正規表現以外の方法がない。<br /> https://github.com/google/mtail/issues/18</p> <p>これをどうにか解決した記録。</p> <p>## 関連<br /> https://qiita.com/Esf</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>監視</div> <div class='tag-cloud-link'>prometheus</div> <div class='tag-cloud-link'>mtail</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/Esfahan/items/b22c2b026dfab454ca96'>元記事を表示</a></div> <h3 id="outline__10"><a href='https://qiita.com/zhupeijun/items/614eec7673757e158007'>[Go] Consume Kafka Message</a></h3> <blockquote><p>A example to consume kafka message with golang and confluent.</p> <p>“`go<br /> package main</p> <p>import (<br /> “log”</p> <p> “github.com/confluentinc/confluent-kafka-go/kafka”<br /> )</p> <p>func main() {<br /> c, err := kafka.NewConsumer(&kafka.ConfigMap{<br /> “bootstrap.servers”: “localhost:9092”,<br /> “group.id”: “myGroupId”,<br /> })</p> <p> if err != nil {<br /> panic(err)<br /> }</p> <p> c.SubscribeTopics([]string{“quick-start-event”}, nil)</p> <p> for {<br /> msg, err := c.ReadMessage(-1)<br /> if err == nil {<br /> log.Println(string(msg.Value))<br /> } else {<br /> log.Fat</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>Kafka</div> <div class='tag-cloud-link'>consume</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/zhupeijun/items/614eec7673757e158007'>元記事を表示</a></div> <h3 id="outline__11"><a href='https://qiita.com/demouth/items/105280d99f39b750ccc8'>nil slice と empty slice</a></h3> <blockquote><p>sliceを扱う時、結果が入っていない空のsliceなのか、それともsliceはnilなのかを意識せずにテストを書いて、テストでこけたことがあった。</p> <p>nil slice と empty slice の違いはこんな感じ。</p> <p>“`go<br /> var a, b, c, d, e []int</p> <p>b = nil<br /> c = []int(nil)<br /> d = []int{}<br /> e = make([]int, 0)</p> <p>// nil slice –> a,b,c<br /> // empty slice –> d,e<br /> fmt.Printf(“%#v”, a) // []int(nil)<br /> fmt.Printf(“%#v”, b) // []int(nil)<br /> fmt.Printf(“%#v”, c) // []int(nil)<br /> fmt.Printf(“%#v”, d) // []int{}<br /> fmt.Printf(“%#v”, e) // []int{}<br /> “`</p> <p>https://play.golang.org/p/uUvGD5xJIMy </p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/demouth/items/105280d99f39b750ccc8'>元記事を表示</a></div> <h3 id="outline__12"><a href='https://qiita.com/gs1068/items/1d89d4a9bed070782298'>Docker + GoアプリをVScode&Remote Containersでデバッグする方法</a></h3> <blockquote><p>#はじめに<br /> 今までの開発でVScodeに備わっているデバック機能を使わずに見て見ぬふりをしていました。<br /> たまたまFlutterの勉強を始めて触ったVScodeのデバック機能の素晴らしさに感動し、それを普段開発しているGoでも実現したいと思い立ったが吉日、めちゃくちゃ手こずりました。原因としてはDockerを使用していたためです。色々検証した結果、拡張機能のRemote Containersを使うことで実現できました。<br /> ご覧になった方々の快適なGo開発ライフにお役立てください!!!!!!</p> <p># 前提条件<br /> – Dockerを使って開発している<br /> – Goを使用している<br /> – Visual Studio Codeを使って開発している</p> <p># ゴール<br /> – VScodeのRemote Container機能を使いDockerコンテナ内に入ることができること。<br /> – 任意の場所にブレークポイントを設置(?)しその場所を実行したら止まること。<br /> – ブレークポイント以前の変数などの情報が取得出ること。</p> <p># 実行環境<br /> – Mac 11.5.2<br /> – Docker Desktop 4.0.0<br /> – Visual S</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>debug</div> <div class='tag-cloud-link'>Docker</div> <div class='tag-cloud-link'>VSCode</div> <div class='tag-cloud-link'>RemoteContainer</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/gs1068/items/1d89d4a9bed070782298'>元記事を表示</a></div> <h3 id="outline__13"><a href='https://qiita.com/tardevnull/items/c707855e85e5fb944fe1'>GolangでPKI入門 – 5</a></h3> <blockquote><p>#1.この記事の対象の人<br /> – Golang で、属性※付きの証明書要求( [CSR](https://datatracker.ietf.org/doc/html/rfc2986) ) を作ってみたい人</p> <p>※証明書の[ X.509 certificate extensions ](https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)用途のための属性を付けます。<br /> ※以下、証明書要求は CSR と呼称します。</p> <p>#2.概要<br /> この記事の概要は以下の通りです。</p> <p>**1. Golang で SubjectAltName と KeyUsage の属性をもつ CSR を生成**<br /> **2. OpenSSL でSubjectAltName と KeyUsage の属性をもつ CSR を作成**<br /> **3. 作成したそれぞれの CSR の中身を比較**<br /> **4. おまけ– CSR の属性の ASN.1 データ構造の調査(詳しく知りたい人向け)**</p> <p>#3.Golang で SubjectAltName と KeyUsage の属性をもつ </p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>openssl</div> <div class='tag-cloud-link'>pki</div> <div class='tag-cloud-link'>ASN.1</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/tardevnull/items/c707855e85e5fb944fe1'>元記事を表示</a></div> <h3 id="outline__14"><a href='https://qiita.com/Gyabi/items/ca4237bd5aa0a4e3d20f'>Go言語とは</a></h3> <blockquote><p>#Go言語とは<br /> 今回は少しだけGoを触った覚書として「こんな言語があって、流行っていて、こんな特徴があって、なんで、どんなところがおすすめか」という部分を纏める。</p> <p>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1532027/11dfc3cd-b85a-9242-59ea-52e9e988a814.png)</p> <p>まずGo言語の基本的な情報は以下</p> <p>* 2009年にGoogleによって開発されたプログラミング言語<br /> * IEEEの人気言語ランキング2021では8位<br /> * Cの高速性とCにはない生産性を兼ね備えた言語<br /> * 現在はバックエンドの開発などでphp、rubyに代わって使用されている<br /> * 有名なサービスだとDocker、Dropbox、メルカリなど</p> <p>#Go言語の特徴<br /> ####静的型付け・コンパイル型の言語<br /> pythonやjavascript、phpなどの動的型付けの言語ではないため実行速度が非常に速い<br /> 例としてGCPでスピンアップ(起動時間)の比較があるがダントツで速い<br /> ![image</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/Gyabi/items/ca4237bd5aa0a4e3d20f'>元記事を表示</a></div> <h3 id="outline__15"><a href='https://qiita.com/bokkuru/items/e91644b3a351cb3a038d'>Docker for windows でfyneを使ってwindowsアプリ用の環境構築</a></h3> <blockquote><p># 初めに<br /> bokkuruといいます。<br /> 今回はgolangの勉強用にGUI用のパッケージのfyneを使ってみるための環境構築を行います。wsl2上のdockerで開発を行い、動作はメインosであるwindows上で実行を目指します。<br /> ブラウザ上でのHello Worldの表示まで行います。<br /> 筆者がgolang初心者なのでgolangに関する初歩的なミスが多いですが許して下さい。</p> <p># 前提環境<br /> OS : windows 10<br /> wsl2のos : Ubuntu<br /> docker : Docker desktop for windows<br /> Fyne : https://github.com/fyne-io/fyne<br /> golang : https://golang.org/<br /> editor : VS code (Remote-Containers)</p> <p>方針<br /> dockerのlinux上でコンパイルしてwindows向けのファイルを作りたい</p> <p># Dockerの起動<br /> “`DockerFile:Dockerfile<br /> FROM golang:1.16.8<br /> RUN apt update<br /> RUN apt in</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>Docker</div> <div class='tag-cloud-link'>Fyne</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/bokkuru/items/e91644b3a351cb3a038d'>元記事を表示</a></div> <h3 id="outline__16"><a href='https://qiita.com/kty000/items/5d22c62b975674041dae'>GORMでMYSQLに接続してCRUD操作する</a></h3> <blockquote><p>#はじめに<br /> 転職にあたりgo言語を使用することになったので勉強して2日くらいです。<br /> 書き方なんとなくだけど分かったので、文字読むより手を動かそうと思い、いきなりDB接続しようとしたらめちゃ時間かかった(当たり前)のでその備忘録です。<br /> 間違いや、よろしくない書き方などあったらぜひぜひコメントで教えていただけると嬉しいです。<br /> とにかくDBつないで動かしてみることが目的なので実用的ではないかもしれません。</p> <p>#環境<br /> GOやMYSQLの環境構築は割愛。調べればたくさん出てきます。</p> <p>OS: windows<br /> go version: go1.17.1 windows/amd64<br /> mysql version: Ver 8.0.26 for Win64 on x86_64 (MySQL Community Server – GPL)</p> <p>#GORMとは<br /> GO言語のORMライブラリです。公式がとても分かりやすい</p> <p>https://gorm.io/ja_JP/</p> <p>##ORMとは<br /> `Object-relational mapping`の略です。<br /> 名前の通り、オブジェクト(オブジェクト指向におけるオブジェクト)</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>Windows</div> <div class='tag-cloud-link'>MySQL</div> <div class='tag-cloud-link'>初心者</div> <div class='tag-cloud-link'>GORM</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/kty000/items/5d22c62b975674041dae'>元記事を表示</a></div> <h3 id="outline__17"><a href='https://qiita.com/kyo_sen/items/4515de7514c9209f7212'>ハウテレビジョン夏インターンが楽しかった!2021</a></h3> <blockquote><p># はじめに<br /> 2021年 9/13〜9/24 開催のハウテレビジョンさんのサマーインターンシップのレポートです。<br /> はじめにメッセージとしては、<br /> ・2週間がっつり開発ができて非常に楽しい!<br /> ・開発に集中できる環境が整っている!<br /> ・技術者として成長できる!<br /> です。</p> <p># 目次<br /> [1.きっかけ](#1-きっかけ)<br /> [2.選考](#2-選考)<br /> [3.1day研修と事前課題](#3-事前研修)<br /> [4.インターン本番](#4-インターン本番)<br /> [5.開発以外の魅力](#5-開発以外の魅力)<br /> [6.感想](#6-感想)</p> <p>#1. きっかけ<br /> ハウテレビジョンさんが運営する [外資就活ドットコム](https://gaishishukatsu.com) というサービスで募集を見つけました。<br /> 応募に至ったポイントは以下の通りです。<br /> ・東京(六本木)でのオフライン開催<br /> ・交通費&宿泊費 全支給<br /> ・報酬10万円(+優勝賞金10万円)<br /> ・同年代のハイレベルな方々とのチーム開発<br /> ・バックエンドの使用言語がGo (フロントならJavaScript等)<br /> ・実際に動いているサービス(外資就活ドットコム)をベースにした</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>インターン</div> <div class='tag-cloud-link'>クリーンアーキテクチャ</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/kyo_sen/items/4515de7514c9209f7212'>元記事を表示</a></div> <h3 id="outline__18"><a href='https://qiita.com/geekduck/items/06a150c44fee06786be4'>validatorのエラーフィールド名に構造体のフィールド名ではなくjsonタグ名をセットしたい</a></h3> <blockquote><p>## この投稿で使用している言語、ライブラリのバージョン</p> <p>* Go v1.17.1<br /> * [github.com/go-playground/validator](https://github.com/go-playground/validator) v10.9.0</p> <p>## やりたいこと</p> <p>[github.com/go-playground/validator](https://github.com/go-playground/validator)で構造体をバリデーションした場合、<br /> エラーの中には以下のように構造体のフィールド名が埋め込まれています。</p> <p>“`go:main.go<br /> package main</p> <p>import (<br /> “fmt”<br /> “strings”</p> <p> “github.com/go-playground/validator/v10″<br /> )</p> <p>type Person struct {<br /> Name string `json:”name” validate:”required,max=100″`<br /> Email string `json:”email” validate:”requ</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/geekduck/items/06a150c44fee06786be4'>元記事を表示</a></div> <h3 id="outline__19"><a href='https://qiita.com/developer-kikikaikai/items/11ca259665bc751f0236'>分岐もややこしい演算も無しの、クラス定義だけで書くFizzBuzz</a></h3> <blockquote><p>## はじめに</p> <p>プログラムに携わって一度もFizzBuzz書いたことないなと思ったので、サクッと書いてみました。<br /> せっかくなので保守性高めるようなコードの書き方を意識して、分岐なしのコードをクラス表現を使って実現しています</p> <p>## コード</p> <p>golangのinterfaceクラスにより処理を分け、mapにより分岐を削除しました。<br /> ポリモーフィズムがあって、mapのようなkeyから設定値を取り出せるものがある言語 ~~であれば~~ はもちろん、無い言語でも配列をうまく扱うなどの工夫により、同様のコードが実現可能です</p> <p>“`golang:main.go<br /> package main</p> <p>import “fmt”</p> <p>//FizzBuzzのパターン分けをするための構造体<br /> type FizzBuzz struct {<br /> Fizz bool<br /> Buzz bool<br /> }</p> <p>//パターン網羅する為の構造体生成関数<br /> func NewFizz() FizzBuzz {<br /> return FizzBuzz{Fizz: true, Buzz: false}<br /> }<br /> func NewBuzz() FizzBuzz { </p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> <div class='tag-cloud-link'>FizzBuzz</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/developer-kikikaikai/items/11ca259665bc751f0236'>元記事を表示</a></div> <h3 id="outline__20"><a href='https://qiita.com/hiro_nico/items/db6cb98916fdf3e8c4cc'>Go WebSocketを使ってみる</a></h3> <blockquote><p>今回は Go言語 で WebSocket を使用してみたいと思います。</p> <p>軽く感じをつかむだけなので、あまり手の込んだものは作りませんw</p> <p>## やりたいこと</p> <p>サーバー と クライアント で メッセージ を キャッチボール する。</p> <p>・・・のを WebSocket を使ってやります。</p> <p>~~これくらいなら ajax とかでいい感じもしますが、、、~~</p> <p>## WebSocket とは?</p> <p>下記の資料がわかりやすかったです。</p> <p><iframe title="WebSocketのキホン" src="https://www.slideshare.net/slideshow/embed_code/key/4AJ83lDhgL6aYI" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> </p> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/You_Kinjoh/websocket-10621887" title="WebSocketのキホン" target="_blank">WebSocketのキホン</a> </strong> from <strong><a href="https://www.slideshare.net/You_Kinjoh" target="_blank">You_Kinjoh</a></strong> </div> <p>理解した感じでざっくり説明すると、<br /> Webのアクセスは、キャッチボールみたいな感じで</p> <p>ブラウザ「〇〇のページをちょうだい」(要求)</p> <p>サーバー「はいよ!」(応答)</p> <p>で接続が切れてしまうのですが、</p> <p>WebSocket を使用すると 電話のように常時つなぎっぱなしにできます。</p> <p>利点としては、先ほどのキャッチボールを始める前に<br /> いろいろな前処理がなくなるので応答が早くなります。</p> <p>リアルタイム性を求めるものによく使われている感じですね。</p> <p>## </p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>Go</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/hiro_nico/items/db6cb98916fdf3e8c4cc'>元記事を表示</a></div> </div> </section> <!-- 記事下シェアボタン --> <aside> <ul class="socialList"> <li class="socialList__item"><a class="socialList__link icon-facebook" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fmiofactor.com%2F2021%2F10%2F05%2Fpost-13294%2F&t=Go%E9%96%A2%E9%80%A3%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%81%9F2021%E5%B9%B410%E6%9C%8805%E6%97%A5" target="_blank" title="Facebookで共有"></a></li><li class="socialList__item"><a class="socialList__link icon-twitter" href="http://twitter.com/intent/tweet?text=Go%E9%96%A2%E9%80%A3%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%81%9F2021%E5%B9%B410%E6%9C%8805%E6%97%A5&https%3A%2F%2Fmiofactor.com%2F2021%2F10%2F05%2Fpost-13294%2F&url=https%3A%2F%2Fmiofactor.com%2F2021%2F10%2F05%2Fpost-13294%2F" target="_blank" title="Twitterで共有"></a></li><li class="socialList__item"><a class="socialList__link icon-line" href="http://line.naver.jp/R/msg/text/?Go%E9%96%A2%E9%80%A3%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%81%9F2021%E5%B9%B410%E6%9C%8805%E6%97%A5%0D%0Ahttps%3A%2F%2Fmiofactor.com%2F2021%2F10%2F05%2Fpost-13294%2F" target="_blank" title="LINEで送る"></a></li></ul> </aside> <!-- /記事下シェアボタン --> <!-- 記事下エリア[widget] --> <aside class="widgetPost widgetPost-bottom"><aside class="widget widget-post"><h2 class="heading heading-primary">タグ</h2><div class="tagcloud"><a href="https://miofactor.com/tag/%e3%81%9d%e3%81%ae%e4%bb%96/" class="tag-cloud-link tag-link-13 tag-link-position-1" style="font-size: 8pt;" aria-label="その他 (1個の項目)">その他</a></div> </aside></aside> <!-- /記事下エリア[widget] --> <!-- 関連記事 --> <aside class="related"><h2 class="heading heading-primary">関連する記事</h2><ul class="related__list"> <li class="related__item"> <a class="related__imgLink" href="https://miofactor.com/2024/08/14/post-35914/" title="Rails関連のことを調べてみた"> <img src="https://miofactor.com/wp-content/uploads/2019/10/rails-150x150.png" alt="Rails関連のことを調べてみた" width="150" height="150" > </a> <h3 class="related__title"> <a href="https://miofactor.com/2024/08/14/post-35914/">Rails関連のことを調べてみた</a> <span class="icon-calendar">2024.08.14</span> </h3> <p class="related__contents">目次 1. Ruby on Rails 7.2の主要な新機能・機能追加・変更点2. CodeMirror6を用いたHTMLエディターの導入3. cla[…]</p> </li> <li class="related__item"> <a class="related__imgLink" href="https://miofactor.com/2022/06/10/post-19770/" title="Go関連のことを調べてみた2022年06月10日"> <img src="https://miofactor.com/wp-content/uploads/2019/10/go-150x150.png" alt="Go関連のことを調べてみた2022年06月10日" width="150" height="150" > </a> <h3 class="related__title"> <a href="https://miofactor.com/2022/06/10/post-19770/">Go関連のことを調べてみた2022年06月10日</a> <span class="icon-calendar">2022.06.10</span> </h3> <p class="related__contents">目次 0.0.1. 【Golang】fmt.Errorfとerrors.Newの違い0.0.2. Go の rune 型を試してみる0.0.3. Go[…]</p> </li> <li class="related__item"> <a class="related__imgLink" href="https://miofactor.com/2023/10/07/post-28193/" title="Ruby関連のことを調べてみた2023年10月07日"> <img src="https://miofactor.com/wp-content/uploads/2019/10/ruby-150x150.png" alt="Ruby関連のことを調べてみた2023年10月07日" width="150" height="150" > </a> <h3 class="related__title"> <a href="https://miofactor.com/2023/10/07/post-28193/">Ruby関連のことを調べてみた2023年10月07日</a> <span class="icon-calendar">2023.10.07</span> </h3> <p class="related__contents">目次 1. Python と Java と Go と Node.js と PHP と Rupy のサポート状況について (2023.10)2. 【Ra[…]</p> </li> </ul></aside> <!-- /関連記事 --> <!-- コメント --> <!-- /コメント --> <!-- PVカウンター --> <!-- /PVカウンター --> </main> <!-- /l-main --> <!-- l-sidebar --> <div class="l-sidebar"> <aside class="widget"> <div class="searchBox"> <form class="searchBox__form" method="get" target="_top" action="https://miofactor.com/" > <input class="searchBox__input" type="text" maxlength="50" name="s" placeholder="記事検索"><button class="searchBox__submit icon-search" type="submit" value="search"> </button> </form> </div></aside><aside class="widget"><h2 class="heading heading-widget">Category</h2> <ul> <li class="cat-item cat-item-1"><a href="https://miofactor.com/category/other/">OTHER</a> </li> </ul> </aside><aside class="widget"><h2 class="heading heading-widget">Back number</h2> <ul> <li><a href='https://miofactor.com/2024/09/'>2024年9月</a></li> <li><a href='https://miofactor.com/2024/08/'>2024年8月</a></li> <li><a href='https://miofactor.com/2024/07/'>2024年7月</a></li> <li><a href='https://miofactor.com/2024/06/'>2024年6月</a></li> <li><a href='https://miofactor.com/2024/05/'>2024年5月</a></li> <li><a href='https://miofactor.com/2024/04/'>2024年4月</a></li> <li><a href='https://miofactor.com/2024/03/'>2024年3月</a></li> <li><a href='https://miofactor.com/2024/02/'>2024年2月</a></li> <li><a href='https://miofactor.com/2024/01/'>2024年1月</a></li> <li><a href='https://miofactor.com/2023/12/'>2023年12月</a></li> <li><a href='https://miofactor.com/2023/11/'>2023年11月</a></li> <li><a href='https://miofactor.com/2023/10/'>2023年10月</a></li> <li><a href='https://miofactor.com/2023/09/'>2023年9月</a></li> <li><a href='https://miofactor.com/2023/08/'>2023年8月</a></li> <li><a href='https://miofactor.com/2023/07/'>2023年7月</a></li> <li><a href='https://miofactor.com/2023/04/'>2023年4月</a></li> <li><a href='https://miofactor.com/2023/03/'>2023年3月</a></li> <li><a href='https://miofactor.com/2023/02/'>2023年2月</a></li> <li><a href='https://miofactor.com/2023/01/'>2023年1月</a></li> <li><a href='https://miofactor.com/2022/12/'>2022年12月</a></li> <li><a href='https://miofactor.com/2022/11/'>2022年11月</a></li> <li><a href='https://miofactor.com/2022/10/'>2022年10月</a></li> <li><a href='https://miofactor.com/2022/09/'>2022年9月</a></li> <li><a href='https://miofactor.com/2022/08/'>2022年8月</a></li> <li><a href='https://miofactor.com/2022/07/'>2022年7月</a></li> <li><a href='https://miofactor.com/2022/06/'>2022年6月</a></li> <li><a href='https://miofactor.com/2022/05/'>2022年5月</a></li> <li><a href='https://miofactor.com/2022/04/'>2022年4月</a></li> <li><a href='https://miofactor.com/2022/03/'>2022年3月</a></li> <li><a href='https://miofactor.com/2022/02/'>2022年2月</a></li> <li><a href='https://miofactor.com/2022/01/'>2022年1月</a></li> <li><a href='https://miofactor.com/2021/12/'>2021年12月</a></li> <li><a href='https://miofactor.com/2021/11/'>2021年11月</a></li> <li><a href='https://miofactor.com/2021/10/'>2021年10月</a></li> <li><a href='https://miofactor.com/2021/09/'>2021年9月</a></li> <li><a href='https://miofactor.com/2021/08/'>2021年8月</a></li> <li><a href='https://miofactor.com/2021/07/'>2021年7月</a></li> <li><a href='https://miofactor.com/2021/06/'>2021年6月</a></li> <li><a href='https://miofactor.com/2021/05/'>2021年5月</a></li> <li><a href='https://miofactor.com/2021/04/'>2021年4月</a></li> <li><a href='https://miofactor.com/2021/03/'>2021年3月</a></li> <li><a href='https://miofactor.com/2021/02/'>2021年2月</a></li> <li><a href='https://miofactor.com/2021/01/'>2021年1月</a></li> <li><a href='https://miofactor.com/2020/12/'>2020年12月</a></li> <li><a href='https://miofactor.com/2020/11/'>2020年11月</a></li> <li><a href='https://miofactor.com/2020/10/'>2020年10月</a></li> <li><a href='https://miofactor.com/2020/09/'>2020年9月</a></li> <li><a href='https://miofactor.com/2020/08/'>2020年8月</a></li> <li><a href='https://miofactor.com/2020/07/'>2020年7月</a></li> <li><a href='https://miofactor.com/2020/06/'>2020年6月</a></li> <li><a href='https://miofactor.com/2020/05/'>2020年5月</a></li> <li><a href='https://miofactor.com/2020/04/'>2020年4月</a></li> <li><a href='https://miofactor.com/2020/03/'>2020年3月</a></li> <li><a href='https://miofactor.com/2020/02/'>2020年2月</a></li> <li><a href='https://miofactor.com/2020/01/'>2020年1月</a></li> <li><a href='https://miofactor.com/2019/12/'>2019年12月</a></li> <li><a href='https://miofactor.com/2019/11/'>2019年11月</a></li> <li><a href='https://miofactor.com/2019/10/'>2019年10月</a></li> </ul> </aside> </div> <!-- /l-sidebar --> </div> <!-- /l-wrapper --> <div class="categoryBox"> <div class="container"> <h2 class="heading heading-primary"> <span class="heading__bg u-txtShdw bgc-darkgray">OTHER</span>カテゴリの最新記事 </h2> <ul class="categoryBox__list"> <li class="categoryBox__item"> <div class="eyecatch eyecatch-archive"> <a href="https://miofactor.com/2024/09/19/post-36890/"> <img src="https://miofactor.com/wp-content/uploads/2019/10/js-554x410.png" alt="JavaScript関連のことを調べてみた" width="554" height="410" > </a> </div> <ul class="dateList dateList-archive"> <li class="dateList__item icon-calendar">2024.09.19</li> </ul> <h2 class="heading heading-archive "> <a class="hc-darkgray" href="https://miofactor.com/2024/09/19/post-36890/">JavaScript関連のことを調べてみた</a> </h2> </li> <li class="categoryBox__item"> <div class="eyecatch eyecatch-archive"> <a href="https://miofactor.com/2024/09/19/post-36891/"> <img src="https://miofactor.com/wp-content/uploads/2019/10/java.jpg" alt="JAVA関連のことを調べてみた" width="540" height="270" > </a> </div> <ul class="dateList dateList-archive"> <li class="dateList__item icon-calendar">2024.09.19</li> </ul> <h2 class="heading heading-archive "> <a class="hc-darkgray" href="https://miofactor.com/2024/09/19/post-36891/">JAVA関連のことを調べてみた</a> </h2> </li> <li class="categoryBox__item"> <div class="eyecatch eyecatch-archive"> <a href="https://miofactor.com/2024/09/19/post-36894/"> <img src="https://miofactor.com/wp-content/uploads/2019/10/ios-554x410.png" alt="iOS関連のことを調べてみた" width="554" height="410" > </a> </div> <ul class="dateList dateList-archive"> <li class="dateList__item icon-calendar">2024.09.19</li> </ul> <h2 class="heading heading-archive "> <a class="hc-darkgray" href="https://miofactor.com/2024/09/19/post-36894/">iOS関連のことを調べてみた</a> </h2> </li> <li class="categoryBox__item"> <div class="eyecatch eyecatch-archive"> <a href="https://miofactor.com/2024/09/19/post-36888/"> <img src="https://miofactor.com/wp-content/uploads/2019/10/rails-725x410.png" alt="Rails関連のことを調べてみた" width="725" height="410" > </a> </div> <ul class="dateList dateList-archive"> <li class="dateList__item icon-calendar">2024.09.19</li> </ul> <h2 class="heading heading-archive "> <a class="hc-darkgray" href="https://miofactor.com/2024/09/19/post-36888/">Rails関連のことを調べてみた</a> </h2> </li> <li class="categoryBox__item"> <div class="eyecatch eyecatch-archive"> <a href="https://miofactor.com/2024/09/19/post-36884/"> <img src="https://miofactor.com/wp-content/uploads/2019/10/lambda.png" alt="Lambda関連のことを調べてみた" width="360" height="230" > </a> </div> <ul class="dateList dateList-archive"> <li class="dateList__item icon-calendar">2024.09.19</li> </ul> <h2 class="heading heading-archive "> <a class="hc-darkgray" href="https://miofactor.com/2024/09/19/post-36884/">Lambda関連のことを調べてみた</a> </h2> </li> <li class="categoryBox__item"> <div class="eyecatch eyecatch-archive"> <a href="https://miofactor.com/2024/09/19/post-36886/"> <img src="https://miofactor.com/wp-content/uploads/2019/10/python-640x410.png" alt="Python関連のことを調べてみた" width="640" height="410" > </a> </div> <ul class="dateList dateList-archive"> <li class="dateList__item icon-calendar">2024.09.19</li> </ul> <h2 class="heading heading-archive "> <a class="hc-darkgray" href="https://miofactor.com/2024/09/19/post-36886/">Python関連のことを調べてみた</a> </h2> </li> </ul> </div> </div> <!-- schema --> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Article ", "mainEntityOfPage":{ "@type": "WebPage", "@id": "https://miofactor.com/2021/10/05/post-13294/" }, "headline": "Go関連のことを調べてみた2021年10月05日", "image": { "@type": "ImageObject", "url": "https://miofactor.com/wp-content/uploads/2019/10/python-640x410.png", "height": "410", "width": "640" }, "datePublished": "2021-10-05T11:49:19+0900", "dateModified": "2021-10-05T11:49:19+0900", "author": { "@type": "Person", "name": "editor" }, "publisher": { "@type": "Organization", "name": "f@ctor", "logo": { "@type": "ImageObject", "url": "", "width": "", "height":"" } }, "description": "目次 1. [Go言語] Golang + AWS Lambdaを実行するとfork/exec /var/task/main: exec format error: PathError2. リモートワークで固定IPするために: VPNの認証のためにRADIUSサーバーをつくる3. Lambda, Amazon Textractを利用してS3に保存した画像からテキストを抽出する(Golang)4. […]" } </script> <!-- /schema --> <!--l-footer--> <footer class="l-footer"> <div class="container"> <div class="pagetop u-txtShdw"><a class="pagetop__link" href="#top">Back to Top</a></div> <div class="widgetFoot"> <div class="widgetFoot__contents"> </div> <div class="widgetFoot__contents"> <aside class="widget widget-foot"><h2 class="heading heading-footer">タグ</h2><div class="tagcloud"><a href="https://miofactor.com/tag/%e3%81%9d%e3%81%ae%e4%bb%96/" class="tag-cloud-link tag-link-13 tag-link-position-1" style="font-size: 8pt;" aria-label="その他 (1個の項目)">その他</a></div> </aside> </div> <div class="widgetFoot__contents"> </div> </div> <div class="copySns "> <div class="copySns__copy"> © Copyright 2024 <a class="copySns__copyLink" href="https://miofactor.com">f@ctor</a>. <span class="copySns__copyInfo u-none"> f@ctor by <a class="copySns__copyLink" href="http://fit-jp.com/" target="_blank">FIT-Web Create</a>. Powered by <a class="copySns__copyLink" href="https://wordpress.org/" target="_blank">WordPress</a>. </span> </div> </div> </div> </footer> <!-- /l-footer --> <script type="text/javascript" src="https://miofactor.com/wp-includes/js/comment-reply.min.js?ver=6.4.1" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script> function toggle__search(){ extra__search.className="l-extra"; extra__menu.className="l-extraNone"; menuNavi__search.className = "menuNavi__link menuNavi__link-current icon-search "; menuNavi__menu.className = "menuNavi__link icon-menu"; } function toggle__menu(){ extra__search.className="l-extraNone"; extra__menu.className="l-extra"; menuNavi__search.className = "menuNavi__link icon-search"; menuNavi__menu.className = "menuNavi__link menuNavi__link-current icon-menu"; } </script><script>Array.prototype.forEach.call(document.getElementsByClassName("css-async"),function(e){e.rel = "stylesheet"});</script> </body> </html>