- 1. Goで package … is not in GOROOT エラーが発生した時の自己解決備忘録
- 2. 一般大学生がGo言語に初めて触れてみた!!【スターティングGo言語】
- 3. Oracleを使うGoアプリのコンテナ化メモ(準備編)
- 4. 【Golang】Go言語で簡易的なcatコマンドを作成してみた
- 5. Visual Studio CodeでGoのフォーマッターが動作しなかった
- 6. Golangのinterfaceでポインターを試した
- 7. ARISE tech blogのGoソースコードをもっとGoっぽく書いてみた
- 8. ゆめみ株式会社の採用試験をGoで解いてみた
- 9. go言語で新しいプロジェクトを作る(go v1.18)
- 10. WebのフロントエンドでもDockerで開発環境を構築する理由。(余談としての脱node依存開発)
- 11. 【golang】DockerでGoの開発環境を構築する
- 12. Goのinterfaceでつまづいてしまったあなたへ
- 13. discordのwebhookを使用してgoから通知を送ってみた
- 14. ISUCONのGo利用割合
- 15. Goでスライスと配列の違いを知ったのでそれをまとめてみる
- 16. Golangにおけるポインタの必要性を理解したのでその解説
- 17. Azure Functions と Go 言語で Web API 開発
- 18. 【Golang】interfaceってなんだっけ?
- 19. Treasure2022参加記
- 20. draw.ioを操作するライブラリをGolangで書いてみた
Goで package … is not in GOROOT エラーが発生した時の自己解決備忘録
# 前提条件
### 今回のgoバージョン
– golang:1.19.1-alpine (dockerイメージ)## 参考にしたサイト
https://qiita.com/fetaro/items/31b02b940ce9ec579baf上記のサイトより、二つの挙動があることがわかった。
– GOPATHモード
– モジュールモード## 現在のモードを調べる
なんでも良いので外部のライブラリをimport文に含めて、`go run`を行う。(go getしない)
“`go:~~.go
import (
“go.mongodb.org/mongo-driver/mongo”
)
“`エラー文に `~~/scr/~~`のパスが表示された場合、同じ解決策が通用するかもしれない。
# 解決方法
“`shell:ターミナル
$ go mod tidy
“`
– [tidyについて](https://note.com/artefactnote/n/n6709b53a318f)## 補足
多くのwebページで go.modファイルに`replace`を
一般大学生がGo言語に初めて触れてみた!!【スターティングGo言語】
# はじめに
最近インターンシップや本選考を見るとやたら**Go言語**を使っている企業が多い気がします(笑).
なので,Go言語について勉強したいなと思い,書籍を購入しました.
今回は,Go言語初学者として[スターティングGo言語(松尾 愛賀/翔泳社)](https://www.amazon.co.jp/dp/4798142417?tag=keiji009-22&linkCode=ogi&th=1&psc=1)を購入し,当書を読んで感じたGoの印象を書いていきたいと思います!!
誰かしらの参考になればな…と思いながら書きましたので,気軽に見てもらえると嬉しいです?[](https://www.amazon.co.jp/dp/4798142417?tag=keiji009-22&linkCode=ogi&th=1&psc=1)
# 当書のいいところ
まず
Oracleを使うGoアプリのコンテナ化メモ(準備編)
# はじめに
私のこれまでの記事を見てわかる通りJava関連しかやって来ませんでした。
また利用するDBもPostgreSQLがメインだったのでOracleDBとは幸いなことにあまり関わってこなかったのですが、仕事関係で色々ありGo言語+OracleDBを使うことになりました。最初は「えっ?Oracle?MySQLとかPostgreSQLでいいやん、駄目なの?」と思いつつも「了解でーす」というノリで引き受けてしました。
いざ始めてみるとライブラリの設定やアプリのDockerイメージビルドでかなり苦労しながらもGithubのIssueやStackoverflowと睨めっこが続きました。というわけでこの苦労を忘れてしまわないように、メモとして残そうと思い立ち今に至ります。
# 環境
私の実行環境は以下の通りです。| 環境/ツール類 | バージョン |
|:————-|:———-|
| OS | Windows10 |
| Ubuntu(WSL) | 20.04.4 |
| Golang | 18.5
【Golang】Go言語で簡易的なcatコマンドを作成してみた
# はじめに
Go言語を勉強する中で簡易的なcatコマンドを作成したのでまとめます。
Go言語に慣れるための練習として書いているため、エラー処理などは思いついたまま書いています。よりGo言語らしい(?)書き方があると思いますが、今回は気にせず書いています。
簡易版ということで、オプションは`[-n]`と`[-b]`の2つだけを実装しています。# コード
今回はオプション機能に関するコードを main.go とは別のファイルに書いています。
よって、goのファイルは `main.go` と `cat_option.go` の2つになっています。## main.go
“`main.go
package mainimport (
“bufio”
“flag”
“fmt”
“log”
“os”
)func main() {
var (
n = flag.Bool(“n”, false, “行番号を付けて表示する”)
b = flag.Bool(“b”, false, “空行以外に行番号を付けて表示する”)
)flag.Parse()
// 引数
Visual Studio CodeでGoのフォーマッターが動作しなかった
# はじめに
Visual Studio CodeでGoプログラムを書くとき、フォーマッターが動作しなかった。動作をさせるまでに行った方法、調べた記事を記載する。
様々な方法を試した結果、動作するようにはなったが、何が原因で動かなあったのかわからなかった。
個人の作業記録として記事を残します。# 実施したこと
1. Visual Studio Codeのsetting.jsonにgoのフォーマッタを設定。
これだけでは動かなかった。
“`
“[go]”: {
“editor.defaultFormatter”: “golang.go”
},
“`参考記事
[vscodeでgolangが自動整形されない問題](https://zenn.dev/t_morooka/articles/24ce28f4844895
)2.Visual Studio CodeのGoの拡張機能をアンインストール、再度インストースし直した。
直らなかった。
3.GoがUbuntuにダウンロードされているか、WSLを起動して以下コマンドを叩くことで再度確認した。
“`
go
Golangのinterfaceでポインターを試した
# はじめに
直近はRUSTを勉強していますが、以前勉強したGolangを忘れないように、[Tour of Go](https://go-tour-jp.appspot.com/welcome/1) を利用して復習します。interfaceの理解に対して、忘れないようにここでメモを残ります。
Key: Struct, pointer, interface# Target
part1: インタフェースでポインターを出力できるようにする
part2: インタフェースが出力タイプを指定する際に、ポインター指定クラスが利用して、errorの再定義ができる# コード試す
## part1
~~~main.gopackage main
import “fmt”
// インタフェース
type I interface {
M()
}// 構造体
type mystring struct {
S string
}// mystringのポインタクラス
func (f *mystring) M() {
if f == nil {
fmt.Println(““
ARISE tech blogのGoソースコードをもっとGoっぽく書いてみた
# はじめに
こんにちは。
ARISE analyticsのエンジニアの井上です。弊社ARISE analyticsの技術ブログに先日Goについての記事を投稿しました。
そのページは[こちら](https://www.ariseanalytics.com/activities/report/20220704/)
この記事ではサーバーサイド開発として使われるPHP, Javaと比較して
Goの書き方とパフォーマンスについて語りました。
ベンチマークの比較を行う上で、なるべく処理方法を共通とするために
Goらしさを排除した書き方をしました。
本記事ではブログで紹介したGoらしくないソースコードを
筆者が考えるGoらしいソースコードを紹介します。
# Goらしいソースコード
では先にGoの特徴を踏まえたコードを見ていきましょう。
まずはバブルソートの例です
“`Go:main.go
package mainimport (
“fmt”
“math/rand”
“time”
)type intSlice []int
func main() {
ゆめみ株式会社の採用試験をGoで解いてみた
Goについて勉強中なのですが、自分はこれまであまり実装を行ったことがなく、チームビルディングやビジネス寄りを担当していたことが多いため、とにかくなんでもいいから書いてみようと思い、[ゆめみ株式会社のサーバーサイド採用試験サンプル](https://www.yumemi.co.jp/serverside_recruit)で練習してみました。
解いていく中で、ここもっと改善できそうだなとか、ここの仕様は次にコード見た時忘れちゃってそうだなというところはコメントに残して、あとはそんなにコメントしないように意識しました。
まだまだ他の人の解法記事などを読んでいると、自分のコードはもっさりした関数になっていてかっこよくないなと思ってしまいます。
すこしでもかっこいいコードが書けるようにもっと場数踏まなきゃと思います。## 問題から何が必要かを考えるフェーズ
まず、問題文を見て、どういった処理が必要かを洗い出しました。
1. CSVファイルの読み込み
2. 各プレイヤーの平均スコアを算出
3. 平均スコアの降順に並び替え&順位づけ
4. 10位までのプレーヤーを抽出
5. CSVファイルに書
go言語で新しいプロジェクトを作る(go v1.18)
### プロジェクト作成とHello World
Go(v 1.18)で新しいプロジェクトを作るにはまずプロジェクト用に適当なフォルダをつくります。
たとえばwebappフォルダを作ります。私はubuntuを使っていますが、Windowsを使っている人はGUIからフォルダの作成をしてください。
“`
$ mkdir ./webapp
“`
そしたらまずはここがgoのプロジェクトのフォルダだと宣言します。
“`
$ cd ./webapp
$ go work init
“`
実際に作業をするのはモジュールのフォルダなのでモジュール用フォルダを作ります。
“`:webapp
$ mkdir ./helloworld
“`
ここでここがモジュールのフォルダだと宣言します。
“`:webapp
$ cd ./helloworld
$ go mod init example.com/webapp/helloworld
“`
なお、パッケージとして一般公開したい場合はモジュール名にちゃんと命名規則があるようです。
参考: https://go.dev/blog/package-na
WebのフロントエンドでもDockerで開発環境を構築する理由。(余談としての脱node依存開発)
# 1.数ヶ月ぶりにビルドしたらエラーになる
開発中は問題がないのですが、数カ月ぶりにWebpackなりをつかってビルドしてみるとエラーがでる。
フロントエンド開発者なら一度は経験したことがあるのではないでしょうか?
いろんな原因があると思いますが、以下のような条件で起こることが多いのではないでしょうか?:::note alert
・複数のプロジェクトを開発する端末に直接配置している。
・nodeenvなどのバージョン切り替えツールをいれずグローバルでnodeを使っている。
・ライブラリをプロジェクト内で限定せずグローバルでつかっている。
:::要は、手元のMacやWindows、Ubuntuなど開発端末上に直接、複数のプロジェクトを配置して開発しつつ、nodeを共有したり、安易にバージョンアップとかしているとビルドができないなどのエラーが発生したりします。
# 2.nodeをつかったフロントエンドのビルドの脆さ
## (1)特定の団体がビルドツールをメンテしてくれる言語
ビルドというのは、Java、Go、Rustなど型付きの言語ではよくしますが、ビルドツール自体が
【golang】DockerでGoの開発環境を構築する
:::note info
当コンテンツと同様の記事を Zenn でも公開しています。
:::https://zenn.dev/yusuke49/articles/9ed37838861b1d
Goでボイラープレートを作っていくのですが、その際にDockerを利用して環境構築をしました。
## こんな方におすすめ
– Goで開発を進めていきたいけど極力自分のPC環境を汚したくない
– go module を利用する
– 一つのアプリ開発を通して、Go以外にもnodeやRDBなどの他の技術も必要になる## 前提
Dockerとdocker-composeが用意できている前提で進めていきます。
Macならターミナルで、WindowsならPowerShellで以下のコマンドを叩くと確認できます。
“`
$ docker –version
$ docker-compose –version
$ docker version
$ docker-compose version
“`# Docker
Do
Goのinterfaceでつまづいてしまったあなたへ
どうも ryo_grid です。
最近は自作RDBMSしています。皆さんもどうですか?
[自作RDBMSやろうぜ!](https://ryogrid.github.io/dbms-jisaku/)というのはさておき、自身はGoのinterfaceの挙動がしばらくよくわからなくてハマったのですが、そこらへんの簡潔な解説がGo公式サイトにも無いし、適当な技術記事も見当たらないなーと思ったので自分で書くことにしました。
細かいことを気にしなければ話は単純です。
なお、ハマりやすいところについてだけ解説するので、それ以前の知識は別途得てください。
# Goのinterfaceな型はポインタを保持する箱
– [Goのinterfaceをデータ構造から理解する – Zenn](https://zenn.dev/sivchari/articles/be6cc55d313b12#interface%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0)こちらの記事により詳しく書いてありますが、Goのinterfaceとして定義された
discordのwebhookを使用してgoから通知を送ってみた
無料版slackだとデータが消えていってしまうということでslackに飛ばしていた通知をdiscordに飛ばせないかと思い実装をしてみました!
参考文献: https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
# 1. webhook_url取得
まずはここからですね。1. 通知したいチャンネルの設定を開きます
![スクリーンショット 2022-09-10 13.27.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645779/ec57608c-7b4d-c290-4c9c-1de2630dbce8.png)2. 連帯サービス > ウェブフックURLコピーをクリックして取得します
![スクリーンショット 2022-09-10 13.29.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1645779/ba
ISUCONのGo利用割合
Goの紹介を書くために思い立ってグラフ化してみました。情報源はこちらです。
https://isucon.net/
2014ぐらいまでは、利用言語は自由記述と本文に書いてあったり、無記名のチームもあったようなので参考値です。2013では予選はGoで突破したけど本戦は別の言語で出たチームがあったみたい(2チーム突破で8%だったけど決勝は4%になってた)。
Goの開発効率と実行効率を証明する証拠として、JTBCで上司を説得するような場合に便利にご利用いただけるかと思
Goでスライスと配列の違いを知ったのでそれをまとめてみる
[前回の記事](https://qiita.com/wangqijiangjun/items/bac983a8d9f235d7cef0)でポインタの必要性を勉強しました。
まだ読んでない方がいらっしゃいましたら是非読んでやってください実務で`Go`を使ってく中で聞きなれないスライスという言葉を知って、それが何やら配列と関係性があるみたいなので今回はそれについて調べたので、今回はそれをまとめていこうとおもいます
今回の目次は以下の通りです
1. 配列とは
2. スライスとは
3. 配列とスライスの違い今回の記事はハンズオンでやっていくといいと思いますので、[こちら](https://go.dev/play/)のサイトから実際に手を動かしてみてください!
最後まで読んでいただけると幸いです!## 配列とは
`Go`における配列とはどんなものかというと、**同じデータタイプのデータを保存するためのもので、固定長のもの**です。
といってもよくわからないので詳しく見ていきましょう。### 配列の作り方
まず配列を作ってみましょう。
配列の作成の仕方は以下の2つの書き方がありま
Golangにおけるポインタの必要性を理解したのでその解説
今までRoRやPHPなどの動的型付言語をメインでやってきたんですが、今回行っているインターン先で、`Go`を使うことになったので、勉強しています。
そのなかで、初めて知った概念であるポインタについて今回は解説していこうと思います。
今回の記事を読んでわかることは以下の3つです。
* ポインタとはなんなのか
* ポインタの書き方
* ポインタってなぜ必要なのかこの2つがわかるようになると思いますので、最後までお付き合いお願いいたします。
なお、この記事では公式のPlayGroundからハンズオンでコピペではなく、手を動かしてみるのをお勧めします
https://go-tour-jp.appspot.com/welcome/4
## ポインタとは何なのか?
簡潔に言えば、ポインタとは**アドレス情報であるメモリにアクセスするためのもの**です。
メモリとは一時的にデータが保存されている場所でその中に変数が保存されています。メモリについては[こちらの記事](https://qiita.com/Sekky0905/items/447efa04a95e3fec217f#%E5%
Azure Functions と Go 言語で Web API 開発
# はじめに
この記事では、Go言語を使って、与えた二つの数値の和の結果を返すような Web API を作成します。GETリクエストを想定していて、二つの数値はクエリ文字列(URLパラメータ)で渡します。
デプロイ先としてはAzureのリソースを使います。よろしくお願いします。
【イベント】Go強化月間~開発する上で知っておくべき知見を共有しよう~
https://qiita.com/official-events/ae80b010f51f7018891a
# 環境
– Windows 11
– [Go 1.17.7](https://go.dev/dl/)# 必要なもの
– [Visual Studio Code](https://code.visualstudio.com/download)
– [Azure Functions用のVisual Studio Code 拡張機能](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions)
– [
【Golang】interfaceってなんだっけ?
# はじめに
Zennに投稿されていた[『オレの書くGoは間違っていた』](https://zenn.dev/pranc1ngpegasus/articles/a8c92235bec641)という記事を読みました。
この記事で得た知見は「引数はinterfaceで受け入れて、戻り値は具体的な型(例えばstruct)で返却する」というのがGo流という話です。
せっかくの機会なので、「interfaceってなんだっけ?」と考えてみることにしました。
元記事に触発されて書き始めたものの、interfaceについてほんわか考える記事です。# そもそもinterfaceってなに?
– Goに限らず、(もっと言えばプログラミングに限らず)interfaceとは**抽象化の手段の一つ**だと思っています。もうちょっと簡単に言えば、**何かをふわっと捉えたい時に使うもの**です。[^1]
– 例えば「洗濯物を干す」という日本語を考えてみましょう。![sentakumono_niwa.png](https://qiita-image-store.s3.ap-northeast-1.amazona
Treasure2022参加記
# はじめに
久しぶりの投稿です。
8月の3週間を使ってCARTA HOLDINGS(旧Voyage Group)のサマーインターン「Treasure」に参加してきたので、今回はその中で開発したサービスの内容などを振り返っていこうと思います。実はここに書いてある以上に難所がたくさんあったのですがその辺はその部分の実装を担当した他のチームメンバーが参加記を書いてくれる…はず!
# 前提
– 開発期間は設計含め6日半(1日に使えるのは8時間。うち1時間は休憩)
– 使用技術は自由。AWSリソースも常識的な範囲で制限なく使える。
– 価値を創るプロダクトを作ること
– 社員サポーターの皆様が手厚くサポートに入ってくださる(基本的に「分からない」は言えば迅速かつ丁寧に拾ってもらえます。)人事のさとみんさんが書かれた[こちらの記事](https://techblog.cartaholdings.co.jp/entry/treasure2022-planning)だとイメージが掴みやすいと思います
# どんなサービス作ったの?
短時間の筋トレをしたい人をリアルタイムでマッチン
draw.ioを操作するライブラリをGolangで書いてみた
## 背景
+ 画面イメージをdraw.ioを作成し、仕様書に手で貼り付けるなど、面倒な作業があったので自動化したかった。
+ 自動化する中で、draw.ioを操作するライブラリを作る必要があった
+ Golangの実践の機会を増やしたかった
## 作ったもの
自動化まではまだ達成できていないが、draw.ioで使われるデータをいじれるようなライブラリを作った。
このライブラリを使うことで、draw.ioに自動で図形を挿入したり,draw.ioのライブラリを楽に作れるようになる。(使用例は別で記事を作成する予定)[Githubのリンクはこちら](https://github.com/capybara-alt/libdrawio)
“`golang:main.go
// drawioファイルをロードし、MxFile構造体にマッピング
mxfile, err := libdrawio.NewMxFile(“./mxfile_test_1.drawio”)
if err != nil {
t.Fail()
}// MxFile構造体のDiagramの値を