- 投稿日:2020-07-22T23:41:15+09:00
競プロで使うための GO 入門 ~ASCII変換~
Index
- はじめに
- Hello World
- 標準入出力
- [変数・定数]
- 型変換
- [制御構文]
- 配列~
- ソート
- 関数
- ASCII変換
- math パッケージ
ASCII変換
package main import ( "fmt" ) func main() { // 文字からASCII s := "ABC" fmt.Println(s[0], s[1], s[2]) // ->64 65 66 // ASCII から文字 s = string(97) + string(98) + string(0x63) fmt.Println(s) // ->abc }
- 投稿日:2020-07-22T19:55:43+09:00
[自分メモ] CORS 設定をrouter group 内で使ってハマった...
はじめに
フロントとサーバーを別で開発していると CORS 設定をすると思うが、 それでハマった話。
ダメな例
func main() { e := echo.New() g := e.Group('/api') g.Use( middleware. CORSWithConfig( middleware.CORSConfig{ AllowOrigins: []string{"API URL"}, AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete, http.MethodOptions}, } ) ) g.POST('/create', ...) ... }良い例
func main() { e := echo.New() e.Use( middleware. CORSWithConfig( middleware.CORSConfig{ AllowOrigins: []string{"API URL"}, AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete, http.MethodOptions}, } ) ) g := e.Group('/api') g.POST('/create', ...) ... }
- group に対して CORS 設定をしても反映されない
- 投稿日:2020-07-22T19:55:43+09:00
【Go】 echo の CORS でハマった...
はじめに
フロントとサーバー別開発で CORS 設定をする時に、 ハマった話。
フロント: Nuxt
サーバー: Goダメな例
func main() { e := echo.New() g := e.Group('/api') g.Use( middleware. CORSWithConfig( middleware.CORSConfig{ AllowOrigins: []string{"API URL"}, AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete, http.MethodOptions}, } ) ) g.POST('/create', ...) ... }良い例
func main() { e := echo.New() e.Use( middleware. CORSWithConfig( middleware.CORSConfig{ AllowOrigins: []string{"API URL"}, AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete, http.MethodOptions}, } ) ) g := e.Group('/api') g.POST('/create', ...) ... }終わりに
group に対して CORS 設定をしても反映されないみたい。
- 投稿日:2020-07-22T17:17:20+09:00
【GCP】Cloud Functions の Go 1.13 で取得できなくなった環境変数とそれを置き換えれるメタデータの対応表
前回の記事から引き続いてGCF/Go 1.11から Go1.13への移行の話です。
自動的に設定される環境変数にも変更がありました。Go1.11で設定されている環境変数
https://cloud.google.com/functions/docs/env-var#nodejs_6_nodejs_8_python_37_and_go_111
キー 説明 ENTRY_POINT 予約済み:実行される機能。 GCP_PROJECT 予約済み:現在のGCPプロジェクトID。 GCLOUD_PROJECT 予約済み:現在のGCPプロジェクトID(非推奨)。 GOOGLE_CLOUD_PROJECT 予約済み:設定されていませんが、内部使用のために予約されています。 FUNCTION_TRIGGER_TYPE 予約済み:関数のトリガータイプ。 FUNCTION_NAME 予約済み:関数リソースの名前。 FUNCTION_MEMORY_MB 予約済み:関数の最大メモリ。 FUNCTION_TIMEOUT_SEC 予約済み:秒単位の実行タイムアウト。 FUNCTION_IDENTITY 予約済み:関数の現在のID(サービスアカウント)。 FUNCTION_REGION 予約済み:関数領域(例:)us-central1。 Go1.13で設定されている環境変数
https://cloud.google.com/functions/docs/env-var#nodejs_10_and_subsequent_runtimes
キー 説明 FUNCTION_TARGET 予約済み:実行される機能。 FUNCTION_SIGNATURE_TYPE 予約済み:関数のタイプ:httpHTTP関数およびeventバックグラウンド関数用。 K_SERVICE 予約済み:関数リソースの名前。 K_REVISION 予約済み:関数のバージョンID。 PORT 予約済み:関数が呼び出されるポート。 環境変数の代わりにメタデータサーバーを使う
https://cloud.google.com/compute/docs/storing-retrieving-metadata
メタデータサーバーには、インスタンスのホスト名やインスタンスIDなどのインスタンスのメタデータが保存されています。
通常は、GCEから利用するようですが、GCFからも一部の情報は取得できるようなので確認してみました。サンプルコードは下記に公開しています。
https://github.com/shigwata/gcp-cloud-functions-env-varGCFでメタデータ サーバーから取得できた値
メタデータキー 値 project/attributes/ - project/attributes/disable-legacy-endpoints - project/attributes/enable-oslogin - project/attributes/vmdnssetting - project/attributes/ssh-keys - project/numeric-project-id [GCP_PROJECT_NUM] project/project-id [GCP_PROJECT] instance/attributes/ - instance/attributes/enable-oslogin - instance/attributes/vmdnssetting - instance/attributes/ssh-keys - instance/cpu-platform - instance/description - instance/disks/ - instance/guest-attributes/ - instance/hostname - instance/id [INSTANCE_ID] instance/machine-type - instance/name - instance/network-interfaces/ - instance/network-interfaces/0/access-configs/0/external-ip - instance/network-interfaces/0/forwarded-ips/ - instance/scheduling/ - instance/scheduling/on-host-maintenance - instance/scheduling/automatic-restart - instance/scheduling/preemptible - instance/maintenance-event - instance/service-accounts/ [SERVICE_ACCOUNTS] instance/service-accounts/default/email [GCP_PROJECT]@appspot.gserviceaccount.com instance/service-accounts/default/token [TOKEN] instance/service-accounts/default/identity - instance/tags - instance/zone projects/[GCP_PROJECT_NUM]/zones/[ZONE] 全然取れないです。。。
対応表
Go 1.11環境変数 Go 1.13環境変数 メタデータキー ENTRY_POINT FUNCTION_TARGET - GCP_PROJECT - project/project-id GCLOUD_PROJECT - project/project-id GOOGLE_CLOUD_PROJECT - - FUNCTION_TRIGGER_TYPE FUNCTION_SIGNATURE_TYPE(※値は一致しない) - FUNCTION_NAME K_SERVICE - FUNCTION_MEMORY_MB - - FUNCTION_TIMEOUT_SEC - - FUNCTION_IDENTITY - instance/service-accounts/default/email FUNCTION_REGION - - - K_REVISION - - PORT - 対応する値がないものは、デプロイ時に環境変数を設定するしかなさそうですね。
おわりに
GCFもGAEの第二世代のように内部的に大きく変わっているようです。
GCF/Go 1.11は廃止予定が利用ユーザ宛にされたので、この記事が移行の参考になれば幸いです。
- 投稿日:2020-07-22T04:26:54+09:00
【メモ】Skickaを使ってGoogleDriveに簡単アップロード
Skickaを使えば、ターミナルからGoogleDriveに簡単にファイル/フォルダのアップロード/ダウンロードができるのでインストールの過程をメモ
環境
Ubuntu18.04
Goのインストール
1.公式サイトからインストールをする
上記ページで自分のOSにあったソースコードをダウンロード
(今回はUbuntu18.04なのでLinuxを選択)
クリックすると、
/home/user/Downloads
にgo1.14.6.linux-amd64.tar.gz
というファイルがダウンロードされる2.圧縮ファイル
.tar.gz
を/usr/local
配下に解凍tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz3.Pathを通す
以下のコマンドを実行してPathを通すexport PATH=$PATH:/usr/local/go/binPathが通ったことを確認するために、
$ go
コマンドを実行して、
Go is a tool for managing Go source code. Usage: go command [arguments] The commands are: build compile packages and dependencies clean remove object files and cached files doc show documentation for package or symbol env print Go environment information bug start a bug report fix update packages to use new APIs fmt gofmt (reformat) package sources generate generate Go files by processing source get download and install packages and dependencies install compile and install packages and dependencies list list packages run compile and run Go program test test packages tool run specified go tool version print Go version vet report likely mistakes in packages Use "go help [command]" for more information about a command. Additional help topics: c calling between Go and C buildmode build modes cache build and test caching filetype file types gopath GOPATH environment variable environment environment variables importpath import path syntax packages package lists testflag testing flags testfunc testing functions Use "go help [topic]" for more information about that topic.こんな感じになればPathが通ってる
これでGoの準備はOK!!Skickaのインストール
1.goコマンドを使ってGithubからskickaをインストール
$ go get github.com/google.skicka
2.Pathを通す
$ export PATH=~/go/bin;$PATH3.設定ファイルの初期化
skicka init
コマンドを実行すると.skicka.config
ファイルが作成される$ skicka init 20XX/MM/DD hh:mm:ss created configuration file /home/user/.skicka.config.
4.Googleアカウント認証
skicka -no-browser-auth df
コマンドを実行すると、URLが出力され、ブラウザ上でアップロード先のGoogleアカウントの認証ができる$ skicka -no-browser-auth df Go to the following link in your browser: (ここにURLが表示される) Enter verification code: (認証後に表示される認証コードをここに貼り付けたらエンターキーを押す)※URL先で認証をしようとして、「Google でログイン機能が一時的に無効」と出てきた場合には、こちらの記事を参考にAPIキーの設定を行う
5.接続確認
$ skicka lsで接続したGoogleDrive上のファイル/フォルダが確認できればOK
$ skicka dfでGoogleDriveの使用状況が確認できる
アップロード・ダウンロード
- アップロード
skicka upload
(ファイルのアップロード) $ skicka upload <ファイルパス> <Drive上のパス> (ディレクトリのアップロード) $ skicka upload <ディレクトリパス>/ <Drive上のパス>
- ダウンロード
skicka download
基本的には、uploadと同じ$ skicka download <Drive上のパス> <localのパス>※ディレクトリごとの場合は、
/
をつける必要があるので注意!(つけないと中身だけアップロード/ダウンロードされる)