- 1. アルゴリズムについて
- 2. サンプルコード
- 3. そもそも例外機構ってなに?
- 3.1. golangでmultipart.File型の画像をリサイズ〜S3にアップロードするまで
- 3.2. Using cgo with the go command
- 3.3. Go言語の基本❷
- 3.4. Go言語の基本❶
- 3.5. 2021年Go言語フレームワークスター数比較
- 3.6. Go言語インストール後の実行環境テスト
- 3.7. Golangで自作Logger中でzapライブラリを使う際、CallerにLoggerより上の階層を出す方法
- 3.8. LeetCodeに毎日挑戦してみた 168. Excel Sheet Column Title(Python、Go)
- 3.9. Go言語の環境構築
- 3.10. Go言語について触れてみる
- 3.11. キカガク流アルゴリズム論をGoで書く 素数判定
- 3.12. Go 言語スプレッドシートライブラリ:Excelize 2.3.2 がリリースされました
- 3.13. 文系卒がSlerからWeb系自社開発(Go/AWS/機械学習)に転職した話
- 3.14. QiitaAPIでインフラエンジニアyutaさんのストック記事を取得する
- 4. ソースコード
Go言語の標準パッケージ
# Goの標準パッケージ
プログラミング基本からGoの理解を文字におこして行こうと思います!
[Go言語の基本❶はこちら](https://qiita.com/coxcoa/items/01cd4e30e965bcebb3ee)
[Go言語の基本❷はこちら](https://qiita.com/coxcoa/items/55e126bcbf67cf7505bc)### 標準パッケージ
Goには標準パッケージと呼ばれるものがあり、100種類以上の便利な機能が
はじめから用意されている
これらを自分たちのプログラム内で自由に用いることができる“`
fmt コンソールに出力できる
math/rand ランダムな数値を生成できる
time 時間に関する処理ができる
“`### パッケージのインポート
“`go
package main
import “fmt” //標準パッケージをインポート
“`
インポートは、「package main」の下に「import “パッケージ名”」と記述### パッケージの使い方
“`go
package m
Goでアルゴリズムを学ぶ@全検索_線形検索法
Go基礎構文の理解と、アルゴリズム脳トレが目的です。
アルゴリズムについて
全検索とは
可能性をすべて調べ上げて問題を解決する手法です。
しらみつぶしに全て調べる手法ですね。仕事においても、問題に対して原因の切り分けができないときは多用してます。線形検索法とは
一つ一つの要素を順番に調べていく検索方法です。
とりあえず頭から尻まで調べるといった、全検索の中で最も泥臭い部類じゃないでしょうか。サンプルコード
ひとまずコード載せます。
“`go:main.go
package mainimport “fmt”
func main() {
l := []int{1, 2, 3, 4, 5}
m := 5
r := solve(l, m)
fmt.Printf(“%v”, r)
}func solve(a []int, b int) string {
r := “NG”
for i := 0; i < len(a); i++ { if a
Go言語の条件分岐
# Goの条件分岐
プログラミング基本からGoの理解を文字におこして行こうと思います!
[Go言語の基本❶はこちら](https://qiita.com/coxcoa/items/01cd4e30e965bcebb3ee)
[Go言語の基本❷はこちら](https://qiita.com/coxcoa/items/55e126bcbf67cf7505bc)### 条件分岐とは
ある条件に当てはまるかどうかによって処理を分ける
例えば、明日の天気(条件)によって傘を持っていくか(処理)を変える### if文
“`go
package main
func main(){
score := 100
if score > 60 {
println(“合格”) //条件が成り立つ時の処理
}
}//コンソール
合格
“`
if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能### if文の条件式
“`go
package main
func main(){
score := 100
if score >= 60 {
Goのエラー処理について ※雑な記事です。
Goには例外機構がないが、関数が複数の戻り値を返すことができる特徴を生かして以下のようなエラー処理を実装できます。
“`go:
result, err := method()
if err != nil {
//エラー処理
log.Fatal(err)
}
“`「へえ、そうなんだ。とりあえずエラー処理はこう書けばいいんだ。」
この程度の理解度で問題ない気がしますが、なんとなく気になったのでまとめてみます。(※結局まとまりませんでした。)そもそも例外機構ってなに?
実務で使用しているVB.NETでは例外処理は以下のように実装します。
“`vb:
try {
処理
} catch ( 例外のクラス 変数 ) {
例外処理
} finally{
後処理
}
“`例外機構ってなに?とか書いたけど、構文に当てはめればエラー処理を実装できますよってだけですね。その構文がGoには存在しません。
エラーハンドリングできないとか致命的じゃん!!となりますが、そんなことはなくGoでもエラー処理は実装できます。その一つが最初に記載したも
golangでmultipart.File型の画像をリサイズ〜S3にアップロードするまで
# 概要
golang製のAPIサーバーを個人開発する中で、フロント側から受け取った画像ファイルをリサイズ等編集して、S3にアップロードするロジックを実装しました。その際、結構苦戦したので、要点をまとめていきたいと思います。# 実践
## multipart/form-dataをパース
~~~go
file, _, err := r.FormFile(“image”)
~~~
fileにmultipart.File型としてgoで扱えるようになります。## バッファーに内容を流し込む
~~~go
img := &models.Image{
UserID: uid,
Buf: &bytes.Buffer{},
}_, err := img.Buf.ReadFrom(file)
if err != nil {
return &models.Image{}, err
}
~~~今回のアプリはレイヤードアーキテクチャ+DDDを採用しているので、Imageモデルをポインタ型で宣言して、参照渡しでバッファーにデータを流し込んでます。この時バッファーを格納す
Using cgo with the go command
[Using cgo with the go command](https://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command)
###Cのコードが認識されない
“`go:c.go
// #include
import “C”
“`//とimportの間に空行が入ってると前文(preamble)として認識されないようだ。
Go言語の基本❷
# Goの基本
プログラミング基本からGoの理解を文字におこして行こうと思います!
[Go言語の基本❶はこちら](https://qiita.com/coxcoa/items/01cd4e30e965bcebb3ee)### 変数定義と代入の違い
“`go
package main
func main(){
n := 100
n := 200
println(n)
}//コンソール
:=の左側に新しい変数がないとエラーになる
“`
変数定義の「:=」と、代入の「=」の違いに注意
2度変数nを定義しているためエラー### 変数が使える場所
“`go
package main
func main(){
println(n) //使用不可
n := 100
println(n) //使用可能
}//コンソール
変数nが定義されていないとエラー
“`
変数は、定義したあとでしか使えない
コンソールには、「変数nが定義されていない」ことを表すエラー### 使わない変数
“`go
package main
func main(){
a :=
Go言語の基本❶
# Goの基本
プログラミング基本からGoの理解を文字におこして行こうと思います!### 文字列とは
“`go
package main
func main(){
println(“Hello, Go”)
}
“`
“”(ダブルクォーテーション)で囲んでいないとエラーが発生する### 出力の命令
“`go
package main
func main(){
println(“Hello, Go”)
}//コンソール
Hello, Go
“`
printlnというのは、Goが用意している「命令」の1つ「コンソールにprintln()の中のものを出力せよ」という命令
→コンピュータが文字列をコンソールに出力### プログラムの構成
“`go
package main
func main(){
println(“Hello, Go”)
}
“`
Goのコードのファイルは、パッケージ定義部や関数定義部によって構成ここでは「package main」と書かれたファイルの、main関数の{ }の中に命令を書くと
それが順に実行される### 数値を
2021年Go言語フレームワークスター数比較
Go言語のフレームワーク(マイクロもフルスタックも含む)についてGithubの星比較です。(2021/01/05集計)
2021年版が見つからなかったので。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285581/8c78aa78-c058-ed45-3712-600cf7d338ba.png)
ginが強いですねー
—
参考
Go言語Webフレームワークランキング
https://qiita.com/loftkun/items/1a9951d1864bebdc51e1Golang フレームワーク比較
https://qiita.com/yumin/items/5de33b068ead564ebcbf
Go言語インストール後の実行環境テスト
# 最終確認
インストール、Version確認後
VSCordでフォルダを作成し、期待する結果が出力されるまでテストする
[Go言語の環境構築はこちら](https://qiita.com/coxcoa/items/39782fe00be03de2dcf7)# 実行環境テスト
“`
# テスト用ディレクトリを作成
$ mkdir -p ~/go/src/test# ディレクトリへ移動
$ cd ~/go/src/test# テスト用のファイルを作成
$ touch test.go# テスト用のファイルを編集
$ vi test.go
“`“`go
//test.go
package main
import “fmt”
func main() {
fmt.Printf(“test, go\n”)
}
“`“`
# 作成したディレクトリへ移動
$ cd ~/go/src/hello# ビルドしてバイナリファイルを生成
$ go build“`
:wqで保存し、ビルドしてバイナリファイルを生成#### 実行する
“`
$
Golangで自作Logger中でzapライブラリを使う際、CallerにLoggerより上の階層を出す方法
[この記事](https://qiita.com/emonuh/items/28dbee9bf2fe51d28153)を参考に、[zap](https://github.com/uber-go/zap)というログライブラリを使ってみました。
その時にログ出力されるCallerの情報についてハマったことをメモとして残します。*2021/1/6追記*
*`conf.Build(zap.AddCallerSkip(x))` のように指定することで変更できることを知りました。*# おさらい
* よく見かけるmainに記載するコーディング例で実行した場合を記載します。
* 出力例からわかる通り`main/main.go:30` という内容が出力されます。
* これはzapのログを出力したファイルのディレクトリ、ファイル、行が出力されており、トレースしやすい内容となっています。“`go
package mainimport (
“go.uber.org/zap”
“go.uber.org/zap/zapcore”
“time”
)func main() {
conf
LeetCodeに毎日挑戦してみた 168. Excel Sheet Column Title(Python、Go)
#### Leetcodeとは
[leetcode.com](https://leetcode.com/)
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。
#### 38問目(問題168)
#### 168. Excel Sheet Column Title
#### 問題内容
> Given a positive integer, return its corresponding column title as appear in an Excel sheet.
>
> For example:
>
> “`
> 1 -> A
> 2 -> B
> 3 -> C
> …
> 26 -> Z
> 27 -> AA
> 28 -> AB
> …
> “`
>
> **Exa
Go言語の環境構築
# 環境構築に必要なもの
Go、VisualStudioCode、Goの拡張機能の3つをインストール### ❶Goのインストール
Goは、homebrewを使ってインストール“`
ターミナルを開く
spotlightからターミナルを検索して起動
$ brew update
$ brew install go
“`まず、homebrewを最新バージョンにしておく
### ❷確認
“`
$ go version
“`次のコードを実行して、goがインストールされているか確認
バージョンが返ってくれば、インストールされていることが確認できる![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/958284/1a1ad428-6cc3-7fd1-2b15-e4d8cc57b3ab.png)
### インストールページから
[Goインストールページ](https://golang.org/doc/install)インストール後にちゃんとできているか❷と同様に確認
“`
Go言語について触れてみる
# Go言語とは
“`
2009年にGoogleが開発したプログラミング言語
“`Androidアプリの開発、iOSアプリの開発も可能
ちなみにGo言語の正式名称は「Go」
それだけだと別の意味にとらえられてしまうので、GolangやGo言語と呼ばれることが多い# C言語の生みの親が開発した言語
Go言語はUNIXの開発に携わったロブ・パイク氏と
UNIXの開発とC言語を開発したケン・トンプソン氏が設計Go言語はC言語を意識しながら設計されている言語で、C言語並みに処理が高速で、C言語以上にシンプルに記述することができる
時代に合わせ、より便利に使えるようにした新しいC言語。それがGo言語だと言える# コンパイラ言語
“`
Go言語は、コンパイラ言語
“`### コンパイラ言語とは
機械語に一括して変換してから実行するプログラミング言語のことで
処理が高速という特徴があるその高速に処理できるコンパイラ言語の中でも、Go言語はより高速に処理ができる
JavaやC#は、仮想マシンを介して実行されるのに対して、Go言語は仮想マシンを介さずに実行される
キカガク流アルゴリズム論をGoで書く 素数判定
## やったこと
半年以上前に受講したudemyの講座をGo言語でやってみる。【キカガク流】プログラミング力向上のためのPythonで学ぶアルゴリズム論(前編)
https://www.udemy.com/course/algorithm1/## この講座の学び
– いきなり書き始めないで、言葉で処理を組み立てる。
– はじめは最小の範囲で組み立てる。
– とりあえず動くコードを書く。
– そこからリファクタリングし、より品質を上げる。(今回はスピードの向上)## お題:素数判定
– 受け取った値までのすべての素数を表示するプログラムを作成する。
– 以下のような結果を期待する。“`
> go build main.go
> ./main
100 <-入力 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 <-出力 ``` ## 1回目 とりあえず動くところまで作ってみる。 #### 処理の順序 i = 判定される数字 s = 判定するために割る数字 1. 2
Go 言語スプレッドシートライブラリ:Excelize 2.3.2 がリリースされました
![Excelize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144042/dcae5ad8-91ba-38ab-2d64-6d0d6c3c3260.png)
[Excelize](https://github.com/xuri/excelize) は、純粋な Go で記述されたライブラリで、XLSX / XLSM / XLTM ファイルの読み書きを可能にする一連の関数を提供します。Microsoft Excel™ 2007 以降で生成されたスプレッドシートドキュメントの読み取りと書き込みをサポートします。 高い互換性により複雑なコンポーネントをサポートし、大量のデータを含むワークシートからデータを生成または読み取るためのストリーミング API を提供します。
場合によっては、既存の Excel ドキュメントコンテンツの読み込み、新しい Excel ドキュメントの作成、既存のドキュメント(テンプレート)に基づく新しい Excel ドキュメントの生成、Excel ドキュメントへのイ
文系卒がSlerからWeb系自社開発(Go/AWS/機械学習)に転職した話
##はじめに
はじめまして。ソラと申します。
最初に簡単に私の自己紹介をさせてください。##自己紹介
・大学の専攻は経済系
・Slerに入るまでパソコンについては何もわからない状態(ブラインドタッチもできない)
・Sler3年弱 (大きな開発経験はなし。業務用にエラー解析ツール等はNode.jsでスクラッチから個人で開発していた)といった状態で転職活動を始めました。
私が今回の転職で大事にしていた軸は__「これ開発したい!と思えるくらい好きになれるプロダクトがあり、今後も新たなプロダクト/サービスを開発しようとしてる(する気がある)自社開発企業」__でした!
エンジニアとして今後力をつけるためにも、今後新規サービスの開発、新規サービスのテックリード、などを経験できる可能性がある企業がいいなと思ったので、上記の軸を設定しました!
そして私は自社開発企業で働きたかったので、受託の要素がある会社は見ない・受けないようにしました!達成したい目標以外のものを全て捨てて、達成したい目標のみにフォーカスするのが大切だと私は思ったので、受託は受けなかったです。※自社開発+受託の企業も受
QiitaAPIでインフラエンジニアyutaさんのストック記事を取得する
インフラエンジニアyutaさんが主催のオンラインサロンで実施したもくもく会の時間で作ったプログラムになります。
GoでAPIを利用して情報を取得するための勉強をしていた時に作りました。ソースコード
“`go:main.go
package mainimport (
“encoding/json”
“fmt”
“io/ioutil”
“log”
“net/http”
)type Item struct {
Title string `json:”title”`
User Users
}
type Users struct {
Name string `json:”name”`
}func main() {
targetName := “yuta_vamdemic”
getUrl := “http://qiita.com/api/v2/users/” + targetName + “/stocks?page=1&per_page=5”resp, err := http.Get(getUrl)
if err != nil {
AWS AmplifyでLambdaを使うwith Go
Amplifyはちょくちょく使う機会があるのですが、Amplifyを介したLambdaってほぼ使った事ないぞ、と思ったので使ってみようと思い立ちました。
そしてLambdaでGoが使えるけど、ちゃんと使った事なかった気がするので使ってみたいなとついでに。# Functionが使えるらしい
FUNCTIONS – Overview
https://docs.amplify.aws/cli/function## 環境
– win10 Home(surface go) + WSL2 + ubuntu18.04
– node v14.1.0
– npm 6.14.5
– go version go1.10.4 linux/amd64# 使ってみる
## 前置き
vueを使う設定にてamplifyをsetupしておきます。
詳しくはこのあたりから。
https://docs.amplify.aws/start/getting-started/installation/q/integration/vue“` bash
$ vue create myamplifyprojec
vim学習ゲーム「PacVim」をGoで作ってみた
## 前置き
パックマンをvimコマンドで操作するゲーム「[PacVim](https://github.com/TurtleBuild/pacvim)」をGoで作ってみました。Goなので、バイナリをダウンロードしていただければ簡単に実行できます。
https://github.com/TurtleBuild/pacvim/tree/master/bin興味があれば遊んでみてください。
趣味で作った程度のものなので期待しないでください。。。## ゲーム仕様
![objects.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7342/c3aed761-439a-738f-9cf7-5d0c948b0a66.png)### オブジェクト
| char | what it does |
|:-:|:-:|
| o | 餌 |
| X | 毒 |
| G | ゴースト |### ゲーム状態
| state | conditions |
|:-:|:-:|
| ゲームクリア |