Author Archives: yoheimiyamoto

gcp コマンド

// update
gcloud components update

// アカウントの切り替え
gcloud auth login

// プロジェクトの切り替え
gcloud config set project {プロジェクト名}

// firewallのリスト確認
gcloud beta app firewall-rules list

interface cast nilのケース

nilでない場合

func main() {
    var i myIf
    u := User{Name: "hello"}
    i = u
    if v, ok := i.(User); ok {
        log.Print(v.Name) // helloと出力される
    } else {
        log.Print(nil)
    }
}

nilの場合

func main() {
    var i myIf // i == nil の状態
    if v, ok := i.(User); ok {
        log.Print(v.Name)
    } else {
        log.Print("nil!") // nil! と出力される
    }
}

引数 複数

func main() {
    say("aa", "bb") // aa, bb が出力される
}

func say(args ...string) {
    for _, s := range args {
        log.Print(s)
    }
}

json 空配列を返す

func main() {
    var us1 []*User
    us2 := make([]*User, 0)
    json1, _ := json.Marshal(us1)
    json2, _ := json.Marshal(us2)
    fmt.Print(string(json1)) // nullが変える
    fmt.Print(string(json2)) // []が変える
}

暗号化

16byteの文字列を暗号化

func main() {
    plainText := []byte("This is 16 bytes") // 16byteのものを渡す必要がある
    key := []byte("passw0rdpassw0rdpassw0rdpassw0rd")
    encryptedText, _ := encrypt(key, plainText)
    decrypte, _ := decrypte(key, encryptedText)
    fmt.Print(string(decrypte))
}

func encrypt(key []byte, plainText []byte) (encryptedText []byte, err error) {
    block, err := aes.NewCipher([]byte(key))
    if err != nil {
        return
    }
    encryptedText = make([]byte, len(plainText))
    block.Encrypt(encryptedText, plainText)
    return
}

func decrypte(key []byte, encryptedText []byte) (decryptedText []byte, err error) {
    block, err := aes.NewCipher([]byte(key))
    if err != nil {
        return
    }
    decryptedText = make([]byte, len(encryptedText))
    block.Decrypt(decryptedText, encryptedText)
    return
}

idを0埋めして、16byteに変換して暗号化

func main() {
    id := "11212"
    key := []byte("passw0rdpassw0rdpassw0rdpassw0rd")
    encryptedID, _ := encryptID(key, id)
    fmt.Print(encryptedID)
    copyID, _ := decrypteID(key, encryptedID)
    fmt.Print(copyID)
}

func encryptID(key []byte, id string) (cipherID string, err error) {
    plainText := []byte(fmt.Sprintf("%016s", id))
    block, err := aes.NewCipher([]byte(key))
    if err != nil {
        return
    }
    cipherText := make([]byte, len(plainText))
    block.Encrypt(cipherText, plainText)
    cipherID = hex.EncodeToString(cipherText)
    return
}

func decrypteID(key []byte, cipherID string) (id string, err error) {
    hexText, err := hex.DecodeString(cipherID)
    if err != nil {
        return
    }
    block, err := aes.NewCipher([]byte(key))
    if err != nil {
        return
    }
    plainText := make([]byte, len(hexText))
    block.Decrypt(plainText, hexText)
    IntID, err := strconv.Atoi(string(plainText))
    if err != nil {
        return
    }
    id = strconv.Itoa(IntID)
    return
}