>  기사  >  백엔드 개발  >  C 언어와 Go 언어의 차이점은 무엇입니까?

C 언어와 Go 언어의 차이점은 무엇입니까?

青灯夜游
青灯夜游원래의
2021-03-04 14:51:479388검색

차이점: 1. C 언어 소스 파일의 확장자는 ".h"와 ".c"인 반면, Go 언어 소스 파일의 확장자는 ".go"입니다. 2. C 언어에서는 파일을 통해 코드를 관리하지만, Go 언어에서는 패키지를 통해 코드를 관리합니다. 3. C 언어에는 총 32개의 키워드가 있고, Go 언어에는 총 25개의 키워드가 있습니다.

C 언어와 Go 언어의 차이점은 무엇입니까?

이 튜토리얼의 운영 환경: windows7 시스템, c99&&GO 버전 1.18, Dell G3 컴퓨터.

소스 파일 비교

  • C 언어 소스 파일
파일 확장자 소스 유형
.h 코드 선언이 저장되는 헤더 파일
.c C 언어 소스 파일, 코드 구현 저장
  • Go 언어 소스 파일
파일 확장자 소스 유형
.go Go 언어 소스 파일, 코드 구현 저장

코드 관리 비교

  • 코드는 C 언어에서 파일을 통해 관리됩니다.
    • 특정 기능을 사용하려면 해당 .h 파일만 포함하면 됩니다
  • In Go 언어 , 패키지를 통해 코드를 관리하는 데 사용됩니다
    • Go 언어에는 .h 파일의 개념이 없습니다. Go에서 특정 기능을 사용하려면 해당 패키지를 가져오기만 하면 됩니다
  • 공개 및 비공개 관리 C 언어의 함수 및 변수
    • Pass Extern 및 static 함수 및 변수 노출 여부 구현
  • Go 언어의 함수 및 변수의 공개 및 비공개 관리
    • 함수의 첫 글자 대문자를 사용하여 함수를 노출할지 여부 함수명
    • 변수명의 첫 글자를 대문자로 표기하여 변수 노출 여부

키워드 비교

  • C언어에는 총 32개의 키워드가 있습니다
union
1 2 3 4 5 6 7 8
if else 스위치 case default break 반환 유형 def structenum
char shortint long floatdoublevoid sizeof signedunsigned const
auto register 정적 외부 휘발성 Go 언어에는 총 25개의 키워드가 있습니다
1 234 5 6 7 8
  • if
default C 언어 데이터 유형64비트 컴파일러char4
else switch case
break return goto ㅋㅋㅋ const map func interface rangeimport packagedefergo selectchan
데이터 유형 비교
Go 언어 데이터 유형 C 언어의 각 데이터 유형은 메모리 공간을 차지합니다
종류 32비트 컴파일러



1
1

int
4

float

4

4
  • 더블

    C 언어와 Go 언어의 차이점은 무엇입니까? 8

  • 8
  • shortC 언어와 Go 언어의 차이점은 무엇입니까?
    2

  • 2

  • long
488
long long 8
void* 4 8
  • Go 언어의 각 데이터 유형은 메모리 공간을 차지합니다.
typeint8/uint8int16/uint16int32/uint32 int64/uint64byteruneintuintptrfloat32float64tru ​​efalse
32비트 컴파일러 64비트 컴파일러 Essence
1 1 부호 있는 문자/부호 없는 문자
2 2 signed short/unsigned short
4 4 signed 에드 int
8 8 signed long long int/unsigned long long int
1 1 uint8/unsigned char
4 4 int32/ signed int
4 8 기계 자릿수에 따라 길이 결정
4 8 기계 수에 따라 길이 결정 숫자 uint32/uint64
4 4 float
8 8 double
1 1 Char 유형 정수
1 1 Char 유형 정수
C 언어와 마찬가지로 Go 언어도 계산 변수의 크기를 위한 메모리 공간을 제공합니다
  • 1 가져오기 "안전하지 않은" 패키지
    • 2를 통해 계산합니다. unsafe.Sizeof() 가변 메모리 공간

Go 언어의 기본 데이터 유형 내부 구현
  • golang 공식 웹사이트 go1.4 버전 소스 코드 다운로드
    • 버전이 오래될수록 코드가 순수할수록 초보자가 배우기에 적합합니다
      • 코드가 업데이트되면서 반복이 점차 매우 복잡해지기 때문에 버전 1.4
    • 을 다운로드하고 압축을 푼 후 경로를 여는 것이 좋습니다: gosrcruntimeruntime.h
    • gosrcruntimeruntime.h

    C 언어와 Go 언어의 차이점은 무엇입니까?

    • 得到如下实现代码
// 第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,
};

install B 时刻:
Go本质就是用C语言编写的一门高级编程语言
所以江哥前面教你C语言就是为了今天能让你看懂Go的实现代码,做到知其然知其所以然


常量变量对比

  • C语言定义常量和变量格式
数据类型 变量名称 = 值;
const 数据类型 常量名称 = 值;
  • Go语言定义常量和变量格式
    • 除了以下标准格式外,Go语言还提供了好几种简单的语法糖
var 变量名称 数据类型 = 值;
const 变量名称 数据类型 = 值;

注释对比

  • 和C语言一样,Go语言也支持单行注释和多行注释, 并且所有注释的特性都和C语言一样
    • 单行注释 // 被注释内容
    • 多行注释 /* 被注释内容*/C 언어와 Go 언어의 차이점은 무엇입니까?
    다음 구현 코드 받기
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
}

install B moment:
Go의 본질은 C 언어로 작성된 고급 프로그래밍 언어입니다.
그래서 Jiang 형제는 앞서 C 언어를 가르쳐 주었기 때문에 오늘은 여러분이 Go의 구현 코드가 무엇이며 왜 수행되는지 알아보세요

상수 변수 비교

    • C 언어는 상수 및 변수 형식을 정의합니다
      • 返回值类型 函数名称(形参列表) {
                函数体相关语句;
                return 返回值;
        }
      • Go 언어는 상수 및 변수를 정의합니다. 형식
    • 다음 표준 형식 외에도 Go 언어는 몇 가지 간단한 구문 설탕도 제공합니다.
      func  函数名称(形参列表)(返回值列表) {
              函数体相关语句;
              return 返回值;
      }
    댓글 비교C 언어와 마찬가지로 Go 언어도 한 줄 주석과 여러 줄 주석을 지원합니다. , 모든 댓글의 기능은 C언어와 동일합니다Go 언어에서는 여러 줄 주석 대신 한 줄 주석을 사용하는 것이 공식적으로 권장됩니다. (자세한 내용은 Go 공식 소스 코드에서 직접 볼 수 있습니다.)연산자 비교산술 연산자는 C 언어와 거의 같습니다Go 언어의 ++ 및 -- 연산자는 전치사를 지원하지 않습니다잘못된 쓰기: + +i; --i;Go 언어에서는 ++ 및 -- 표현식이 아니라 명령문이므로 별도의 줄을 차지해야 합니다잘못된 쓰기: a = i++; return i++;OperatorDescriptionExample +덧셈A + B-뺄셈A - B*곱하기A B
    한줄 주석 // 주석 내용 다행 주석 /* 주석 내용*/

    • /
    d ivideB / AB % A관계 연산자는 다음과 같습니다. C 언어OperatorDescriptionInstance==둘 다 확인 값이 같은지 여부를 확인하고 같으면 True를 반환하고 그렇지 않으면 False를 반환합니다. A == B!= 두 값이 같지 않은지 확인하고, 같지 않으면 True를 반환하고, 같지 않으면 False를 반환합니다. A != B
    % 나머지 찾기
    ++ increment A++
    - - 감소 A--
    🎜🎜🎜>🎜🎜왼쪽 값이 오른쪽 값보다 큰지 확인하고, 그렇다면 True를 반환하고, 그렇지 않으면 False를 반환합니다. 🎜🎜A > B🎜🎜🎜🎜=🎜🎜왼쪽 값이 오른쪽 값보다 크거나 같은지 확인하여 그렇다면 True를 반환하고 그렇지 않으면 False를 반환합니다. 🎜🎜A >= B🎜🎜🎜🎜
    • 逻辑运算符和C语言一样
    运算符 描述 实例
    && 如果两边的操作数都是 True,则条件 True,否则为 False。 A && B
    || 如果两边的操作数有一个 True,则条件 True,否则为 False。 A || B
    ! 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !A

    • 位运算符和C语言几乎一样
      • 新增一个&^运算符
    运算符 描述 实例
    & 参与运算的两数各对应的二进位相与, 对应位只要都是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语言几乎一样
      • 新增一个&^=运算符
    运算符 描述 实例
    = 将右边赋值给左边 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循环都可以做

    函数和方法对比

    • C语言定义函数格式
    返回值类型 函数名称(形参列表) {
            函数体相关语句;
            return 返回值;
    }
    • Go语言定义函数格式
    func  函数名称(形参列表)(返回值列表) {
            函数体相关语句;
            return 返回值;
    }
    • C语言中没有方法的概念, 但是Go语言中有方法
      • 对于初学者而言,可以简单的把方法理解为一种特殊的函数
    func  (接收者 接受者类型)函数名称(形参列表)(返回值列表) {
            函数体相关语句;
            return 返回值;
    }

    编程思想对比

    • C语言是一门面向过程的编程语言
      • 面向过程: 按部就班, 亲力亲为,关注的是我应该怎么做?
      • 做饭例子: 面向过程做饭
        • 1.上街买菜
        • 2.摘菜
        • 3.洗菜
        • 4.切菜
        • 5.开火炒菜
        • 6.淘米煮饭
        • 7.吃饭
    • Go语言是门面向对象的编程语言
      • 面向对象:化繁为简, 能不自己干自己就不干,关注的是我应该让谁来做?
      • 做饭例子: 面向对象做饭
      • 1.找个会做饭女朋友 or 男朋友
      • 2.老婆我饿了 or 老公我饿了
      • 3.躺着...等她/他把饭做好
      • 4.吃饭
    • 不要把面向过程和面向对象想象得那么神奇, 它们只是思考问题的方式不同而已

    更多编程相关知识,请访问:编程视频!!

    위 내용은 C 언어와 Go 언어의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.