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

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

【Go 1.13】unexpected directory layout:がでた時の対処

Goにて開発をしていて、ファイルを用いてパッケージを分けようとしたら起きたエラー。
とりあえず解決したので、すぐさまメモ。。。

## 環境

“`
バージョン
go version go1.13.14 linux/amd64
centos 7

ディレクトリ構造
./
|
|–sample/
| |
| |–sample.go
|
|–main.go

“`

## 実際のコード

“`go:main.go
package main

import “./sample”

func main() {
a := sample.Foo(“test”)
sample.PrintFoo(a)
}
“`

“`go:sample.go
package sample

import “fmt”

func Foo(s string) string {
return “aaa ” + s + ” bbb”
}

func PrintFoo(s string) {
fmt.Println(s)
}
“`

“`
[root@marn

元記事を表示

union-find木をGoで実装して理解する

初投稿です。
間違っているところがあったら指摘ください、できるだけ直していきたいと思います。

# union-find木とは何か?
– 集合を表現する手法の一つ。
グループ分けを木構造で表現するデータ構造。
同じ集合に属するということは同じ木に属する、というのがポイント。
[wikipedia](https://ja.wikipedia.org/wiki/%E7%B4%A0%E9%9B%86%E5%90%88%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0)

## なぜunion-findと呼ばれているか
– Find: 特定の要素がどの集合に属しているかを求める。
– Union: 2つの集合を1つにマージする

これらの2つの操作をサポートしているためにUnion-Findと呼ばれる。
wikipediaより

# 今回の例題
[AtCoderBeginnerContest177-D](https://atcoder.jp/contests/abc177/tasks/abc177_d)
要約すると
AとBはお友達

元記事を表示

GORMでつまずいたポイント

先日GORMに入門しかなり躓いたので、そのポイントを残しておこうと思います。

全体的には、

– **GORMは Naming Convention を強く求めるので、事前に知っておく必要がある**

と感じました。

# Modelの名前の複数形をテーブル名として認識する
– デフォルトでは **Structの名前の複数形をtable名として認識する**
– **`Person`** というStructをModelとして定義すると、table名は **`people`** として扱われる
– `persons` ではないことに注意
– **table名を変更するには、Tablerインタフェースを実装する**

“`go
// Tabler is interface of gorm table name
type Tabler interface {
TableName() string
}

// Person is the model of persons
type Person struct {
ID string `gorm:”colum

元記事を表示

GO言語でHello World

#はじめに
これからGO言語を学ぶうえで、備忘録としてやったことをまとめていきたいと思います。
GO言語つかってやってみたいことは結構あるので1から勉強ですね。(暗号解析とかめっちゃかっこよくないですか?)
学業の合間を縫っての勉強になるので更新は遅いと思いますが少しずつやっていきたいですね。
間違いがあった時は教えてもらえると幸いです。

ではやっていきます!

#開発環境
・ノートPC
・Windows 10
・Virtual Studio Code
・GO ver.1.15.2

をつかってやってます
※GO言語の環境構築の方法はここでは触れないです
#Hello World!の出力
プログラムの中身はこんな感じ

“`go:hello.go
package main

import “fmt”

func main() {
fmt.Print(“Hello World!”)
}

//実行方法
>go run hello.go
//Hello World!が出力されればOK
“`

モジュールの概念や関数の定義がほかの言語の書き方に似てますよね。合体してるって感じ。

元記事を表示

–go_out: protoc-gen-go: Plugin failed with status code 1.の解決方法

protoファイルを作成し、コードを自動生成しようとした際にエラーが発生。

“`
protoc -I helloworld/ helloworld/helloworld.proto –go_out=plugins=grpc:helloworld

protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
–go_out: protoc-gen-go: Plugin failed with status code 1.
“`

PATHを設定してくださいと言われているよう、、、
`bash_profile`に以下を追加すれば解決!

“`
export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin
“`

元記事を表示

Goで開発するときのスニペットまとめ

# はじめに
Goでプログラミングをする時に個人的に使っているスニペットを簡単にまとめていきます。
めちゃめちゃよく使うものから、たまーにしか使わないものまで様々ですが
使えそう!!!って思ってくださった物だけでも導入してくださったら嬉しいです!

# vscodeでのスニペット登録
まずは簡単にvscodeでのスニペットの登録方法について紹介します
Code -> Preferences -> User Snippets
![スクリーンショット 2020-10-07 16.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/fa4a8c1e-a23f-a0fe-5758-6f6d1575d6fe.png)

とするとこのような画面が出てくるので`go`をクリック
![スクリーンショット 2020-10-07 16.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/cefba6

元記事を表示

macOS JetBrainsでダウンロードしたGoLandで改行「\」が打てない場合

JetBrainsで GoLandをダウンロードしプログラムを書いていたところ、改行を表す「\」が打てなかった。
色々調べてMacのキーボード配列をいじったりしたが変化せず、、、

optionキーとfnキーと同時に¥を押すと\が打てました。
どういうバグなんだろう、、、

元記事を表示

【Go言語】TwitterAPIを使ってVtuberの画像を収集して保存する

#はじめに

好きな人の絵を保存したい……。

現在、Twitter上で、絵描きの人が様々な画像を投稿しています。

私は、Vtuberの方の絵をよく見るですが、上手いなあ、どっかに保存しておきたいなあ…と思いました。

私がよく見るVtuberの絵は、Twitterではハッシュタグによって投稿されていることが多いと気付き、どうにかできないのかと思い、調べながら、「収集ツール」を作りました。

#TwitterAPIを用いて画像をまとめて取得する

>ちなみにここでは私の好きな「兎田ぺこら」さんを取り上げたいと思います。

##必要な工程

・TwitterAPIの取得と認証
・収集する情報を設定(「#ぺこらーと」という文字列を含むツイート、100件取得など)
・保存した画像を入れておくためのファイルの作成など
・画像URLの取得
・jpgファイルとして保存

それでは一つずつ見ていきましょう。

#TwitterAPIの取得と認証

以下のサイトに飛び、TwitterAPIを取得するようにしてください。

[>>>TwitterAPIの取得](https://deve

元記事を表示

【初中級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い

こちらの記事は、Kyle Quest氏により公開された『[50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs](http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html)』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。

初心者(Total Beginner)向けの和訳は [【初級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い](https://medium.com/eureka-engineering/go-beginner-3bb95e0790da) があります。本記事は初中級者(Intermediate Beginner)向けの和訳です。

## 初中級者向け


* [HTTPレスポンスボディのクローズ](#httpレスポンスボディのクローズ)
* [HTTPコネクションのクローズ](#httpコ

元記事を表示

【Go + Gin】Docker環境を構築してみた

## はじめに
GoとGinを使用する際のDokcerを用いた開発環境を構築しました。docker-composeを使用しています。
使用するDBはmysqlで、ORマッパーはGormの使用を想定しています。

## TL;DR
下記のディレクトリ構成にしています。
Dockerfile、docker-compose.ymlにしています。

**ディレクトリ構成**

“`
├── docker
│   ├── docker.mysql.env
│   └── go
│   └── Dockerfile
├── docker-compose.yml
└── src
└── app
“`

**docker/go/Dockerfile**

“`docker

FROM golang:1.10.3-alpine3.8

COPY src/app /go/src/app/

WORKDIR /go/src/app/

RUN apk update \
&& apk add –no-cache git \
&& go get github.com/gin-

元記事を表示

【Go】DBへのRead/Writeでエンドポイントを分けたい

# はじめに

レプリケーションに対応するため、DBのエンドポイントをRead/Writeで分けることにしました。
Go/Gorm2でどのように対応するか検討しました。

## 利用環境
– Go: 1.15.2
– Gorm2: v1.20.1
– Echo: v4.1.17

# 結論から

Endpoint別に複数のConnectionを持ったTypeに、Gormの各Methodをラップした。
こうすることで、connectionを利用する側はendpointを意識せずにDBへの操作を可能にしています。

“`db/connect.go
package db

import (
“os”

“gorm.io/driver/mysql”
“gorm.io/gorm”
)

type SqlHandler struct {
ReadConn *gorm.DB
WriteConn *gorm.DB
}

func Connect() *SqlHandler {
readConn, err := gorm.Open(GetDBConfig(“read”))
if err

元記事を表示

【Go】関数の書き方とか呼び出し方とか

# 内容
Go言語における関数の色々を忘れないように書いておきます。

## 関数の定義の仕方
“`
func 関数名() {
// まとめたい処理を書く
}
“`

## 関数の呼び出し方
“`
関数名()
“`

## 関数に値を渡す
“`
関数名(値)
“`

## 引数を受け取って使う

“`
funk main() {
// catを引数として変数animalに渡している
ask(“cat”)
}

funk ask(animal string) {
fmt.Printf(“%s/n”, animal)
}
“`

元記事を表示

GoサーバとDartクライアントではじめるgRPC

# はじめに
Go製のAPIサーバとDartクライアント(Flutterを想定)間の通信をgRPCで行う方法について書きます

[日比谷音楽祭おさんぽアプリ2020 開発の裏側を語る / サーバー編](https://engineer.dena.com/posts/2020.06/2020-hibiya-festival-server/)というDeNAの20新卒、21卒内定者の方の記事を参考にしたので共有しておきます。

また、なぜgRPCを使うと嬉しいのかは、Cloud Native Days Tokyo 2020の南 直さんのセッション [“Real World Migration from HTTP to gRPC”](https://event.cloudnativedays.jp/cndt2020/talks/14)を聞くとわかりやすいのでこちらも共有しておきます。リンクからアーカイブ動画に飛べます。

# 準備
.protoファイルから自動生成するにはprotocコマンドと周辺プラグインを使用する必要がありますがローカルにいろいろインストールするのは嫌なので、Dockerコ

元記事を表示

openTelemetryでGCPのtraceを使う方法

本記事ではopenTelemetryというオープンソースを利用して、GoogleCloudPlatform(GCP)のTrace機能で計測をする方法を記載します。今回のTrace対象はCloudRun上で実行します。

# openTelemetryとは
openTelemetryは、複雑化していくシステムの動作を分析するためのオープンソースです。実行された処理の時間計測をおこなう事で、ボトルネックや障害に繋がる原因を探す事ができます。openCensusという分散トレーシングのオープンソースがあり、openTelemetryはその後継になります。
[openTelemetry](https://opentelemetry.io/)

# Traceの構造
Traceを始める時に、まずはTraceIDという識別用のIDを作成します。このIDによりTraceの対象を一意にしたりSpanという計測区間との紐付けを行います。Spanは親子関係を持ち、計測の細分化をする事が出来ます。下の図は、1番上の親Spanを3分割して中央の子Span2をさらに詳細にトレースする構造になっています。

![

元記事を表示

Goの変数定義の仕方

# 変数定義の仕方

Bo☆Be☆Ro☆Ku
n番煎じ

“`Go:sample.go
// 宣言、代入
var s string
s = “string”

// 型宣言と代入を一緒に
var s string = “string”

// 型省略
var s = “string”

// var省略
s := “string”

// 同じ型で複数宣言
var s1, s2 string
s1, s2 = “s1”, “s2”
// 同じ値を代入はNG
s1, s2 = “s”

// 同じ型で複数代入
s1, s2 := “s1”, “s2”

// 別々の型複数宣言
var (
i int
s string
)

// 別々の型複数代入
var (
i = 1
s = “s”
)

“`

元記事を表示

Service Bus Queueを Azure SDK for Go で学んでみる (1)

Keda へのコントリビュートに際して、あまり触ってこなかった Service Bus の挙動について知る必要があったので、簡単に調査してみた。
ライブラリは下記のものを使用している。
* [Microsoft Azure Service Bus Client for Golang](https://github.com/Azure/azure-service-bus-go)
* [GodDoc servicebus](https://godoc.org/github.com/Azure/azure-service-bus-go#pkg-examples)

# Queue Client

Queueのオペレーションができるように認証を行う。ServiceBus と Queue は事前に作っている。接続のためには、ServiceBus namespaceの`ConnectionString` が必要なので、取得して、環境変数から渡すようにしている。`NameSpace`のインスタンスを`ConnectionString` を渡して作成し、`NameSpace` から `NewQueu

元記事を表示

Goでサウンドプログラミング(超入門レべル)

Nim言語でやったのを、Go言語でもやってみようと思います。
https://qiita.com/mk2/items/bc41f9dfee6669083dbb

# 「ド」の音を再生する

cgo経由でmmsystem.hを利用します。Goのコードですが、ほとんどCのような感じですね。

“`go
package main

// #cgo LDFLAGS: -lwinmm
// #include
// #include
// #include
import “C”
import (
“bufio”
“fmt”
“math”
“os”
“unsafe”
)

const (
SRATE = 44410
PI = 3.14159286
B_TIME = 1.0
F0 = 440.0
AMP = 40.0
DATA_LEN = int(SRATE * B_TIME)
)

func main() {
var (
hWave C.HWAVEOUT

元記事を表示

Join Azure Using Go 〜GoでAzureを始めたい&知りたい方々へ〜

2020年9月30日(水)にオンラインで「[★祝★Japan Azure User Group 10周年](https://jazug.connpass.com/event/186235/)」が開催されました。3年前の7周年の時にLTでチャレンジしたのですが失敗しており、また、Azure SDK for Goの学習を始めた今年が記念の10周年にあたるのも何かのGo縁だと思い、再度、祝辞(LT)枠にて申し込みさせて頂きました。

今回は事前に動画を投稿し、公開された物から順に各自で閲覧するという、私も初めて体験する形式でした。

– [Japan Azure User Group 10周年 – YouTube](https://www.youtube.com/playlist?list=PLqVktDzfvX5D0PE7Tok5OsudQzZ-qD6Mu)

今夏の私の「Microsoft/Azure x Go」活動の集大成として、力一杯作成したところ少々長めの動画となってしまいました。ダメ元で [JAZUG](https://www.facebook.com/jazug.jp) のコミ

元記事を表示

第2第3のプログラム言語を学び始める際に役立つ「とほほのWWW入門」というサイト

# とほほのWWW入門

http://www.tohoho-web.com/www.htm

第2第3の言語を本格的に勉強を始める前にさらっと学習したい際にかなりおすすめのサイトです。

入門書でよくみる「条件分岐とは」みたいな、多くの言語に共通している部分は省略してあったり、言語の特徴がまとめられている欄とかもあって、控えめに言って最高です。しかも広告もないです(むしろつけて)

言語の解説は、現在(投稿時)`JavaScript` `TypeScript` `Java` `perl` `PHP` `Ruby` `Python` `Go` `C#` `Rust` `shell` `FORTRAN 77` `C言語` が存在します。

知る人ぞ知る老舗のサイトみたいですが、是非多くの人にみてもらいたいということで共有させていただきます!
他にも多種多様の技術についての解説があるので、是非目を通してみてください。

元記事を表示

golang利用slack编写C2

最近在学golang,恰好看到demon分析的golang slack c2,便想着自己也来写一写。

# 配置slack
注册账号什么的就不说了。访问 https://api.slack.com/ 点击 `Start Building`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/dc3e5b61-4384-6b3c-0bf6-3c850bcd4716.png)

创建一个app
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/ea267bba-e73e-0625-3680-b40a02c7c70f.png)

左侧`OAuth & Permissions` -> `Scopes` 配置token权限,暂时先配置两个,之后用哪个再加。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

OTHERカテゴリの最新記事