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

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

様々な言語での日時表記

#背景
日時表現は割とよく使うけど、言語で書き方統一されてなくて正直やり辛いな~~
似てるけどちょっと違う、が多くてよくミスってしまうな〜〜
と思ったので覚書程度にまとめます。

というわけで、いろんな言語で現在の年月日・時刻を「2021年10月02日 23時00分00秒」の形式で出力します。
とりあえずはJava, Ruby, Python3, Go, php。適宜更新します

#Java(8以上)
SE8から加わったDate and Time APIのおかげで実装がぐっと楽になりました。

“`Java:Main.java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
public static void main(String[] args) {
// SE8から加わったクラス。現在の日時を取得
LocalDateTime dateTime = LocalDateTime.now();

// 独自のフォーマットを準

元記事を表示

mtailで「文字列がマッチしない場合」という否定条件を作る

## 概要
golangの正規表現では文字列がマッチしない否定文(Negative look ahead and behind)がサポートされていない。

そもそも肯定でも否定でも、`(?`を使うと以下のようにエラーになる。

– error parsing regexp: invalid or unsupported Perl syntax: `(?=`
– error parsing regexp: invalid or unsupported Perl syntax: `(?!`

[mtail](https://github.com/google/mtail)というgolangで書かれたログ収集ツールを使っていて、「特定の文字列がマッチしない場合ログを収集する」という条件を付けたいのだが、当然これもサポートされていないし、mtailではgolangそのものを書けるわけではないので、正規表現以外の方法がない。
https://github.com/google/mtail/issues/18

これをどうにか解決した記録。

## 関連
https://qiita.com/Esf

元記事を表示

[Go] Consume Kafka Message

A example to consume kafka message with golang and confluent.

“`go
package main

import (
“log”

“github.com/confluentinc/confluent-kafka-go/kafka”
)

func main() {
c, err := kafka.NewConsumer(&kafka.ConfigMap{
“bootstrap.servers”: “localhost:9092”,
“group.id”: “myGroupId”,
})

if err != nil {
panic(err)
}

c.SubscribeTopics([]string{“quick-start-event”}, nil)

for {
msg, err := c.ReadMessage(-1)
if err == nil {
log.Println(string(msg.Value))
} else {
log.Fat

元記事を表示

nil slice と empty slice

sliceを扱う時、結果が入っていない空のsliceなのか、それともsliceはnilなのかを意識せずにテストを書いて、テストでこけたことがあった。

nil slice と empty slice の違いはこんな感じ。

“`go
var a, b, c, d, e []int

b = nil
c = []int(nil)
d = []int{}
e = make([]int, 0)

// nil slice –> a,b,c
// empty slice –> d,e
fmt.Printf(“%#v”, a) // []int(nil)
fmt.Printf(“%#v”, b) // []int(nil)
fmt.Printf(“%#v”, c) // []int(nil)
fmt.Printf(“%#v”, d) // []int{}
fmt.Printf(“%#v”, e) // []int{}
“`

https://play.golang.org/p/uUvGD5xJIMy

元記事を表示

Docker + GoアプリをVScode&Remote Containersでデバッグする方法

#はじめに
今までの開発でVScodeに備わっているデバック機能を使わずに見て見ぬふりをしていました。
たまたまFlutterの勉強を始めて触ったVScodeのデバック機能の素晴らしさに感動し、それを普段開発しているGoでも実現したいと思い立ったが吉日、めちゃくちゃ手こずりました。原因としてはDockerを使用していたためです。色々検証した結果、拡張機能のRemote Containersを使うことで実現できました。
ご覧になった方々の快適なGo開発ライフにお役立てください!!!!!!

# 前提条件
– Dockerを使って開発している
– Goを使用している
– Visual Studio Codeを使って開発している

# ゴール
– VScodeのRemote Container機能を使いDockerコンテナ内に入ることができること。
– 任意の場所にブレークポイントを設置(?)しその場所を実行したら止まること。
– ブレークポイント以前の変数などの情報が取得出ること。

# 実行環境
– Mac 11.5.2
– Docker Desktop 4.0.0
– Visual S

元記事を表示

GolangでPKI入門 – 5

#1.この記事の対象の人
– Golang で、属性※付きの証明書要求( [CSR](https://datatracker.ietf.org/doc/html/rfc2986) ) を作ってみたい人

※証明書の[ X.509 certificate extensions ](https://datatracker.ietf.org/doc/html/rfc5280#section-4.2)用途のための属性を付けます。
※以下、証明書要求は CSR と呼称します。

#2.概要
この記事の概要は以下の通りです。

**1. Golang で SubjectAltName と KeyUsage の属性をもつ CSR を生成**
**2. OpenSSL でSubjectAltName と KeyUsage の属性をもつ CSR を作成**
**3. 作成したそれぞれの CSR の中身を比較**
**4. おまけ– CSR の属性の ASN.1 データ構造の調査(詳しく知りたい人向け)**

#3.Golang で SubjectAltName と KeyUsage の属性をもつ

元記事を表示

Go言語とは

#Go言語とは
* 2009年にGoogleによって開発されたプログラミング言語
* IEEEの人気言語ランキング2021では8位
* 静的言語+動的言語のようなシンプルな文法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1532027/11dfc3cd-b85a-9242-59ea-52e9e988a814.png)

#Go言語の特徴
####静的型付け・コンパイル型の言語なので動作が速い
pythonやjavascript、phpなどの動的型付けの言語ではないため実行速度が非常に速い
例としてGCPでスピンアップ(起動時間)の比較があるがダントツで速い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1532027/25a34629-151c-2c52-eab5-d2593980690b.png)

ただ、型の記述を省略することも可能でコーディングは動的言語のように書きやすい印象

元記事を表示

Docker for windows でfyneを使ってwindowsアプリ用の環境構築

# 初めに
bokkuruといいます。
今回はgolangの勉強用にGUI用のパッケージのfyneを使ってみるための環境構築を行います。wsl2上のdockerで開発を行い、動作はメインosであるwindows上で実行を目指します。
ブラウザ上でのHello Worldの表示まで行います。
筆者がgolang初心者なのでgolangに関する初歩的なミスが多いですが許して下さい。

# 前提環境
OS : windows 10
wsl2のos : Ubuntu
docker : Docker desktop for windows
Fyne : https://github.com/fyne-io/fyne
golang : https://golang.org/
editor : VS code (Remote-Containers)

方針
dockerのlinux上でコンパイルしてwindows向けのファイルを作りたい

# Dockerの起動
“`DockerFile:Dockerfile
FROM golang:1.16.8
RUN apt update
RUN apt in

元記事を表示

GORMでMYSQLに接続してCRUD操作する

#はじめに
転職にあたりgo言語を使用することになったので勉強して2日くらいです。
書き方なんとなくだけど分かったので、文字読むより手を動かそうと思い、いきなりDB接続しようとしたらめちゃ時間かかった(当たり前)のでその備忘録です。
間違いや、よろしくない書き方などあったらぜひぜひコメントで教えていただけると嬉しいです。
とにかくDBつないで動かしてみることが目的なので実用的ではないかもしれません。

#環境
GOやMYSQLの環境構築は割愛。調べればたくさん出てきます。

OS: windows
go version: go1.17.1 windows/amd64
mysql version: Ver 8.0.26 for Win64 on x86_64 (MySQL Community Server – GPL)

#GORMとは
GO言語のORMライブラリです。公式がとても分かりやすい

https://gorm.io/ja_JP/

##ORMとは
`Object-relational mapping`の略です。
名前の通り、オブジェクト(オブジェクト指向におけるオブジェクト)

元記事を表示

ハウテレビジョン夏インターンが楽しかった!2021

# はじめに
2021年 9/13〜9/24 開催のハウテレビジョンさんのサマーインターンシップのレポートです。
はじめにメッセージとしては、
・2週間がっつり開発ができて非常に楽しい!
・開発に集中できる環境が整っている!
・技術者として成長できる!
です。

# 目次
[1.きっかけ](#1-きっかけ)
[2.選考](#2-選考)
[3.1day研修と事前課題](#3-事前研修)
[4.インターン本番](#4-インターン本番)
[5.開発以外の魅力](#5-開発以外の魅力)
[6.感想](#6-感想)

#1. きっかけ
ハウテレビジョンさんが運営する [外資就活ドットコム](https://gaishishukatsu.com) というサービスで募集を見つけました。
応募に至ったポイントは以下の通りです。
・東京(六本木)でのオフライン開催
・交通費&宿泊費 全支給
・報酬10万円(+優勝賞金10万円)
・同年代のハイレベルな方々とのチーム開発
・バックエンドの使用言語がGo (フロントならJavaScript等)
・実際に動いているサービス(外資就活ドットコム)をベースにした

元記事を表示

validatorのエラーフィールド名に構造体のフィールド名ではなくjsonタグ名をセットしたい

## この投稿で使用している言語、ライブラリのバージョン

* Go v1.17.1
* [github.com/go-playground/validator](https://github.com/go-playground/validator) v10.9.0

## やりたいこと

[github.com/go-playground/validator](https://github.com/go-playground/validator)で構造体をバリデーションした場合、
エラーの中には以下のように構造体のフィールド名が埋め込まれています。

“`go:main.go
package main

import (
“fmt”
“strings”

“github.com/go-playground/validator/v10″
)

type Person struct {
Name string `json:”name” validate:”required,max=100″`
Email string `json:”email” validate:”requ

元記事を表示

分岐もややこしい演算も無しの、クラス定義だけで書くFizzBuzz

## はじめに

プログラムに携わって一度もFizzBuzz書いたことないなと思ったので、サクッと書いてみました。
せっかくなので保守性高めるようなコードの書き方を意識して、分岐なしのコードをクラス表現を使って実現しています

## コード

golangのinterfaceクラスにより処理を分け、mapにより分岐を削除しました。
ポリモーフィズムがあって、mapのようなkeyから設定値を取り出せるものがある言語であれば、同様のコードが実現可能です

“`golang:main.go
package main

import “fmt”

//FizzBuzzのパターン分けをするための構造体
type FizzBuzz struct {
Fizz bool
Buzz bool
}

//パターン網羅する為の構造体生成関数
func NewFizz() FizzBuzz {
return FizzBuzz{Fizz: true, Buzz: false}
}
func NewBuzz() FizzBuzz {
return FizzBuzz{Fizz: false, Buzz:

元記事を表示

Go WebSocketを使ってみる

今回は Go言語 で WebSocket を使用してみたいと思います。

軽く感じをつかむだけなので、あまり手の込んだものは作りませんw

## やりたいこと

サーバー と クライアント で メッセージ を キャッチボール する。

・・・のを WebSocket を使ってやります。

~~これくらいなら ajax とかでいい感じもしますが、、、~~

## WebSocket とは?

下記の資料がわかりやすかったです。

理解した感じでざっくり説明すると、
Webのアクセスは、キャッチボールみたいな感じで

ブラウザ「〇〇のページをちょうだい」(要求)

サーバー「はいよ!」(応答)

で接続が切れてしまうのですが、

WebSocket を使用すると 電話のように常時つなぎっぱなしにできます。

利点としては、先ほどのキャッチボールを始める前に
いろいろな前処理がなくなるので応答が早くなります。

リアルタイム性を求めるものによく使われている感じですね。

##

元記事を表示

golangで動かして学ぶCognitoユーザプール、IDプール

# Cognitoをgolnagから操作してみる

イマイチ理解しきれてなかったので、ラッパーライブラリを作りつつ、勉強してみました。
元ネタはhttps://dev.classmethod.jp/articles/get-aws-temporary-security-credentials-with-cognito-id-pool-by-aws-cli
で、AWS CLIベースの記事だったのをgolangに書き起こしつつ理解するって形を取りました。

作ったラッパーは
https://gitlab.com/kuritayu/cognito
におきました。

## ユーザプール、IDプールの違い

1. ユーザプール: ユーザ情報、ログイン情報の管理(認証担当)
1. IDプール: ユーザに応じた一時クレデンシャルキーの発行(認可担当)

## パターン別のクレデンシャルキーの発行

1. 認証済・非認証に応じたクレデンシャルキーの発行(IAM Role)
1. ルールベースのクレデンシャルキーの発行
1. ユーザプールに設定したIAM Roleでクレデンシャルキーを発行

## 環境

元記事を表示

2022~2030年に学ぶべき未来のプログラミング言語3選

本記事は、[Eddy Goh](https://eddygte.medium.com/)氏による「[3 Future Programming Languages You Should Learn Between 2022 and 2030](https://betterprogramming.pub/3-future-programming-languages-you-should-learn-between-2022-and-2030-8a618a15eca6)」(2021年7月13日公開)の和訳を、著者の許可を得て掲載しているものです。

#2022~2030年に学ぶべき未来のプログラミング言語3選
>今後の世界を左右する可能性のあるプログラミング言語

![](https://miro.medium.com/max/630/0*K8FlUIxA-fmPj38z)
Programming Books. Source: [NeONBRAND from Unsplash](https://unsplash.com/photos/uEcSKKDB1pg)

テクノロジー市場で10年以上働

元記事を表示

【Golang】import したモジュール/パッケージのバージョン確認(外部モジュール情報を main から取得する)

> Go 言語(以下 Golang)のソースコードの `main` パッケージで、アプリが利用しているモジュール/外部パッケージのバージョンを取得したい。

[「”golang” import パッケージ モジュール バージョン 確認」でググって](https://www.google.com/search?q=%22golang%22+import+%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8+%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB+%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3+%E7%A2%BA%E8%AA%8D)も、`go get` するモジュールのバージョン指定しか出てこなかったので、自分のググラビリティとして。

## TS; DR (今北産業)

1. [runtime/debug](https://pkg.go.dev/runtime/debu

元記事を表示

Javaで飯食ってるエンジニアがGolangを学んでみる~Ginを使ってHelloWorld編~

今回は実際にローカルでGolangのフレームワークGinを用いて、ブラウザに「Hello World」を描画してみようじゃないかということで、
結構苦戦した結果、Hello Worldできたので、苦戦の証というか、はまりポイントを覚えている範囲で残しておこうと思います。

※結構雑になってしまってるので、適宜更新はするつもりではいますが、とりあえず自分がわかるので公開しちゃいます。

なおGolangについては、少なくとも弊社のプロダクトでは使われていない(と思う)し、周りにやっている人も(知る限り)聞いたことないので、完全独学です。
そのため、もがきあがいた結果なので、「もっとこうやったら楽なのに~」とかあったらコメントなどでご教示いただけるとありがたいです。

#ローカルの環境

– macOS Big sur11.6
– Safali 15.0
– Editor VSCode

※普段の仕事ではWindowsなのでマジで慣れてません(自宅にはWindowsのデスクトップとMacBook Airがあります)

#Hello worldまでの流れ

ざっくり、流れをメモっておきます。

元記事を表示

Docker で Go の開発環境を作る(Docker × Go × Mysql)

# やりたいこと
docker を使って go の開発環境を作る
ローカル環境で go の開発、実行ができるように docker で環境構築を行なっていきます。

# 作るもの
docker, docker-compose を使った go の開発環境
以下の環境をつくっていきます。
・ docker コンテナで go が動く
・ docker コンテナで mysql が動く
・ docker コンテナで phpadmin が動く(おまけ)

# やってき
## 今回作っていくものは以下の通りです。

“`
../
└── go-template
├── Dockerfile
├── docker-compose.yml
└── main.go
“`

### 1.Dockerfile の作成
go の動作環境を作るための Dockerfile です

“`ruby:Dockerfile
# ベースになる docker イメージを指定
FROM golang:1.17.1-alpine

# 作業ディレクトリの作成
RUN mkdir /go/src/ap

元記事を表示

VSCode + Remote Container + WSL2 Dockerで開発環境構築が捗る話

# 概要

VSCodeでDev Container使って開発環境作ると、OS環境汚さないしとても便利という話を聞いたので、周辺諸々調べてみたので、備忘録的に記事にまとめる。
環境はWindows10 pro。

# 経緯

Windows環境でDockerを使って開発環境作るのは昔から興味があったけど、特にコードを書くこともない人生だったので手を付けずにいた。
ただ、最近自宅IoTや電子工作周りでコードを書く機会が増えてきたのと、VSCode+Dev Containerがとても便利という話をTwitterで見かけたので、重い腰を上げてみた。
WSL2バックエンドのDockerもこの機会に設定。

# やったこと

## WSL2とDockerインストール
[こちらのサイト](https://dev.classmethod.jp/articles/docker-desktop-for-windows-on-wsl2/)の作業を手順通りにするだけ。
基本的にDockerは、WSL2バックエンドの設定がデフォルトみたい。
WSL2のディストリビューションはUbuntu20にしました。

#

元記事を表示

[Golang]GORMで論理削除を設定するときの注意

# はじめに
GORMの論理削除の設定にちょっとクセがあることが分かりました。

# やり方
GORMはdeleted_atカラムがあれば、自動で論理削除にすることが出来ます。
しかし、型の指定でtime.Timeにするとエラーが起きます。

### 修正前

“`go
type Presentation struct {
ID int `json:”id”`
Title string `json:”title”`
CreatedAt time.Time `json:”created_at”`
DeletedAt time.TIme `json:”deleted_at”`
}
“`

上記のように、“time.Time“型にしてしまうと、レコード作成時にデフォルトの値が入ってしまい、エラーが起きてしまいます。

### 修正後

“`go
type Presentation struct {
ID int `json:”id”`
Title

元記事を表示

OTHERカテゴリの最新記事