Help us understand the problem. What is going on with this article?

GoでSecureRandomを使いたい

More than 3 years have passed since last update.

Rubyの以下のコード

require 'securerandom'

puts SecureRandom.hex(16)

をGoに移植したいと思ったとします。すると以下のようになります。

package main

import (
    crand "crypto/rand"
    "fmt"
)

func secureRandomStr(b int) string {
    k := make([]byte, b)
    if _, err := crand.Read(k); err != nil {
        panic(err)
    }
    return fmt.Sprintf("%x", k)
}

func main() {
    fmt.Println(secureRandomStr(16))
}

なんでこんな話をするのかというと、以前移植する機会があったんですね。

Ruby実装は SecureRandom.hex(16) と書いてあるだけでした。実はRubyのコードもGoのコードも自分が書いたのですが、Rubyで何も考えずに書いたコードがこんなに長くなるのか!って感じで(他にも色々あって)移植作業は予想以上に大変でした。

こういう風にRubyだと1行だけど、Goだと色々しないといけないといけないみたいなパターンが色々あるので、色んな言語で実装する必要があるWebアプリケーションを実装するときは気を付けましょう、という話でした(まあ自分が悪い)。

catatsuy
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away