20210410のGoに関する記事は2件です。

Base64 変換

Base64 変換についてまとめてみました。 Python3 の例 encode01.py #! /usr/bin/python # import base64 # data_in = 'こんにちは' bytes_in = data_in.encode() # encoded = base64.b64encode(bytes_in) print(encoded) decode01.py #! /usr/bin/python # import base64 # data = b'44GT44KT44Gr44Gh44Gv' decoded = base64.b64decode(data) str_out = decoded.decode() print(str_out) # Node.js の例 encode01.js #! /usr/bin/node // --------------------------------------------------------------- // encode01.js // // Apr/10/2021 // // --------------------------------------------------------------- 'use strict' // --------------------------------------------------------------- console.error ("*** 開始 ***") const data_in = 'こんにちは' const buffer = new Buffer.from(data_in) const string = buffer.toString('base64') console.log(string) console.error ("*** 終了 ***") // --------------------------------------------------------------- decode01.js #! /usr/bin/node // --------------------------------------------------------------- // decode01.js // // Apr/10/2021 // // --------------------------------------------------------------- 'use strict' // --------------------------------------------------------------- console.error ("*** 開始 ***") const data_in = '44GT44KT44Gr44Gh44Gv' const string = Buffer.from(data_in,'base64') console.log(string.toString()) console.error ("*** 終了 ***") // --------------------------------------------------------------- Go の例 encode01.go package main import ( b64 "encoding/base64" "fmt" "os" ) func main() { fmt.Fprintf (os.Stderr,"*** 開始 ***\n") data := "こんにちは" sEnc := b64.StdEncoding.EncodeToString([]byte(data)) fmt.Println(sEnc) fmt.Fprintf (os.Stderr,"*** 終了 ***\n") } decode01.go package main import ( b64 "encoding/base64" "fmt" "os" ) func main() { fmt.Fprintf (os.Stderr,"*** 開始 ***\n") data_in := "44GT44KT44Gr44Gh44Gv" uDec, _ := b64.URLEncoding.DecodeString(data_in) fmt.Println(string(uDec)) fmt.Fprintf (os.Stderr,"*** 終了 ***\n") } コマンドでの変換 エンコード 入力データ a01.txt こんにちは 実行結果 $ base64 a01.txt 44GT44KT44Gr44Gh44Gv デコード 入力データ b01.txt 44GT44KT44Gr44Gh44Gv 実行結果 $ base64 -d b01.txt こんにちは
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラミング超入門(Final)〜GO言語〜

構造体 構造体とは、自分で考えて属性を定義できるデータ型のことをいいます。structというデータ型を用いり、type 構造体名 structで定義します。構造体名は小文字で始めてもいいのですが、大きなプロジェクトのプログラムでは基本頭文字を大文字にしているので、ここでは大文字で記述しました。構造体の中では属性を指定でき、GOでは属性をフィールドと呼びます。下記コードでは、length(全長),group(種類),name(名前)が各フィールド名になります。構造体の定義はフィールド名とデータ型を示すもので、データはフィールドに値を与えて作成します。名前を「アジ」にし、種目に「スズキ目」、全長が「20cm」の魚のデータを作成して変数sea(海の魚なので)に代入してあります。このように決められた構造に従って組み立てたデータをインスタンスと呼びます。構造体FIshのインスタンスseaでまとめるとわかりやすいでしょう。フィールドに値を与えてインスタンスを作成したわけですが、Fishインスタンスsea,river,lakeを作成して要素とする配列のスライスfishsを定義し、そのfishsの要素fishs[i]の後に構造体Fishのフィールド名fishs[i].group, fishs[i].nameを書くとフィールドの値が取り出せます。 package main import "fmt" type Fish struct { name string group string length int } func main() { sea := Fish{"アジ", "スズキ目", 20} river := Fish{"アユ", "キュウリウオ目", 15} lake := Fish{"フナ", "コイ目", 40} fishs := []Fish{sea, river, lake} for i := 0; i < len(fishs); i++ { fmt.Printf("%sの%sになります\n", fishs[i].group, fishs[i].name) } } ビルドして実行 スズキ目のアジになります キュウリウオ目のアユになります コイ目のフナになります 構造体のインスタンスを引数にとる関数 構造体のインスタンスを関数の引数にしてみます。bigger関数を定義しFishのインスタンスを2つ引数にとり、そのlengthフィールドの値を比較してみます。両者の差が±5以内であれば、同じ大きさとみなします。main関数の中にあるfor文をbigger関数を使った記述に変更し、スライスfishsが見ている配列のある要素をbigger関数の引数に与えます。配列の最後の要素は次の要素(next)として配列の最初の要素をあてます。 package main import "fmt" type Fish struct { name string group string length int } func bigger(f1 Fish, f2 Fish) string { fiff := f1.length - f2.length switch { case fiff > 5: return "より大きい" case fiff < -5: return "より小さい" default: return "と同じ大きさ" } } func main() { sea := Fish{"アジ", "スズキ目", 20} river := Fish{"アユ", "キュウリウオ目", 15} lake := Fish{"フナ", "コイ目", 40} fishs := []Fish{sea, river, lake} for i := 0; i < len(fishs); i++ { next := i + 1 if next >= len(fishs) { next = 0 } fmt.Printf("%sは%s%sです\n", fishs[i].name, fishs[next].name, bigger(fishs[i], fishs[next])) } } ビルドして実行 アジはアユと同じ大きさです アユはフナより小さいです フナはアジより大きいです 構造体のインスタンスを戻り値とする関数 上記、bigger関数では2つの要素を比較しましたが、今度は一番大きな要素を戻すbiggest関数に書き換えてプログラムを構成していきます。biggest関数は、引数にFishのインスタンスの配列のスライスを取り、フィールドlengthの値が最大の要素を戻します。戻り値の型はFishインスタンスになります。main関数の中では、biggestの引数にfishsを渡し、戻り値のFishインスタンスを受け取ってフィールドnameの値を取り出しています。 package main import "fmt" type Fish struct { name string group string length int } func biggest(fishs []Fish) Fish { biggest := fishs[0] for i := 1; i < len(fishs); i++ { if fishs[i].length > biggest.length { biggest = fishs[i] } } return biggest } func main() { sea := Fish{"アジ", "スズキ目", 20} river := Fish{"アユ", "キュウリウオ目", 15} lake := Fish{"フナ", "コイ目", 40} fishs := []Fish{sea, river, lake} fmt.Printf("%sが最大です\n", biggest(fishs).name) } 再度ビルドして実行 フナが最大です ←前回の記事 ※皆様、本記事を最後までお読み頂きありがとうございました。私は、GO言語を学ぶにあたってある一冊の本にとても支えられ、ここまで覚えることが出来ました。プログラミングを早く上達させるには、読むだけではなく実際にコードを書き出して、どんどん覚えたことをアウトプット(出力)して行けば、より早く上達できると身をもって感じました。この後に続く実践・応用編は、実際に参考にさせて頂いた著書をご覧になって学習して頂きたいと思います。本来であれば、もっと技術的な記事を配信していかなければならないQiitaを今回こういう形で利用させて頂きましたが、この記事をご覧になられた初学者の方々への励みになれば幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む