lo.IfをJavaScriptの三項演算子みたいに使おうとしたらハマった

Go言語にはGenericsが実装されて以降に作られた samber/lo というライブラリがある。 これはLodashぽく使えるライブラリで、Go言語のGenericsを使っている。 このライブラリを使っていて、lo.IfをJavaScriptの三項演算子みたいに使おうとしたらハマったのでメモ。 lo.If は以下のように使うことができる。 result := lo.If(true, 1). ElseIf(false, 2). Else(3) // 1 result := lo.If(false, 1). ElseIf(true, 2). Else(3) // 2 result := lo.If(false, 1). ElseIf(false, 2). Else(3) 定義としては func If[T any](condition bool, result T) *ifElse[T] となっている。 第一引数に真偽値、第二引数に結果を渡すと、ifのように使える。 なので次のように使うと三項演算子みたいに使えて1行で書け便利そうと思っていた。 package main import ( "fmt" "github.com/samber/lo" ) func main() { var in *int fmt.Println(lo.If(in == nil, *in).Else(0)) } 実装内容としては、inがnilの場合は0を返し、それ以外の場合は*inを返すというもの。 この実装はinがnilの場合にpanicを起こす。 inの内容はnilだろうがそうじゃなかろうが必ず評価されるからである。 まぁ、よく見たら当然といえば当然である。...

1月 9, 2025

ドット絵変換ライブラリ作った

ことのあらまし 年末の休みにTwitterを眺めていたらNPOSさんの投稿が流れてきて面白そうだったのでGo言語でもやってみた。 このドット絵化いいかも!やってみよ!https://t.co/i13rxatG6Q — 𝙉𝙋𝙊𝙎 (@npostring) December 30, 2024 作ったもの ndcd-go install go install github.com/ieee0824/ndcd-go/ndcd 使い方 大本の論文ではドットの大きさを指定するようになっているが、このライブラリでは生成する画像の縦の大きさを指定するようになっている。 もしかしたら大本の実装と同じようにするかもしれない。 実行例 ndcd -i 入力ファイル -o 出力ファイル -oh 64 -bt box -bs 10 -c 1 -g 0.8 -s -oe 512 生成例 コマンドオプション -b 明るさの補正パラメーター 指定すると処理する前に画像の明るさ調整が入ります -bs ぼかし処理のパラメーター 指定すると処理する前に画像のぼかし処理が入ります jpegなどのノイズをある程度ごまかせます -bt ぼかしの種類を指定します gaussianかboxが指定できます デフォルトは gaussian です -c コントラストの補正パラメーター 指定すると処理する前に画像のコントラスト調整が入ります -cq 色数の量子化パラメーター 指定すると処理する前に画像の色数を減らします -g ガンマ補正パラメーター...

1月 3, 2025