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

Go関連のことを調べてみた2020年06月28日
目次

Goで簡単なオーダーシステムを作る

こんにちは。そうはぶです。
[A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)と[スターティングGo言語](https://amzn.to/3g90LSH)でGoの基本を勉強したのでアウトプットとして[Progate](https://prog-8.com/)のRuby講座で作ったオーダーシステムに似たようなものをGoで実装してみました!
ポインタのやりとりも少しですが入っているので、[A Tour of Go](https://go-tour-jp.appspot.com/welcome/1)終わったけど、なにから作ろうと困っている人の参考になれば幸いです。

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

import “fmt”

//Menu型を定義
type Menu struct {
Name string
Price int
}

//商品番号(orderNumber)と注文数(count)を定義
var orderNumber, count int

//料金を計算する
func C

元記事を表示

go修行11日目 タイプアサーションとか

## タイプアサーション

– 型変換をすること
– interface型で受け取ると型の判断ができないため

### intger型

“`golang
package main

import “fmt”

func do(i interface{}){
// タイプアサーション interface型だとそのまま利用できないのでintergerへ変換する必要がある
ii := i.(int)
ii *= 2
fmt.Println(ii)
}

func main(){
var i interface{} = 10
do(i)
}
“`

出力

“`
20
“`

### string型

“`golang
package main

import “fmt”

func do(s interface{}){
ss := s.(string)
fmt.Println(ss + “!”)
}

func main(){
do(“Mike”)
}
“`

“`
Mike!
“`

## Switch type

“`golang

packag

元記事を表示

激重フルアーマーRPAは要らん。とりまシュっと操作再生だけできればいいんや【世界初編】

# 壱

とある作業で
*「構築はコード化しているのにXX(ツール名)をインストールするのにログインして操作要るんすよね」*
*「RPA仕込んでおけば良くね?wwwww」*

### は?????

RPAってUiPATH出始めの頃はUWSCや、AutoHotkeyをもっとコモディティ域に下した良い狙いだったんだけど、
いつの間にやら複雑なフローやらAPIやら、クラウド連携だのAI絡みの**重厚なソリューションとして
金額的にも肥大していった**。JREランタイムだの追加で色々入ってくるようになった。アンインスコめんどい。
しかも、SaaS製品と違って日本だとセキュリティ絡みで手元で動くパッケージ製品の需要の方が多そうなのに、
**当然SaaSより高い**。目標をセンターに入れてスイッチだけなのにとても息苦しい。

# 弐

**Linuxのexpectコマンドみたいに最低限のOSとインタフェースになってくれれば良くてOCR機能なんて要らない!**
というお気持ちをツールにしました。

![rabbitRPA.gif](https://qiita-image-store.s3.ap-n

元記事を表示

Go で競技プログラミング: 標準入力を最速で読み取る方法

Go には便利な標準ライブラリが備わっていて、簡単に標準入力を読み取ることができるようになっています。
ただ、実際競技プログラミングで使ってみると、思ったより速度が出ない、と思ったことはないでしょうか?
やるからには 1 ミリ秒でも速いコードを提出したいです。

この記事では、標準ライブラリの基本的な使い方を紹介しつつ、より高速に読み取る方法を紹介していきます。
また、最後にコピペ用の Scanner ライブラリを載せています。

## 標準ライブラリを使った読み取り方法

まずは、標準ライブラリを使った方法を軽く紹介していきます。

### `fmt.Scan`

[fmt.Scan](https://pkg.go.dev/fmt?tab=doc#Scan) を使うと、簡単に読み取ることができます。
入力量が少ない場合は、何も考えずにこれを使うのが楽です。
以下は使い方の例です。

“`go
import “fmt”

func main() {
var a, b int
fmt.Scan(&a, &b)
fmt.Println(a, b)
}
“`

`int`, `

元記事を表示

知識0からGo言語でCTF用スコアサーバを構築した結果、最高だった話

# はじめに

どうも、テスト前で何もしたくないMarnyです。
今回は、**Qiita夏祭り2020_パソナテック**というイベントがやっていたので記事を書いていこうかなと思います。

テーマ:〇〇(言語)のみを使って、今△△(アプリ)を作るとしたら

コードの詳細を解説するより、どういったメリットがあるのか、デメリットがあるのか。そういった点に注目していきます。

# 開発経緯

そもそもなんでCTF用のスコアサーバを構築したかというと、同級生3人で通っている高専の
**低学年用にLinuxリテラシー等を学習できる環境を作ろうぜ!**

という話があり、CTFを構築することになりました。
で、使用言語なんですけど、先生から

**「DjangoかGo使いなよ」**

と言われて、僕はGoを選びました。 ~~今じゃGo信者です~~

# Go言語とは

**シンプル、高速、メモリ効率が良い、メモリ破壊が無い、並行処理が得意などの特徴を備えている**

これが一番の特徴かなと思います。
とりあえず早くて、見やすいってのがいいところですね

#### 今回はGoがすでに実行できる環境を

元記事を表示

ネットワークプロトコルというものをプログラム的にどうやって実装するのかわずかに見えてきた話。ついでにGoでICMP エコー要求を実装する。

 ネットワークの通信ってどういう仕組なの?プロトコルってどうやって実装するの?OSってどうなってんの?そんなことが気になり出す時が、IT職をやっていると訪れますよね。特にほぼ未経験でこの業界に入ってくると、いくらプログラミングやコマンドを学んでも、その先のOSやハードウェアや通信の具体的な動きが全然イメージできないんじゃないでしょうか。私もそんな1人です。

ド田舎の農学部から新卒で業務系SIerへ就職後に1度転職を経験し、IT職に着いて早5年目。OS、プロトコルの実装やハードウェアに関する仕事に関わることはありませんでした。しかし地道に学習を続けた結果、樹海を超えてようやくチラチラと平野が見えてまいりました。よく見るとその先に大きな大きな沼が見えます。たぶん深さはマントルくらいまで続いているじゃないでしょうか。知らんけど。

で、何が言いたいかというと、独学でようやく薄っすらとプロトコルの実装方法(RFCを読んでそのとおりにデータ構造を作成し正常なパケットを送信する方法)と、その時にOSやハードウェアがどんな動きをしているのかが見えてきて、ひとまずICMPエコー要求を実装できたという

元記事を表示

DocBase APIのGo Clientを作った

いろんなドキュメンテーションサービスあるけれど、DocBaseがミニマルでいい感じ。
だけどマイナー故か、APIクライアントはほとんどない。

APIドキュメントは充実しているので、参考にAPI Clientライブラリを作っておきました。

https://github.com/kyoh86/go-docbase

DocBase×Goユーザーの皆様よしなに。

元記事を表示

Google Codelabsに任意のURLのiframeを埋め込む

# はじめに

Codelabsのナビゲーションをつかって、独自のチュートリアルページを作りたい。その際、iframeでいろいろ埋め込みたいが、claatのセキュリティ制限で、プリコンパイルのバイナリでは限られたドメインしかiframe埋め込み許可されていない。
(claatとはGoogle Docsまたはmdの原稿をソースに、Codelabsのhtmlを生成するプログラムです。)

ならば、claatのソースに手を加えて、makeしよう!ホワイトリストにドメインを追記するだけだぜ!

# 環境

以下の内容は、WSL2のUbuntu上で確かめました。

# 手順

基本的には、claatの[readme.md](https://github.com/googlecodelabs/tools/blob/master/claat/README.md)を基本として行います。もっとよいやり方あれば教えて下さい。

### claatのインスト

`$ go get github.com/googlecodelabs/tools/claat` する。

cf.) [README.md#inst

元記事を表示

yukicoder contest 254 参戦記

# yukicoder contest 254 参戦記

## [A 1095 Smallest Kadomatsu Subsequence](https://yukicoder.me/problems/no/1095)

ナイーブに書くと *O*(*N*2) になってしまう. 最初は SegmentTree かなあと思ったけど、指定値以上の最小値の検索が出来る気がしなかったので、平衡二分探索木となりました. 中心の門松より左側と右側の平衡二分探索木をメンテしつつ、凸の場合は最小値、凹の場合は真ん中の大きさ以上の最小値を求めて、門松列の大きさの最小値を求めればいいだけ. *O*(NlogN).

“`go
package main

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

var (
y uint = 88172645463325252
)

func xorshift() uint {
y ^= y << 7 y ^= y >> 9
re

元記事を表示

CleanArchitectureでAPIを設計する

## 概要

今度、インターン先で設計(DDDとCleanArchitecture)をテーマにしたディスカッション&ハンズオンを行うことになりました。予習も兼ねてCleanArchitectureで設計したAPIを書いてみましたので、その際に得た知見を纏めておきます。使用した言語はGoです。

今回使用するサンプルは[こちら](https://github.com/hirokikondo86/clean-architecture-sample)です。

## クリーンアーキテクチャとは

CleanArchitecture (クリーンアーキテクチャ) とは、Robert C. Martin (ボブおじさん) 氏が提唱したアーキテクチャパターンです。
ソフトウェアを4つのレイヤーに分けることによって、関心の分離を達成することを目的とします。(原文は[こちら](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html))

![clean-architecture.png](https://qi

元記事を表示

go言語のimport _ math/randみたいな使ってないのにimportしてるのってなんで?

これは対象パッケージのinit関数を呼び出すためだけにインポートしている。対象パッケージは使わないけど、initはしておきたいときに使う。

元記事を表示

R50のリープフロッグ ~ 西暦2020年の今、偏差値50のプログラマを目指すお前が学ぶべきこと

#タイムスタンプ
初回投稿日:2020年6月26日
最終更新日:2020年6月28日

#対象読者

この投稿は、ちょうど20年ほど前にソフトウェアエンジニアとしてのピークを迎えていた当時30歳くらいの自分自身に宛てて書いた手紙です。

したがって、この内容は個人的なものであり、くたびれた老兵の戯言であり、ピントがずれ時代を捉えきれておらず、網羅的でもなければ他者には通じないアナロジーに溢れていて、多くの方にとって役に立たないばかりか、酷い勘違いや致命的な間違いを含んでいるかもしれません。

とは言うものの、現在の私のように、今もなお 20 年前の知見や思考パターンが生活のベースになっている方、新しい知識や用語は押さえているもののそれが今一つ自身の血肉になっていないと感じている方、最近の技術トレンドを押さえたいけれど情報の洪水に溺れそうになり何から手を付ければいいかわからないという方にとっては、あるいはこの記事が役に立つようなことがあるかもしれません。

[](////////////////////////////////////////////////////////////

元記事を表示

go修行3日目 no-struct

## no-struct

“`golang

package main

import “fmt”

type MyInt int

func (i MyInt) Double() int{
// integerにキャストする
return int(i * 2)
}

func main() {
myInt := MyInt(10)
fmt.Println(myInt.Double())
}
“`

“`
20
“`

## インターフェース

“`golang

package main

import “fmt”

type Human interface {
Say() string
}

type Person struct{
Name string
}

func (p *Person) Say() string{
p.Name = “Mr.” + p.Name
fmt.Println(p.Name)
return p.Name
}

// Humanインターフェースを受け付ける
func DriveCar(human Human){
if

元記事を表示

Next.jsとGo言語(gqlgen)でGraphQLを使ったアプリケーションを構築する方法

この記事では、フロントエンドにNext.js、バックエンドにGo言語(gqlgen)を用いて、フロントエンドとバックエンド間のAPIにGraphQLを使ったアプリケーションを構築する方法をまとめます。

作成したのは以下のような簡易ブクマアプリです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b9e6976e-f134-673e-38d1-7a63d00bb4d1.png)
フロントエンドはほぼNext.jsのexamplesのままで、本記事ではバックエンドの実装をメインに解説します。

## 背景

個人的に、「フロントエンドフレームワークとGo言語の組み合わせで何か開発をしてみたい」と以前から思っていました。
そんな中、ReactのフレームワークであるNext.jsの使い勝手が良さそうという噂を耳にしました。

加えて、Next.jsのexamplesが充実していて、Apolloを使ったアプリケーションのひな形が簡単に作れることを知ったので、今回Go言語のバックエンド

元記事を表示

goでデザインパターン

使い道がありそうだなあと思ったパターンのメモ。

# builder
– 自身を返してメソッドチェイン

“`go
package main

type email struct {
from, to, subject, body string
}
type EmailBuilder struct {
email email
}
func (b *EmailBuilder) From(from string) *EmailBuilder {
b.email.from = from
return b
}
func (b *EmailBuilder) To(to string) *EmailBuilder {
b.email.to = to
return b
}
func (b *EmailBuilder) Subject(subject string) *EmailBuilder {
b.email.subject = subject
return b
}
func (b *EmailBuilder) Body(body string) *EmailBuilder {

元記事を表示

【Go】簡易 fuzzylauncher

以前の記事: [【PowerShell】 peco を使った簡易ランチャ](https://qiita.com/AWtnb/items/d2842d86c5482832daa5)

最初はうまく動作してはしゃいでていたものの、なんとなくモッサリした動作が気になってきた今日この頃。勉強も兼ねて go で書き直してみました。

最終的にこのような感じになります。
![202006262125035.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501098/55b6b3de-b2e1-309c-2f11-4b352eca9308.png)

### 制作過程
まずは `Test-Path` に相当するファイルの有無を確認する関数。

“`golang
func isVaridPath(filename string) bool {
_, err := os.Stat(filename)
return err == nil
}
“`

次は `Get-Content` の代わりのテキストファイル読み

元記事を表示

Hyperledger Fabric [asset]ソースコードとダミーデータをgitへ上げました

# 共有する
Goソースコード、Shellスクリプト、ダミーデータ(1万レコード)、PostgreSQLのyamlファイルをgitへアップロードしました。
https://github.com/settembre21/asset

以下の投稿に関連するものです。
[Hyperledger FabricのKeyゾンビ化を防ぐ(ソースコード掲載)](https://qiita.com/settembre21/items/b8f2a0df79750efd0db6)
[Hyperledger Fabricで個人情報をクエリする(RDB連携)](https://qiita.com/settembre21/items/af5c4e2e142f21201866)
[Hyperledger FabricのGetHistoryForKeyを利用した資産のトレース](https://qiita.com/settembre21/items/dffef94af71b7e880691)
[Hyperledger FabricのState DBをPostgreSQLを使って初期化する](https://qiita

元記事を表示

Goで数値型配列の中身を高い順にsort(並び替え)する方法

## はじめに
Goで数値型配列の中身を高い順にsortしてみました。

## コード

“`go:main.go
package main

import (
“fmt”
“sort”
)

func main() {

slice := []int{1,4,3,5,6,19,21,7,8,10,49}

sort.Sort(sort.Reverse(sort.IntSlice(slice)))←これがPoint
fmt.Println(slice)

}
“`

“`
// 出力結果
[49 21 19 10 8 7 6 5 4 3 1]
“`
AtCoderなんかの問題を解くときに使ったときは

“`go:main.go
package main

import (
“fmt”
“sort”
)

func main() {
var A int
slice := []int{}

for i := 0; i < 10; i++ { fmt.Scan(&

元記事を表示

goroutineでシェルっぽくバッチ処理を書いてみた

# 小さく分割してきれいにつくりたい、けど効率も重視したい
シェルや関数型プログラミングのように、部品の組み合わせでプログラムを書きたい。しかし、パイプラインや遅延評価みたいな仕組みがないと、ループ回数だけ増えてしまって効率が悪い。仕方がないから、1つの処理の中に全機能まとめてしまおう。そんな経験はないでしょうか。

# それgo言語でできる!
go言語のgoroutineとchannelを勉強してみてまさにこれだと思い、go言語の勉強を兼ねて作ってみました。

# 前提環境
– goバージョン:1.14

# 完成イメージ
シェルっぽく使いたいということで、シェルを意識した設計にしています。メソッドは基本的にchannelに関連付けたメソッドとして定義し、戻り値にはchannelを返すようにしました。そうすることで、メソッドチェーンをシェルのパイプに見立てて使えます。ただし、起点となる処理はchannelにすると逆に使いにくいので、普通に値を引数をとるようにします。

“`go:
slip.Cat(“data/slip.csv”).Filter().Sort()
“`

また、2

元記事を表示

Goでint型のスライスを昇順と降順でソートする方法

##はじめに
intのスライスをソートする方法が分からなかったので調べてみました。
今回使用するスライスは、こちら

“`
s := []int{4, -1, 12, -26, 5}
“`

###昇順(小さいから大きい)でソート
“`
sort.Ints(s)
fmt.Println(s)
// [-26 -1 4 5 12]
“`
###降順(大きいから小さい)でソート

“`
sort.Sort(sort.Reverse(sort.IntSlice(s)))
fmt.Println(s)
//[12 5 4 -1 -26]
“`
##おまけ
スライスの中から一番大きい数字や小さい数字を見つけるコードも書いてみます。
###一番大きい数字を出力

“`
sort.Ints(s)
//合計の要素数から-1(5-1=4番目の数字)
fmt.Println(s[len(s)-1])
//12
“`
###一番小さい数字を出力

“`
sort.Ints(s)
//スライスの0番目
fmt.Println(s[0])
//-26
“`

##さいごに
調べてみると、比

元記事を表示

OTHERカテゴリの最新記事