相違点: 1. C 言語のソース ファイルの拡張子は「.h」および「.c」で、Go 言語のソース ファイルの拡張子は「.go」です。 2. C 言語ではコードはファイルで管理されますが、Go 言語ではコードはパッケージで管理されます。 3. C 言語のキーワードは合計 32 個、Go 言語のキーワードは合計 25 個あります。
このチュートリアルの動作環境: Windows 7 システム、c99&&GO バージョン 1.18、Dell G3 コンピューター。
ソースファイル比較
ファイル拡張子 |
ソースタイプ |
.h |
コード宣言を格納するヘッダーファイル |
.c |
C 言語ソース ファイル、コード実装を格納 |
ファイル拡張子 | #ソース タイプ |
#.go
Go 言語ソース ファイル、コードの実装 |
|
#コード管理の比較
##C 言語のファイルによるコード管理
When特定の関数を使用したい場合は、対応する .h ファイルをインクルードするだけで済みます。
-
- Go 言語はパッケージを使用してコードを管理します
Go 言語には .h がありませんファイルの概念。Go で特定の関数を使用したい場合、対応するパッケージをインポートするだけで済みます。
-
- C 言語による関数と変数のパブリックおよびプライベート管理
extern および static を使用して関数と変数を公開するかどうか
-
- Go 言語での関数と変数のパブリックおよびプライベート管理
大文字化を使用して関数を公開するかどうか関数名の最初の文字
- 変数名の最初の文字の大文字と小文字を区別して変数を公開するかどうかを実現##比較キーワードの数
C 言語には合計 32 のキーワードがあります
2
3
4 |
5 |
6 |
7 |
8 |
|
|
| ##if
##else
| ##スイッチ | ケース | デフォルト | 休憩 | 戻る
##goto |
##do
| whilefor |
##継続 |
|
typedefstruct |
enumunion |
|
charshortint |
#long |
float |
double
void |
sizeof |
| signed | #unsigned | ##const | # #auto | register | static
extern | volatile |
Go 言語キーワードの合計 25 |
|
#1 |
2 |
3 |
4 |
5
6
8
|
| ##場合 |
|
##else |
|
|
switch |
##case | default
##break |
#return
|
##goto |
fallthrough | for
##続行 |
タイプ | #structvar |
const |
map | funcinterfacerange | import | packagedefergo | select |
chan |
|
| |
|
|
|
|
|
|
#データ型の比較 |
| C 言語のデータ型
|
|
Go 言語のデータ型
|
|
|
C 言語の各データ型はメモリ領域を占有します |
タイプ32 ビット コンパイラ
#64 ビット コンパイラ
-
##char
1
- 1
int
4
4
44 |
| ダブル | 8
8
| short | 2 | 2
| long | 4 | 8
| 長い長い | 8 | 8
##void* |
4 |
8# ##################################
タイプ |
32 ビット コンパイラ |
64 ビット コンパイラ |
#エッセンス |
##int8/uint8 | 1 | 1## signed char/unsigned char |
| ##int16/uint16
2 | 2 | signed short/unsigned short |
#int32/uint32 |
4
4 |
signed int/unsigned int |
|
int64/ uint64 |
8
8 |
符号付きlong long int/符号なしlong long int |
|
byte |
1
1 |
uint8/unsigned char |
|
rune |
4
4 |
int32/ signed int |
|
int |
4
8 |
マシン桁数に応じて長さを決定します |
|
uintptr |
4
8 |
マシン桁数に応じて長さ uint32/uint64 を決定します |
| float32 |
4
4 |
float |
|
float64 |
8
#8 |
double |
|
true |
1
1 |
char 型の整数型 | | false |
1
1 |
char型整数 |
|
|
# # および C 言語 同様に、Go 言語でも変数のメモリ空間を計算する Sizeof が提供されています。
1. インポート "unsafe" パッケージをインポートします
- 2. unsafe を通じて変数のメモリ空間を計算します。 Sizeof()
Go 言語の基本データ型の内部実装
golang 公式サイトから go1.4 バージョンのソースコードをダウンロード
- 古いバージョンのコードは純粋であるほど、初心者の学習に適しています。
- コードは更新され反復されると、徐々に非常に複雑になります。バージョン 1.4 をダウンロードすることを推奨します。go\src\runtime\runtime.h
次の実装コードを取得します
// 第8行到35行
typedef signed char int8;
typedef unsigned char uint8;
typedef signed short int16;
typedef unsigned short uint16;
typedef signed int int32;
typedef unsigned int uint32;
typedef signed long long int int64;
typedef unsigned long long int uint64;
typedef float float32;
typedef double float64;
#ifdef _64BIT
typedef uint64 uintptr;
typedef int64 intptr;
typedef int64 intgo; // Go's int
typedef uint64 uintgo; // Go's uint
#else
typedef uint32 uintptr;
typedef int32 intptr;
typedef int32 intgo; // Go's int
typedef uint32 uintgo; // Go's uint
#endif
#ifdef _64BITREG
typedef uint64 uintreg;
#else
typedef uint32 uintreg;
#endif
// 第153行到157行
enum
{
true = 1,
false = 0,
}; ログイン後にコピー
- インストール B モーメント:
本質Go は、C 言語で書かれた高級プログラミング言語です。だから、江兄弟は以前にあなたに C 言語を教えました。今日の Go の実装コードを理解できるようにするには、それが何なのか、そしてなぜそれが行われるのかを知る必要があります #定数変数の比較
## C 言語では定数と変数の形式が定義されています #数据类型 变量名称 = 值;
const 数据类型 常量名称 = 值; ログイン後にコピー
Go 言語は定数と変数の形式を定義します次の標準形式に加えて、Go 言語はいくつかの単純な構文も提供します Sugar
var 变量名称 数据类型 = 值;
const 变量名称 数据类型 = 值; ログイン後にコピー
C 言語と同様に、Go 言語も単一行コメントと複数行コメントをサポートしており、すべてのコメントは C 言語と同じ特性を持っています
単一行コメント行コメント//コメントされたコンテンツ
複数行コメント/*コメントされたコンテンツ* /
-
Go 言語の場合、複数行コメントではなく単一行コメントを使用することが公式に推奨されています (詳細については、Go 公式ソース コードを直接表示できます)
演算子の比較
- 算術演算子は C 言語とほぼ同じです
Go 言語では -- 演算子は前置詞をサポートしていません間違った書き方: i; --i;
- Go 言語では、-- は式ではなくステートメントであるため、単独の行に記述する必要があります
- 間違った方法書き込み : a = i ; return i ;
説明 例
| | Add | A B
- | 減算 | A - B |
* | 乗算 | A * B |
/ | 割り算##B / A |
| ##%
余りを求める# #B % A | |
|
増分
A |
|
-- |
デクリメント
A-- |
|
|
関係演算子は C 言語と同じです |
|
| Operator
Description
Instance
##====2 つの値が正しいかどうかを確認します等しい場合は True を返し、そうでない場合は False を返します。 | A == B |
| != 2 つの値が等しくないかどうかを確認し、等しくない場合は True を返します。それ以外の場合は False を返します。
A != B |
| > | 左の値が右の値より大きいかどうかを確認し、大きい場合は True を返し、そうでない場合は False を返します。
A > B |
| 左の値が右の値より小さいかどうかを確認し、小さい場合は True を返し、そうでない場合は False を返します。
A ##>= |
左の値が右の値以上であるかどうかを確認し、そうであれば True を返します。それ以外の場合は False を返します。 |
A >= B
| ##左の値が右の値以下かどうかを確認し、そうであれば True を返します、それ以外の場合は False を返します。 | A
|
运算符 |
描述 |
实例 |
&& |
如果两边的操作数都是 True,则条件 True,否则为 False。 |
A && B |
|| |
如果两边的操作数有一个 True,则条件 True,否则为 False。 |
A || B |
! |
如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 |
!A |
运算符 |
描述 |
实例 |
& |
参与运算的两数各对应的二进位相与, 对应位只要都是1结果就为1 |
A & B |
| |
参与运算的两数各对应的二进位相或,对应位只要其中一个是1结果就为1 |
A | B |
^ |
参与运算的两数各对应的二进位相异或,对应位只要不同结果就是1 |
A ^ B |
|
左移运算符,左移n位就是乘以2的n次方 |
A |
>> |
右移运算符,右移n位就是除以2的n次方 |
B >> 2 |
&^ |
逻辑清零运算符, B对应位是1,A对应位清零,B对应位是0, A对应位保留原样 |
A &^ B |
int main(){
/*
0110 a
&^1011 b 如果b位位1,那么结果为0, 否则结果为a位对应的值
----------
0100
*/
a1 := 6
b1 := 11
res1 := a1 &^ b1
fmt.Println("res1 = ", res1) // 4
/*
1011 a
&^1101 b 如果b位位1,那么结果为0, 否则结果为a位对应的值
----------
0010
*/
a2 := 11
b2 := 13
res2 := a2 &^ b2
fmt.Println("res2 = ", res2) // 2
} ログイン後にコピー
运算符 |
描述 |
实例 |
= |
将右边赋值给左边 |
C = A + B 将 A + B 表达式结果赋值给 C |
+= |
相加后再赋值 |
C += A 等于 C = C + A |
-= |
相减后再赋值 |
C -= A 等于 C = C - A |
*= |
相乘后再赋值 |
C *= A 等于 C = C * A |
/= |
相除后再赋值 |
C /= A 等于 C = C / A |
%= |
求余后再赋值 |
C %= A 等于 C = C % A |
|
左移赋值 |
C |
>>= |
右移赋值 |
C >>= 2 等于 C = C >> 2 |
&= |
位逻辑与赋值 |
C &= 2 等于 C = C & 2 |
^= |
位逻辑或赋值 |
C ^= 2 等于 C = C ^ 2 |
|= |
位逻辑异或赋值 |
C |= 2 等于 C = C | 2 |
&^= |
位逻辑清零赋值 |
C &^= 2 等于 C = C &^ 2 |
流程控制语句对比
- C语言流程控制中的if、switch、for在Go语言都可以使用
- C语言中的四大跳转语句return、break、continue、goto在Go语言都可以使用
- Go语言除了实现C语言中if、switch、for、return、break、continue、goto的基本功能以外,还对if、switch、for、break、continue进行了增强
- 例如: if 条件表达式前面可以添加初始化表达式
- 例如: break、continue可以指定标签
- 例如: switch语句可以当做if/elseif来使用
- ... ...
- 值得注意的是Go语言中没有while循环和dowhile循环, 因为它们能做的Go语言中的for循环都可以做
函数和方法对比
返回值类型 函数名称(形参列表) {
函数体相关语句;
return 返回值;
} ログイン後にコピー
func 函数名称(形参列表)(返回值列表) {
函数体相关语句;
return 返回值;
} ログイン後にコピー
- C语言中没有方法的概念, 但是Go语言中有方法
- 对于初学者而言,可以简单的把方法理解为一种特殊的函数
func (接收者 接受者类型)函数名称(形参列表)(返回值列表) {
函数体相关语句;
return 返回值;
} ログイン後にコピー
编程思想对比
更多编程相关知识,请访问:编程视频!!
|
以上がC言語とGo言語の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。