- 1. [翻訳転載] Golang Tip #14: エラーメッセージを大文字で始めたり区切り記号で終えたりしない
- 2. [翻訳転載] Golang Tip #13: 空スライスとnilスライス
- 3. Github ActionsでもPrivate Repoをgo getしたい
- 4. [翻訳転載] Golang Tip #12: 鍵作成時はmath/randの使用を避ける
- 5. [翻訳転載] Golang Tip #9: コンパイル時のインターフェイス検証
- 6. Go 言語スプレッドシートライブラリ:Excelize 2.8.1 がリリースされました
- 7. 独自拡張した型のスライスをGORM+PostgreSQLで使う
- 8. [翻訳転載] Golang Tip #7: 三項演算子
- 9. [翻訳転載] Golang Tip #6: アンダースコア Import
- 10. レスポンスボディに書き込んだ内容を置き換えるginのミドルウェアを作った
- 11. SQLServerに繋がらないとき…
- 12. Go言語初学者がエラーに立ち向かう方法: fmt.Printfデバッグ、エラーハンドリング
- 13. GoのExcelizeでExcelのセル値読み取り・R1C1形式の変換
- 14. Goでコンソールアプリのexeファイルを実行する
- 15. C, C++ユーザのためのGo言語 型編
- 16. Golang 用デバッガ delve のコマンド紹介
- 17. sqlite3-Mac
- 18. [Go] 並行処理を30分で理解?
- 19. Dockerで環境構築(GIN(GO)+Air)
- 20. Goでポインタを使うのか値を使うのかで迷ったこと
[翻訳転載] Golang Tip #14: エラーメッセージを大文字で始めたり区切り記号で終えたりしない
# はじめに
https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2
本記事は以下のツイートの翻訳転載です。
https://x.com/func25/status/1755232851401076925?s=20
# エラーメッセージを大文字で始めたり区切り記号で終えたりしない
これは、最初は少し変に見えるかもしれないですが、実用的な理由があります。
**なぜ小文字で始めるのでしょうか?**
エラーメッセージは他のメッセージと組み合わされることがあります。
もしエラー文字列が大文字で始まっていると、それが文の途中に挟まれたときに不自然に見えたり、場違いに見えたりします。
![image](https://pbs.twimg.com/media/GFvVNPvbYAAX3-r?format=jpg&name=medium)
エラーメッセージを小文字で始めると、組み合わされたメッセージに、そのメッセージをより自然になじませることができます。
“` console
// application startup failed
[翻訳転載] Golang Tip #13: 空スライスとnilスライス
# はじめに
https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2
本記事は以下のツイートの翻訳転載です。
https://x.com/func25/status/1754852685369524574?s=20
# 空スライスとnilスライス
値を持たないスライスを使用するには2つの方法があります。
– **`var`の使用: `var t []int`**
この方法は`int`型のスライス`t`を初期化せずに宣言します。
このスライスはnilとみなされます。これは、実際には基底となる配列が存在しないことを意味します。
スライスの長さ (`len`) と容量 (`cap`) はどちらも`0`です。**- リテラルの使用: `t := []int{}`**
`var`の使用とは異なり、このスライスは`nil`ではありません。
これは要素を持たない配列を基底するスライスです。**さて、慣例とみなされるのはどちらでしょうか。**
1 . **nilスライスはメモリを割り当てません**
空スライスが基底となる配列に
Github ActionsでもPrivate Repoをgo getしたい
# 目的
CIを回している時に、プライベートリポジトリの`go get`に失敗したので、それを解決します。
普段ローカルでプライベートリポジトリをインポートする際、`GOPRIVATE`環境変数を利用しているかと思いますが、同様のことをCI環境(Github Actions)で行うといった内容です。# 準備
Githubの自動トークン認証を使います。
Personal Access Token(PAT)はセキュリティ的な観点から利用しません。
自動トークン認証は`${{ secrets.GITHUB_TOKEN }}`で一時的なトークンを発行できます。権限はPATより弱いですが、`go get`するには十分です。https://docs.github.com/ja/actions/security-guides/automatic-token-authentication
# 解決方法
このように指定すると解決されます。
“`
run: |
git config –global url.”https://github-actions:${{ secrets.GIT
[翻訳転載] Golang Tip #12: 鍵作成時はmath/randの使用を避ける
# はじめに
https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2
本記事は以下のツイートの翻訳転載です。
https://x.com/func25/status/1754477930531680532?s=20
# 鍵作成時は`math/rand`の使用を避ける
暗号化や一意な識別子の作成など、鍵の生成が必要なプロジェクトでは、鍵の品質とセキュリティは重要になります。
なぜ`math/rand`を避けるべきなのでしょうか。
`math/rand`パッケージは擬似的に乱数を生成します。
つまり、乱数の生成方法(と生成時に使用されるシード)を知っていれば、生成される乱数は予測されてしまいます。
![image](https://pbs.twimg.com/media/GFkoBkAakAAJ3wS?format=jpg&name=medium)
現在時刻をシードとして使用したとしても、実行ごとに現在時刻が大きく変動することはないため、予測不可能性(`unpredictability (entropy)`)は低いままです。
[翻訳転載] Golang Tip #9: コンパイル時のインターフェイス検証
# はじめに
https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2
本記事は以下のツイートの翻訳転載です。
https://x.com/func25/status/1729871737343643902?s=20
# コンパイル時のインターフェイス検証
`Write()`関数を持つ`Buffer`インターフェースと、
それを実装した`StringBuffer`構造体を想像してほしい。以下のように、誤って`Write()`ではなく`Writeee()`のようにタイプミスをした関数を実装してしまった場合、
![image](https://pbs.twimg.com/media/GAG85AFaIAAvqvt?format=jpg&name=medium)
The error isn’t caught until runtime. By using the trick below, the compiler will alert you with an IDE error message:
エラーは実行時まで発見されません。
Go 言語スプレッドシートライブラリ:Excelize 2.8.1 がリリースされました
Excelize は、純粋な Go で記述されたライブラリで、XLAM / XLSM / XLSX / XLTM / XLTX ファイルの読み書きを可能にする一連の関数を提供します。Microsoft Excel™ 2007 以降で生成されたスプレッドシートドキュメントの読み取りと書き込みをサポートします。高い互換性により複雑なコンポーネントをサポートし、大量のデータを含むワークシートからデータを生成または読み取るためのストリーミング API を提供します。このライブラリには Go バージョン 1.18 以降が必要です。
場合によっては、既存の Excel ドキュメントコン
独自拡張した型のスライスをGORM+PostgreSQLで使う
# 独自拡張した型のスライスをgorm+PostgreSQLで使う
## 独自拡張した型とは
筆者のユースケースの一例として、単一のUUID型、すなわちuuid.UUIDを単純に利用したモデルでは、本来ユーザーIDが入るべき場所にコンテンツIDが入ってしまうなどの問題が発生することがあります。この問題を解決するため、uuid.UUIDを独自に拡張し、value.UserIDのような形で値オブジェクトを作ることができます。これにより、型の安全性を向上させることができます。以下はその実装例です。
“`go: value/uesr.go
package valueimport (
“github.com/google/uuid”
)type UserID uuid.UUID
var _ ID = (*UserID)(nil)
func (v UserID) IsNil() bool {
return uuid.UUID(v) == uuid.Nil
}func (v UserID) String() string {
return uuid.UUID(v).S
[翻訳転載] Golang Tip #7: 三項演算子
# はじめに
https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2
本記事は以下のツイートの翻訳転載です。
https://x.com/func25/status/1729588275940352156?s=20
# 三項演算子
Goは、a > b ? a : bのような組み込みの三項演算子をサポートしていません。
しかし、Go 1.18からはジェネリックスを使って同じような機能の関数を実装できます。
![image](https://pbs.twimg.com/media/GAC7VL8bwAAHuZA?format=jpg&name=medium)
# おわりに
Goを書いていて三項演算子が欲しい場面は多々あるが、
– 三項演算子を使いたいケースは全て`if`で代用可能
– 三項演算子がネストされる場合、可読性がかなり落ちるため、Goで採用されていないのも納得できる。
> The reason is a simple design choice. The operator although once under
[翻訳転載] Golang Tip #6: アンダースコア Import
# はじめに
https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2
本記事は以下のツイートの翻訳転載です。
https://x.com/func25/status/1729113992902361111?s=20
# アンダースコア(`_`) Import
多くのライブラリで、時折、次のようにアンダースコア(`_`)と組み合わせたimport文を見かけるかもしれない。
![image](https://pbs.twimg.com/media/F_8K_X9bAAAr1sQ?format=jpg&name=medium)
これは、名前参照をせずに、そのパッケージの初期化コード(`init()`関数)を実行しています。
例としてunderscoreパッケージを作成しました。ここには`init()`関数を定義してあります。
![image](https://pbs.twimg.com/media/F_8LRetaQAEQu_K?format=jpg&name=medium)
And in main(), using under
レスポンスボディに書き込んだ内容を置き換えるginのミドルウェアを作った
レスポンスボディに書き込んだ内容を置き換えるミドルウェアを作った。
https://github.com/ophum/gin-replacer
“`go
r := gin.Default()
r.Use(ginreplacer.New(&ginreplacer.Config{
Replacer: strings.Replacer(“old”, “new”),
}))r.GET(“”, func(ctx *gin.Context) {
ctx.String(http.StatusOK, “old”)
})
“`上記のようなコードを書いて `/`に`GET`すると `new`と返ってくる。
“`
$ curl localhost:8080
new
“`
## 具体的な利用例注意: 作ったばかりなので本格的には使えてない
exampleでも実装しているけど、フロントエンドの静的ファイルを返す際に、APIのbaseURLなどを動的に変えたい場合。
https://github.com/ophum/gin-replacer/blob/f9b15510e45a
SQLServerに繋がらないとき…
プログラムからSQLServerに繋がらないときに見る記事です :eyes:
## SQLServerがリッスンしてしているか?
SQLServer構成マネージャー `SQL Server Configuration Manager` を開いて状態が”実行中”であるかを確認します。変更を加えた場合、再起動が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482880/4ec73737-65bf-a801-9234-12a76e537491.png)`TCP/IP`が有効になっているかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482880/6e329a1d-b8e0-5a41-21db-cb354023f487.png)`TCP/IP`のプロパティにてTCPの静的ポート番号を指定します。
![image.png](https://qiita-image
Go言語初学者がエラーに立ち向かう方法: fmt.Printfデバッグ、エラーハンドリング
# なぜエラーになったかを考える
### ①直近で自分は何をやっていたかを考える!
### ②エラー文の内容をみる!
### ③文法があっているかを考える!# fmt.Printfデバッグ
fmt.Printfデバッグを使用することで、スコープ内で呼ばれているかや、変数の中身の型や値が自分の意図するものになっているかを確認することができます。**fmt.Printfデバッグの例**
“`Go:main.go
fmt.Printf(“CustomerNameError: %v\n”, customerName)
//fmt.Printf(“任意の命名: %v\n”, 中身を見たい変数)
“`
複数のfmt.Printfデバッグを作成し、エラーの原因の箇所を探す。**実践例**
“`Go:main.go
fmt.Printf(“CustomerNameError①!!!: %v\n”, customerName)
row := db.QueryRow(“SELECT id FROM members where name = ?”,customerName)
fmt.Pri
GoのExcelizeでExcelのセル値読み取り・R1C1形式の変換
[前回の記事](https://qiita.com/te-k/items/cbde3a34577eb6c84f26)の続きで、`.xlsx`に変換したExcelファイルを操作してみます。
ライブラリには、[Excelize](https://github.com/qax-os/excelize)を使います。
“`bash
go get github.com/xuri/excelize/v2
“`## Excelの指定セルの値を読み取る
`Excelize`の機能を使って、最初のシート
“`go
package mainimport (
“fmt”“github.com/xuri/excelize/v2”
)func main() {
path := “sample.xlsx”// Excelで操作
f, err := excelize.OpenFile(path)
if err != nil {
fmt.Println(“error opening excel file: %w”, err)
}
Goでコンソールアプリのexeファイルを実行する
前回、[C#でExcelの.xls形式を.xlsx形式に変換](https://qiita.com/te-k/items/902cdded0793acb58586)する`exe`ファイルを作ったので、それをGo言語で呼び出してみます。
C#でビルドした実行ファイルは、以下のように配置しました。
“`
C:.
│ go.mod
│ main.go
│
└─net6.0
ExcelConverter.deps.json
ExcelConverter.dll
ExcelConverter.exe
ExcelConverter.pdb
ExcelConverter.runtimeconfig.json
“``Go`の`os/exec`を使って`exe`を呼び出します。
“`go
package mainimport (
“fmt”
“os/exec”
)func main() {
exePath := “./net6.0/ExcelConverter.exe”arg1 := “
C, C++ユーザのためのGo言語 型編
#### 宣言のしかた
– “`go
// 基本
var value int
// まとめて宣言
var (
value int
text string
)
// 宣言と初期化を同時に行う
value := 8 // valueはint型に
test := “hello” // valueはstring型に
“`#### ポインタ
– 概要:
– C言語と基本的に同様(&、*など)
– C++のような参照渡しは無い
– 例:
“`go
var num *int
num = new(int) // まとめて`num := new(int)`でも勿論可
*num = 10
fmt.Println(num)
fmt.Println(*num)// 結果
0xc0000140a0
10
“`#### 構造体とインターフェース
– 概要:
– 構
Golang 用デバッガ delve のコマンド紹介
Golang 用のデバッガ _delve_ についてお話します。
# What is delve
_[delve](https://github.com/go-delve/delve)_ とは、Golang 用のデバッガです。
_Golang_ で作成したアプリケーションに何か不具合があったときに利用する便利ツールです。– nil ポインタ panic が発生したのが `FindBy()` っぽいんだけど 、実行したとき変数に何がセットされているのか知りたい
– `Execute()` 関数が呼ばれるまでにどういう経路をたどったのか知りたいといったときにその問題の解決に資するものです。
C 言語でコンパイルした実行ファイルをデバッグする際に _[gdb](https://ja.wikipedia.org/wiki/GNU%E3%83%87%E3%83%90%E3%83%83%E3%82%AC)_ を使ったことがある人、ただの _Golang_ 用の _gdb_ です。
コマンド一覧だけ見て読了していただいて構いません。# How to install
Check
sqlite3-Mac
「前提」
Udemyの講座を学習中の初学者が何故?そうなるのか説明のない講義で分からなかった点をchat GPTやGoogle検索で模索した回答になります。ご了承下さい
_______________________________________________________SQLiteをインストールする手順は、使用しているオペレーティングシステムによって異なりますが、一般的な方法を以下に示します。
1. Linux (Ubuntuを例として),Windowsは省きます(?)
2. macOS
macOSには通常、SQLiteがプリインストールされています。ターミナルでsqlite3コマンドを実行して、SQLiteシェルを開始できます。
※既にインストールされている場合、☑️までスキップ“`
aqlite3
//sqlite3 インストール確認
sqlite> .exit
//sqlite3 を抜ける
“`
_____________① Homebrew(brew)のインストール:
ターミナルに次のコマンドを入力して、Homebrewをインストールします
[Go] 並行処理を30分で理解?
# Goroutinesってなに?
[educative](https://www.educative.io/answers/what-is-a-goroutine)には、以下のように書いてあります。
>ゴルーチンとは、Goプログラミング言語における軽量の実行スレッドであり、プログラムの他の部分と同時に実行される関数です。
ゴルーチンは、従来のスレッドと比較すると、ゴルーチンを作成するオーバーヘッドが非常に小さいため、驚くほど安価です。そのため、Goでは並行プログラミングに広く使われています。
関数をgoroutineとして呼び出すには、goキーワードを使用します。なるほど、わからん。まぁとりあえず、 **同時に実行される** ということですね。
# コードのテンプレート
2つの関数 **`heyko1()`** と **`heyko2()`** が同時に実行される(並行処理される)ための関数 **`main()`** を作成します。goroutinesを呼び出すときには、基本的には呼び出すところで関数の前に`go`をつけることで並行処理として利用できます。これだけ
Dockerで環境構築(GIN(GO)+Air)
# はじめに
初めまして!
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい!自分が学んだ足跡を残していきたい!と思い記事をかきました!
最終的には自在に開発できるようになりたいと思っています。:triumph:
いろいろな記事を参考にさせてもらっています。:bow_tone2:
その中でもこれってどういう意味?とかつまづいたところを念入りに書いていこうかと思います。:fist:# 今回の目的
友人と進めているアプリ開発でGINを使おうって話が上がりました!折角だからDockerで立ち上げたろう、と思ったのでイチからどう進めていったか書いていきます!# 作成した環境
https://github.com/takizawa0548/sample-gin# 使用したものや事前準備
・Macbook Pro
・GIN(GO)
・Air
・Docker# 主に参考にさせていただいた記事
https://go.dev/doc/tutorial/getting-startedhttps://gin-gonic.com/ja/doc
Goでポインタを使うのか値を使うのかで迷ったこと
## はじめに
タイトルの通りです。
実際の業務の中で、ポインタの使いをなんとなくでやってたなとおもい、まとめてみました。
また、ケースの紹介の箇所はプロジェクトのルールや方針等もあると思うので、
あくまで私の理解と私の経験だと理解してください。## ポインタって?
ポインタはメモリのアドレスを指します。
ポインタは「値がどこにあるのか」を示すもので、値自体ではありません。
Go言語では以下のようにポインタを使用できます。
“`go
package mainimport “fmt”
type Fruits struct {
Name string
Color string
}func main() {
// Fruitsをポインタ型でappleに使用する
apple := &Fruits{
Name: “りんご”,
Color: “red”,
}fmt.Printf(“apple :%+v\n”, apple)
fmt.Printf(“appleに格納されているアドレス :%p\n”, apple)
}
“`
実行結果“`
app