Go関連のことを調べてみた2022年07月25日

Go関連のことを調べてみた2022年07月25日

Goにおけるパッケージのインポート方法いろいろ~ローカル環境のパッケージをインポートしたい~

Goでパッケージのインポート方法がいろいろあって混乱したので整理してみました。
下の図に対応している章を見れば、インポート方法が分かるようになっています。

![flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705474/537a3924-4ac5-de1d-1937-608a2d9fcc0b.png)

**目次**
– [1. 標準pkgをインポート](#1-標準pkgをインポート)
– [2. 自モジュール内のpkgをインポート](#2-自モジュール内のpkgをインポート)
– [3. ネット上から取得したpkgをインポート](#3-ネット上から取得したpkgをインポート)
– [4. GOPATH配下のpkgをインポート](#4-gopath配下のpkgをインポート)
– [5. 任意のローカルフォルダ内のpkgをインポート](#5-任意のローカルフォルダ内のpkgをインポート)

:::note warn
基本的には`モジュールモード`を想定していますが、[4. GOPATH配下

元記事を表示

【#38 エンジニア転職学習】Go WebApp フロントエンド部分作成

# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。

使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。

バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。

https://qiita.com/Chika110/items/ef54dddd565a0193ef44

# 本日の学習内容
本日はCandleStickのデータフレーム作成、APIHandler、jQueryを使用したフロントエンド部分作成を学習しました。

* データフレーム
* APIHandler
* **フロントエンドchart作成 ←Topics!!**

# フロントエンド chart作成
以下今回のフロントエンド部分作成時の個人的ポイントです。
* chart作成のHTMLは基本的なものは`developers.google.com/chart/`からテンプレート取得
* jQueryは「Google Hosted Libraries」よりリンク

元記事を表示

【自己学習】Go言語を学ぶ(6)

公式チュートリアルから基本を学ぶ
https://go-tour-jp.appspot.com/list

## For(繰り返し)

* 基本的に、 for ループはセミコロン ; で3つの部分に分かれています:

* 初期化ステートメント: 最初のイテレーション(繰り返し)の前に初期化が実行されます
* 条件式: イテレーション毎に評価されます
* 後処理ステートメント: イテレーション毎の最後に実行されます
* 初期化ステートメントは、短い変数宣言によく利用します。その変数は for ステートメントのスコープ内でのみ有効です。

ループは、条件式の評価が false となった場合にイテレーションを停止します。

サンプルコード:
1~9まで足していき合計値を出力
“`go
package main

import “fmt”

func main() {
sum := 0
for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) } ``` 結果: 45 ## For continued

元記事を表示

GolangでAPIを作るレシピ集

# はじめに
最近業務でGolangを触ることが増えてきました。
「この実装前もやったな」とか「これどうやって書くんだっけ?」ということが増えてきたので、レシピっぽくまとめてみました。
何故こういう実装をするかという点よりも、こうやれば良いという実装の例を示す形にしています。
深く言及する記事はまた別途まとめたいと思います。

# DBと接続したい場合

“`go
/*
DB変数を用意しておいて、それを使いたいところでimportする。
importした段階でinitメソッドを走らせるという実装が多い。
DDDでやるならインフラ層に記述する。
*/

import (
“database/sql”
“fmt”
“os”

// mysqlのドライバーをimportする。
_ “github.com/go-sql-driver/mysql”
)

func init() {
// dsn(データソースネーム)を構築。環境変数で渡すならos.Getenvで渡す。
dsn := fmt.Sprintf(“%s:%s@tcp(db:3306)/%s?charset=utf8”,

元記事を表示

Go クロージャー(closure) の理解

A Tour of Go でクロージャーが出てきたのでまとめてみた。

“`go:sample.go
package main

import “fmt”

//クロージャー
func adder() func() int {
sum := 0
return func() int {
sum += 1
return sum
}
}

func main() {
a := adder()
for i := 0; i < 10; i++ { fmt.Println(a()) } } ``` 出力結果は以下の通り ``` 0 1 2 3 4 5 6 7 8 9 10 ``` 当時の自分: a()を10回実行しているのは理解できる。あれ...a()に代入しているadder()は ```go:closure.go //クロージャー func adder() func() int { sum := 0 return func() int { sum += 1 return sum } } ``` これだから、毎回 `sum := 0` で初期化されるのでは

元記事を表示

Webアプリケーション開発 ディレクトリとは

この記事ではGoを使用しています。

はじめてのWebアプリケーション開発で
ディレクトリ構成を考えるにあたり、
そもそもディレクトリって何、
どのように考えるかわからなかったため、
調べたことを記載します。

〇ディレクトリとは
簡単に言うと、ディレクトリ構造=PCのファイル構造

参考記事↓
https://webliker.info/html/60828/

〇バックエンドディレクトリの設計
Goでのディレクトリ構成の設計について、調べました。

参考記事↓
https://trap.jp/post/1446/
https://qiita.com/lon9/items/5239c2707b1557f76c9a
https://liginc.co.jp/584227#Go
https://github.com/fumiyasac/SampleApiOfGo
https://github.com/golang-standards/project-layout/blob/master/README_ja.md

元記事を表示

Next.js と Go で WebSocket 通信を行おう【接続編】

# はじめに
1. [Next.js と Go で WebSocket 通信を行おう【環境構築編】](https://qiita.com/1129-tame/items/39101ed81039542198dc)
1. [Next.js と Go で WebSocket 通信を行おう【接続編】](https://qiita.com/1129-tame/items/2036d89915b3a3d026be) <- 今回の記事 Next.js と Go を利用して WebSocket 通信を行なってみます。 環境構築は前回記事を参照してください。 今回は実際に WebSocket 接続を行い、ローカル環境で双方向通信を実現させます。 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180763/9cedec58-9ea5-bf74-87b6-3e8bc055f1e8.png) このように form にデータを入力し、サーバーサイドでデータを加工して受け取ることをゴールとします。 h

元記事を表示

go1.18 は go1.17 よりはっきり遅いことがあるよ

#  これは何?

Twitter で軽率に

と書いたので、本当にそうなのかどうか調べてみたら驚くべき結果に!
となったので記事にしてみた。

とはいえ。
これはマイクロベンチマークに過ぎないので、全体的な性能とかではなく、そういう事がありうるとうだけのこと。

# 調べたこと

なんとなく、動的に定められる関数を呼び出すのがいいなと思って、こんなコードにしてみた。

あと、メモリ確保にもたくさん時間を使っている。

## go 版

“`go:go1.11etc
package main

import (
“fmt”
“os”
“runtime”
“strconv”
“time”
)

type proc = func(a uint32) uint32

func test(num uint32) uint32 {
m := make([]proc, 0, num)
for ix := uint32(0); ix < num; ix++ { i

元記事を表示

GoでAWSWAF WebACL一覧を取得するサンプル

## ポイント
– CloudFrontにアタッチしているWAFを利用する場合は、us-east-1リージョンを指定しないといけない

## サンプル

“`go
package main

import (
“fmt”
“os”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/wafv2”
)

func main() {

sess := session.Must(session.NewSessionWithOptions(
session.Options{
Profile: os.Getenv(“AWS_PROFILE”),
SharedConfigState: session.SharedConfigEnable,
}))

svc := wafv2.New(sess, sess.Config.WithRegion(“us-east-1”))

para

元記事を表示

【#37 エンジニア転職学習】Go WebApp DB関連

# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。

使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。

バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。

https://qiita.com/Chika110/items/ef54dddd565a0193ef44

# 本日の学習内容
本日はcandleスティック情報を作成・取得するmodelやcontroller部分を学習しました。

* DBスキーマ作成
* **candleDBに関するSQL文コード作成 ←Topics!!**

# CandleDBに関するSQL文コード
bitflyerから取得してくるCandleの情報(duraiton, open, close, high, low, volume 等)を入れておくDBテーブルのスキーマの作成。
また、テーブルの変更を行うSQL文コードの作成を中心に行いました。

以下本日のポイント
* 基本的なDbConn

元記事を表示

Azure Developer CLI (azd) をソースコードからビルドする

# Azure Developer CLI (azd) とは

Azure Developer CLI (azd) は、米国時間の2022年7月12日にオープンソースプロジェクトとしてパブリック プレビューで公開されました。

– [Introducing the Azure Developer CLI (azd): A faster way to build apps for the cloud – Azure SDK Blog](https://devblogs.microsoft.com/azure-sdk/introducing-the-azure-developer-cli-a-faster-way-to-build-apps-for-the-cloud/)

現在のところ、Azureのコンピューティング サービス上にAzure Cosmos BDにアクセスするWebアプリ(Python、JavaScript/TypeScript、C#)のテンプレートを作成できて、Azureへのデプロイまでを支援するCLI コマンドとなっており、今後はJavaやAKSのテンプレートも用意され

元記事を表示

OpenSSLでX.509証明書を作成してGoで署名検証するまでのメモ

# ステップ

– 1. ルート証明書/サーバ証明書の作成
– ① ルート証明書の作成
– ② 証明書署名要求の作成
– ③ サーバ証明書の発行
– ④ OpenSSLで署名検証
– 2. Goで署名検証

# 1. ルート証明書/サーバ証明書の作成

**① ルート証明書を作成します**

とりあえず有効期限は`-days 365000`として長くしています。
また、`-newkey rsa:4096 -keyout root.key`オプションを付けることで秘密鍵も同時に生成しています。
さらに`-subj “/CN=my root cert”`とすることで、インタラクティブに項目を入力しないようにしています。
(なのでコピペすると同じものが作られるはず….)

“`
openssl req -x509 -nodes -days 365000 -newkey rsa:4096 -keyout root.key -out root.pem -subj “/CN=my root cert”
“`

実行例
元記事を表示

olivereを使ってElastic Searchのネストした集計を実行する

# はじめに
Go言語のElastic Searchのクライアントを調べると、
– [elastic社公式クライアント](https://github.com/elastic/go-elasticsearch)
– [olivere](https://github.com/olivere/elastic)

の2つが候補になるかと思います。

今回は`olivere`クライアントを使った、
ネストした集約クエリの実装方法と実行結果の取得方法についてまとめます。

(補足) olivereクライアントは2022/07/23現在Elastic Search v8以降に対応していないので注意してください

### 実行環境
Go: `ver 1.18`
Elastic Search: `ver 7.17`
 
# サンプルIndex
サンプルとして以下ようなIndexを想定します
“`
POST users/_bulk
{ “index” : {} }
{ “name”: “user1”, “age”: 15, “created_at”: “2022-07-01” }
{ “index”

元記事を表示

【#36 エンジニア転職学習】Go WebApp API認証・作成

# はじめに
富山県に住んでいるChikaといいます。
毎日投稿を目標に、バックエンドエンジニア転職に向けた学習内容をアウトプットします。

使用しているGoのUdemy教材後半部分である、
Webアプリ作成演習を学習していきます。

バックエンドエンジニアになるまでの学習内容は以前投稿した以下の記事を基にしています。

https://qiita.com/Chika110/items/ef54dddd565a0193ef44

# 本日の学習内容
本日でGoでのAPI認証、作成までを一通り終了しました。

* **API認証・作成 ←Topics!!**

# API認証・作成
実際に講座で使用するビットコインAPIのコードを書きながら、APIの作成手順やポイント等を学習しました。
今時点では完全に理解できない部分もありましたが、**基本的な構文をそのまま使用したりする**ところもありました。ですので、ネットワーク関連の重要パッケージについて理解していれば、難なくコーディングできそうです。
#### ポイント
* 各APIのdocumentから、requestやresponseのフ

元記事を表示

GolangのPackageとModuleについて

GolangのPackageとModuleを使ってGoファイルを分けて関数定義する方法がわからなかったので、調べて実行してみた2022年7月時点の情報を記載します。

## Goファイルを作成
次の2つのファイルを作成します。
“`Go:test1.go
package main

import “fmt”

func main() {
fmt.Println(“test1”)
test2()
}
“`
“`Go:test2.go
package main

import “fmt”

func test2() {
fmt.Println(“test2”)
}
“`
## module作成と実行
“`
MacBook-Pro tmp20220722 % go mod init main
go: creating new go.mod: module main
go: to add module requirements and sums:
go mod tidy
MacBook-Pro tmp20220722 % ls
go.mod t

元記事を表示

StreamServer Interceptorでコンテキストを上書きしたい時

Interceptorで認証情報などの値をコンテキストに入れて使いたいときがあります。
Unary RPCだと、第一引数で受け取ったコンテキストをそのまま使えばいいですが、Stream RPCの場合は一工夫必要だったのでメモしておきます。

ContextとServerStreamをEmbedded fieldとして持つStructを定義して、それをhandlerに渡します。
実際のStreamの処理でContext()を呼び出せば、値を入れたコンテキストを取り出すことが出来ます。

“`go
func myStreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
ctx := context.WithValue(ss.Context(), “key”, “value”)
return handler(srv, &serverStreamWrapper{
Serv

元記事を表示

go で private なメソッドは他パッケージでは実装できない

# これは何?

go で

“`go:go
type Foo interface {
private()
}
“`

みたいなインターフェイスがあって、この `private` を他パッケージで実装可能かどうか調べた。

# C++ の場合

C++ の場合。
アクセス制御とオーバーライド可否は直行している。

“`c++:c+++
struct base
{
private:
virtual void foo() = 0;
};

struct derived : public base
{
private:
virtual void foo() override {}
};
“`

private なメンバ関数をオーバーライドできる。

たまにそういうコードを見る。まれに便利。

# Go の場合

public なインターフェイスに private なメソッドを用意して。

“`go:foo/foo.go
package foo

type Foo interface {
private()
}
“`

それを別のパッケージで実装すると。

“`go:

元記事を表示

Next.js と Go で WebSocket 通信を行おう【環境構築編】

# はじめに
今回は Next.js と Go を使った WebSocket 通信のやり方を2回に分けて紹介していきたいと思います。

1. [Next.js と Go で WebSocket 通信を行おう【環境構築編】](https://qiita.com/1129-tame/items/39101ed81039542198dc) <- 今回の記事 1. [Next.js と Go で WebSocket 通信を行おう【接続編】](https://qiita.com/1129-tame/items/2036d89915b3a3d026be) 私は現在個人開発でWebSocketによる双方向通信を利用したサービスを開発しています。 Next.js で立てたサーバーと Go で立てたサーバーを WebSocket で接続する記事があまりなく、結構苦労したので備忘録代わりにまとめたいと思い、この記事を書きました。 まずは環境構築編です。第1回目のこの記事ではモノレポでサーバーを立ち上げて Next.jsの default 画面と Go のサーバーで `Hello, World!` が出

元記事を表示

蟻本の問題をGo言語で解いてみた(p21 三角形)

## 問題: 三角形
n本の棒があります。棒iの長さはaiです。
あなたは、それらの棒から3本を選んでできるだけ周長の長い三角形を作ろうと考えています。
最大の周長を求めなさい。
ただし、三角形が作れない際には0を答えとしなさい。

## 制約
– 3 <= n <= 100 - 1 <= ai <= 10^6 ## 解法 3辺で三角形が作れる必要十分条件は、`最も長い辺の長さ < 他の2本の辺の長さの和`が成り立つ事である。
これを利用して、全ての3辺の全ての組み合わせをチェックし、三角形が成立する組を探索する(他にn log nで解ける解き方もある)。
具体的な実装としてはは、3辺の組み合わせを3重ループでチェックし、
三角形が成立した場合は、すでに発見済みの周長の値と比較し、大きい方を答えの変数に保持する。

## 解答

“`go
package main

import (
“fmt”
“math”
)

func main() {
// 入力パターン1: 答えは12
n := 5
a := [5]float64{2, 3, 4, 5,

元記事を表示

オジオバサン・プログラマーのためのGo言語まとめ(Javaがいまいちシックリこない人向け?)

私の住む集合住宅の1階には(小さな)保育園がある。

先日、カミさんと出かけて戻ってきたら、入り口に3歳ぐらいの子供たち数人と保育士さんがいた。一人の女の子が保育士さんに大きな声でこういった。

「オジイちゃんとオバアちゃんだった」

あのね、「オジイちゃんとオバアちゃん」、じゃなくて、「オジさんとオバさん」だからね。これからは、間違わないでね。きっとあの子の父母も祖父母も若くして子供を生んだんでしょう。そうに違いない。

![P5190025.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442113/6aa8fe51-17a2-8dca-3b78-d765a9e177dd.jpeg)

さて、おじいさんに間違えられる年になってから、Go言語をメインで使ってみようかなと思案中なので、文法事項などをできるだけ簡潔に、ほかの言語の経験がある程度ある人なら、意味がわかるようにまとめてみた(若い人なら、一度見れば覚えてしまうでしょうが、オジさん、オバさん(略してオジオバさん)になると繰り返し見ないと覚え

元記事を表示

OTHERカテゴリの最新記事