Go関連のことを調べてみた2020年11月26日

Go関連のことを調べてみた2020年11月26日

LeetCodeに毎日挑戦してみた 27. Remove Element(Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 9問目(問題27)

#### 27. Remove Element

– 問題内容(日本語訳)

> 配列*nums*と値*valを指定して*、その値のすべてのインスタンスを[**インプレース**](https://en.wikipedia.org/wiki/In-place_algorithm)

元記事を表示

docker、Golangでtomlを読み込む

#概要
dockerコンテナでgolangを動かしtomlを読み込んで標準フォーマットで出力する。

#ファイル構成
今回はdockerを使ってコンテナ上で動かしますので以下のファイル構成で行うこととします。

“`
goTest
  ├docker-compose.yml
  ├Dockerfile
  └src
   ├main.go
   ├config
   │  └testConfig.toml
   └tomlexec
      ├tomlexec.go
      └tomlexec_test.go
“`

#登場ファイル
主な登場ファイルはdockerファイルを除けば難しい事はなく、以下の4ファイルになります。
・main.go
・testConfig.toml
・tomlexec.go
・tomlexec_test.go

各ファイルの設定を見ていきましょう。

###docker-compose.yml
“`docker-compose.yml
version: ‘3.7’
services:
#golangの設定
app:
build:

元記事を表示

GoのEchoでオリジン間リソース共有の問題を解決

# やりたいこと
フロント側の `http://localhost:8080/` からバックエンド側の `http://localhost:8080/` を呼び出したい
しかし以下のエラーがフロント側で出ていたので、これを解決したい

“`
Access to XMLHttpRequest at ‘http://localhost:8000’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`

オリジン管理ソース共有に関してはこの記事では解説しませんが、 [こちらの記事](https://qiita.com/att55/items/2154a8aad8bf1409db2b) がわかりやすかったです

## 環境情報
– vue
– 2.6
– go
– 1.15
– echoをサーバーとして使用

# 解決方法

元記事を表示

[競プロ]Goの標準入力をまとめる

##はじめに
ある日Paizaにハマったので、Goの標準入力についてまとめておく。
##1つのデータの入力
“`
package main

import “fmt”

func main() {
var s string
fmt.Scan(&s)
fmt.Println(s)
}
“`
##1行のデータの入力
“`
package main

import (
“bufio”
“fmt”
“os”
)

func main() {
reader := bufio.NewReader(os.Stdin)
s, _ := reader.ReadString(‘\n’)
fmt.Println(s)
}
“`
##n行のデータの入力(1行目にデータ数)
“`
package main

import (
“bufio”
“fmt”
“os”
“strconv”
“strings”
)

func main() {
reader := bufio.NewReader(os.Stdin)
s, _ := reader.ReadString(‘\n’

元記事を表示

golangで先週の〇〇曜日をtime.Timeで取得するコード

“`golang
type Weekday struct {
Now time.Time
Loc *time.Location
}

func (w Weekday) LastWeekOf(weekday time.Weekday) time.Time {
levellingOffset := int(w.Now.Weekday())
weekDiff := 7-(int(weekday))

return time.
Date(w.Now.Year(), w.Now.Month(), w.Now.Day(), 0, 0, 0, 0, w.Loc).
AddDate(0, 0, -levellingOffset).
AddDate(0, 0, -weekDiff)
}
“`

こう使う

“`go
package main

import (
“fmt”
“time”
)

func main() {
now := time.Date(2020, 11, 27, 0, 0, 0, 0, time.UTC)
fmt.Println(now.Year

元記事を表示

細かいことは置いといて、とりあえずProtocolBuffersを触ってみたい時の覚書

* タイトルの通り、自分が試した方法をまとめておく
* ProtocolBuffersとはなんぞや?に関しては公式とか色んな方がネットに情報上げてくれてるので割愛

# 環境構築

* ubuntu18.04
* Go1.14
* ディレクトリ構成

/home/user/
└── go/
   ├── bin/
   ├── pkg/
   └── src/
      ├── go.mod
      ├── go.sum
      ├── example.go
      ├── example.proto
      └── pb/
         └── (protoファイルのコンパイル後のファイルをここに置く)


まずprotocのインストール([ダウンロード先](https://github.com/protocolbuffers/protobuf/releases/))

“`bash:/home/user/
# protocのzipファイルをwget
$ wget https://github.com/protocolbuffers/protobuf/r

元記事を表示

WindowsでのGo開発環境構築

社内で、[A Tour of Go](https://tour.golang.org/welcome/1)を使ってGoの勉強会をしているので、学んだことをメモしておく。
まとめ記事は[こちら](https://qiita.com/eyuta/private/77ac58e4d9141898c733)。

初回はWindowsでGoの開発環境を整える。
本当は[A Tour of Go](https://tour.golang.org/welcome/1)上で開発をしたかったが、Web上では補完効かなかったため、急遽vscodeでの開発に切り替えた。

### 前提
– vscodeインストール済み

### 手順
1. [こちら](https://golang.org/doc/install)から、Goをインストールする
2. vscodeを起動
– Goをインストールする前にvscodeを起動していた場合、vscodeのterminalに環境変数が反映されないので、vscodeを再起動する必要がある
3. vscodeに[Goの拡張](https://marketplace.

元記事を表示

社内Go勉強会まとめ

## はじめに
社内の有志で、Go言語をキャッチアップするため、1日30分位使って[A Tour of Go](https://tour.golang.org/welcome/1)を進めてみた。
その時の内容を残しておく。
## A Tour of Go
### #1
– [WindowsでのGo開発環境構築](https://qiita.com/eyuta/private/afcb4f7bc194f0209f47)

元記事を表示

LeetCodeに毎日挑戦してみた26. Remove Duplicates from Sorted Array (Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 8問目(問題26)

#### 26. Remove Duplicates from Sorted Array

– 問題内容(日本語訳)

> 並べ替えられた配列*numsを指定して*、各要素が1*回*だけ表示され、新しい長さを返すように、重複[**をインプレース**](https://en.wik

元記事を表示

Client-goでLabelSelectorを使って指定したラベルのPodのみを抽出したい

## やりかた
– metav1.ListOptionsの中で定義する
– LabelSelector以外にもいろいろある

## 該当部分
“`golang
pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{
LabelSelector: “app=vamdemic111aaa-app”,
})
“`

## 全体
“`golang
package main

import (
“context”
“encoding/json”
“fmt”
metav1 “k8s.io/apimachinery/pkg/apis/meta/v1”
“k8s.io/client-go/kubernetes”
“k8s.io/client-go/tools/clientcmd”
“log”
“os”
“path/filepath”
)

func main() {

元記事を表示

GitHub ActionsでGoアプリをGoogle App Engineにデプロイする

# TL;DR
GitHub ActionsでGoアプリをGoogle App Engineにデプロイするには色々な方法が存在していたようだが,現在はGoogleの提供するgoogle-github-actions/setup-gcloudと言うActionを使うのが良いらしい.
https://github.com/google-github-actions/setup-gcloud

# Secretsの設定
GCP_PROJECT_IDにGCPのプロジェクトIDを設定する.
GCP_SA_KEYにGCPのサービスアカウントの鍵を設定する.サービスアカウントはデフォルトのもので良い.別サービスから移行する場合は忘れずに過去の鍵を削除しておく.

# workflowファイル
“`.github/workflows/deploy.yml
name: “Deploy”

on:
push:
branches:
– master

jobs:
deploy:

runs-on: ubuntu-latest

steps:
– nam

元記事を表示

GoのnilスライスはFirestoreだとnullになるから気をつける

## 問題

GoでFirestoreのドキュメントにデータを書き込んでいて、配列を期待するフィールドに何故かnullが入っていて不思議になった。
データの型としても

“`go
type Fuga struct {
Hoge []string `firestore:”hoge”`
}
“`

だし、スライスに何も入ってなかったらFirestore側には空配列入って終わりでしょって思ってた。

## スライスのゼロ値はnil

https://godoc.org/cloud.google.com/go/firestore#DocumentRef.Create の以下の文章を見るに、Firestoreはあらゆる型の `nil` を `null` に扱うらしい。

> nils of any type convert to Null.

スライスのゼロ値はnilなので、ただ構造体を初期化しただけだとスライスはnilのまま -> そのままfirestore側に保存するとnullになるということのようだった。
なので、構造体を初期化する時にスライスも `ma

元記事を表示

CleanArchitecture的な構成のGo API サーバー サンプルコード(echo, wire利用)

# はじめに

CleanArchitecture的なパッケージ構成に照準を合わせてGoのREST API Serverの実装をしてみる。
更にGoのweb framework [echo](https://github.com/labstack/echo)とDI code generatorである[wire](https://github.com/google/wire)を組み込む。

### excuse

この構成で本番稼働実績が有る訳ではなく、まずは叩き台的に考えてみました。
まだ改善の余地は有りそうです。

# 実装リポジトリ

[![img](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307773/a0675efd-6389-cd62-455e-b9eb8bb9e26f.png)](https://github.com/fukuyama012/go-server-layered-sample/tree/main)

*利用方法はREADMEを参照。

# ディレクトリ構成

“`
├──

元記事を表示

LeetCodeに毎日挑戦してみた 21. Merge Two Sorted Lists(Python、Go)

## はじめに

無料英単語サイト[E-tan](https://your-e-tan.com/)を運営中の@ishishowです。

プログラマとしての能力を上げるために毎日leetcodeに取り組み、自分なりの解き方を挙げていきたいと思います。

#### Leetcodeとは

[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

Go言語入門+アルゴリズム脳の強化のためにGolangとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

#### 7問目(問題21)

#### 21. Merge Two Sorted Lists

– 問題内容(日本語訳)

> 2つのソートされたリンクリストをマージし、新しい**ソートされた**リストとして返します。新しいリストは、最初の2つのリストのノードをつなぎ合わせて作成する必要があります。

元記事を表示

go modやgo getやgo mod vendorとは何か?

Goを始めたばかりでgo modやgo getやgo mod vendorがよくわかってないので、そのメモ

間違ってる可能性高いので、そこはご了承ください

go.modファイルはGemfileやpackage.jsonみたいなもので、go.sumファイルはGemfile.lockやpackage.lock.jsonみたいなもの?

`go get パッケージ名`で、go.modとgo.sumにパッケージ名が書き込まれる

`go get -u パッケージ名`が、go.modとgo.sumに書いてあるパッケージのバージョンを更新してくれる的な?

つまり、Gemfileに欲しいgemを追記してbundle installしてgemを取り込むのとは手順が逆で、欲しいパッケージをgo getしてそしたら自動的にgo.modやgo.sumに書き込まれるという感じ?

`go mod vendor`でgo.modにファイルに記載されているパッケージを、vendor以下にコピーしてくれる的な?

元記事を表示

Grove – Temperature&Humidity Sensor(DHT11)をRaspberry Piで使用する

# はじめに

HAT基盤と温度センサーを買ったのはよかったけど、動かしていなかったので、動作検証代わりに行った。

お値段等
* [千石電商 Grove Base Hat for Raspberry Pi](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5FAG) ¥1304
* [Grove – デジタル温度・湿度センサー] (https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4ENZ) ¥662

# Grove Base Hat for Raspberry Piの準備
[Seeed Studioの商品ページ](https://wiki.seeedstudio.com/Grove_Base_Hat_for_Raspberry_Pi/)を参考に
以下のコマンドを入力してセットアップをする。

“`bash
curl -sL https://github.com/Seeed-Studio/grove.py/raw/master/insta

元記事を表示

WebSocket のクライアント / サーバー CLI ツールを作った (WebSocket 版 netcat 的な)

表題どおりの [wsnc](https://github.com/tomatod/wsnc) という CLI ツールを Go 言語で作成しました。これ一つで WebSocket のクライアントとしてもサーバーとしても使えます。netcat (nc) コマンドの WebSocket 版みたいなイメージです。

– tomatod/wsnc: https://github.com/tomatod/wsnc

英語の他に日本語のマニュアルも作りました↓
https://github.com/tomatod/wsnc/blob/master/README_JP.md

## 使用感
シンプルに使うとこんな感じです (現在はもう少し見た目がシンプルになりました)↓
![wsnc_demo_simple.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/903359/1cd3cad8-3579-af8f-e069-61cf3f4a316f.gif)

### 主に対応している機能 ([RFC6455](https://

元記事を表示

GoでPostgreから取得したSelectクエリをJSONに変換する

## やりたいこと
– SELECT文で取得したクエリをまるごとJSONにしたい
– sqlパッケージのscanで一行ずつ処理しているようで、ループの中で配列を作る必要がある(?)
– 配列からjsonパッケージで変換する
– 参考のコードはMSのサイトにのっているやつ

## コード
“`main.go
package main

import (
“database/sql”
“encoding/json”
“fmt”
_ “github.com/lib/pq”
)

const (
// Initialize connection constants.
HOST = “127.0.0.1”
DATABASE = “testdb”
USER = “root”
PASSWORD = “password”
)

func checkError(err error) {
if err != nil {
panic(err)
}
}

func main() {

元記事を表示

GO環境でcould not import Cエラー

## エラー発生

Goのgraphqlライブラリの`gqlgen`でスキーマを更新しようとしたら謎のエラー

“`sh
/go/src # go run github.com/99designs/gqlgen
validation failed: packages.Load: /usr/local/go/src/net/cgo_linux.go:12:8: could not import C (no metadata for C)
exit status 1
“`

## 解決

どうやらgccがdockerイメージ上に入ってない模様。
たぶんきっとこれ? https://github.com/golangci/golangci-lint/issues/602

`apk update`してapkをアップデートした後、`alpine-sdk`というビルドパッケージ?を入れたらうまく行きました。
apkについては、[この記事](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)が分かりやすかったです。

“`
/go/sr

元記事を表示

[GO言語] YAMLファイルを読み込んでみよう

# YAMLとは
YAMLとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
yamlの書き方(コメント, 配列, アンカー, エイリアス)

# 環境
– CentOS 8.2
– go version 1.15.3 linux/amd64

# 準備
“`bash
# go get gopkg.in/yaml.v2
# vi test.yml
“`
“`test.yml
first: test
secound:
a1: count1
a2:
– count2
– count3
a3:
b1: count4
“`

# YAMLファイルを読み込む
“`bash
# vi main.go
“`
“`main.go
package main

import(
“fmt”
“io/ioutil

元記事を表示

OTHERカテゴリの最新記事