2021年8月28日土曜日

標準入力をファイル入力にする

まぁあるあるの実装かもしれないけど、とりあえずログとして残しておく。

#include <stdio.h>
  
int main(){
        int ret = 0;
        FILE* tmpstd = stdin;
        stdin = fopen("test.txt" , "rb");
        ret =getchar();
        printf("getchar ret= %d/n",ret);

        // 
        stdin = tmpstd;
        ret =getchar();
        printf("getchar ret= %d/n",ret);

        return 0;
}

ファイルがない場合EOFを返すので注意する。

環境依存する実装のため、必ずすべて動作するとは限らない。

 

2021年2月11日木曜日

goを2日だけ勉強してみた

2日ちょいですが、goの勉強をした内容をまとめてみました。


環境構築

install script を作ってみた。
goをインストールしただけでREPLは使えない。
最小構成を提供し、必要に応じてインストールというのは正しい。

Hello World

当たり前だが、golangのプロジェクトレイアウトに沿って構築。

Makefileを使ってビルドするのが慣例らしい。

Module

Redmine REST Clientのモジュールを作ってみた。rest.go
コマンドライン引数解析、JSON解析

ローカルで開発したモジュールは相対パスで記述しない。
go.modのreplacce directiveを使って相対パスに置き換える仕組みを使うのが一般的らしい。

手こずったところ
  • Naming Rule
    • publicの関数が先頭大文字
    • JSONの構造体も先頭大文字

Test

go test を実行するだけで簡単にテストが実行できる。
しかも、カバレッジ計測も簡単にできるのが嬉しい。
まだ、テストユーティリティが使いこなせていない。

> go test -v  ponta027.dip.jp/rest -coverprofile = covert.out
> go tool cover -html= cover.out -o cover.html

これだけでカバレッジ結果がHTML出力される。

使ってみた感想
  • 動かすだけであれば学習コストが低い。
    • 言語仕様をまだ調べきれていないので。
  • コンパイラが未使用変数、importがあるとエラーとなるため、クリーンなコードがかける。
  • NamingRuleは慣れるまで大変。
  • 周辺ツールが結構充実している。
  • クロスコンパイルが簡単にできる
    • 環境変数を設定するだけで実現
全然知らないことが多いので、これからもう少し勉強してみようかと思う。