私はGoでCコードを書き直そうとしていますが、書き換えようとしているコードは多くの共通パターンに従っています。関数の多くはunsigned char
の配列を受け入れ、ポインタとして渡されます。関数を呼び出すときや、関数の他の部分で、char
ポインタに何らかの値を加算するときのように、算術演算を行います。デモンストレーションのための簡単な例を示します。C配列とポインタコードをGoに変換する
static void func1(unsigned char *r) {
int i;
for (i = 0; i < CONSTANT; i++)
func2(r + i * OTHER_CONSTANT);
}
static void func2(const unsigned char *a) {
unsigned int i;
for (i = 0; i < CONSTANT; i += 8) {
// do some stuff
a += 3;
}
}
これをGoに変換する適切な方法はありますか? char
の配列を表現するためにbyte
スライスを使い始めましたが、char
でこれらの算術式をGoの範囲/インデックスの算術演算に正確に転送する方法がわかりません。私はこのような何かを持って終わった:
func func1(r []byte) {
for i := 0; i < CONSTANT; i++ {
func2(r + i*OTHER_CONSTANT) // This just doesn't work
}
}
func func2(a []byte) {
for i := 0; i < CONSTANT; i += 8 {
// do some stuff
a += 3 // This doesn't work
}
}
私は上記のような何かをCからGoに変換する方法はありますか?
あなたが代わりにポインタの配列のインデックスを使用する必要があります。これで得られるのは、インデックス付きアクセスの境界チェックです。これにより、あなたのGoプログラムはCコードよりも安全になりますが、少し遅くなります。また、スライスを使用すると、コードを読みやすくすることができます。 – chmike