- Go 언어의 각 데이터 유형은 메모리 공간을 차지합니다.
type
32비트 컴파일러 |
64비트 컴파일러 |
Essence |
|
int8/uint8
1 | 1 |
부호 있는 문자/부호 없는 문자 |
|
int16/uint16
2 |
2 |
signed short/unsigned short |
|
int32/uint32
4 |
4 |
signed 에드 int |
|
int64/uint64
8 |
8 |
signed long long int/unsigned 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 |
|
tru e
1 |
1 |
Char 유형 정수 | | false
1 |
1 |
Char 유형 정수 |
|
C 언어와 마찬가지로 Go 언어도 계산 변수의 크기를 위한 메모리 공간을 제공합니다- 1 가져오기 "안전하지 않은" 패키지
- 2를 통해 계산합니다. unsafe.Sizeof() 가변 메모리 공간
-
Go 언어의 기본 데이터 유형 내부 구현 - golang 공식 웹사이트 go1.4 버전 소스 코드 다운로드
- 버전이 오래될수록 코드가 순수할수록 초보자가 배우기에 적합합니다
- 코드가 업데이트되면서 반복이 점차 매우 복잡해지기 때문에 버전 1.4
-
을 다운로드하고 압축을 푼 후 경로를 여는 것이 좋습니다: gosrcruntimeruntime.h gosrcruntimeruntime.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,
};
install B 时刻: Go本质就是用C语言编写的一门高级编程语言 所以江哥前面教你C语言就是为了今天能让你看懂Go的实现代码,做到知其然知其所以然
常量变量对比
数据类型 变量名称 = 值;
const 数据类型 常量名称 = 值;
- Go语言定义常量和变量格式
- 除了以下标准格式外,Go语言还提供了好几种简单的语法糖
var 变量名称 数据类型 = 值;
const 变量名称 数据类型 = 值;
注释对比
- 和C语言一样,Go语言也支持单行注释和多行注释, 并且所有注释的特性都和C语言一样
- 单行注释
// 被注释内容
- 多行注释
/* 被注释内容*/
다음 구현 코드 받기 -
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 언어와 마찬가지로 Go 언어도 한 줄 주석과 여러 줄 주석을 지원합니다. , 모든 댓글의 기능은 C언어와 동일합니다
한줄 주석 // 주석 내용
|
다행 주석 /* 주석 내용*/
| |
Go 언어에서는 여러 줄 주석 대신 한 줄 주석을 사용하는 것이 공식적으로 권장됩니다. (자세한 내용은 Go 공식 소스 코드에서 직접 볼 수 있습니다.)
| 연산자 비교 |
| 산술 연산자는 C 언어와 거의 같습니다
Go 언어의 ++ 및 -- 연산자는 전치사를 지원하지 않습니다 | 잘못된 쓰기: + +i; --i; |
| Go 언어에서는 ++ 및 -- 표현식이 아니라 명령문이므로 별도의 줄을 차지해야 합니다
잘못된 쓰기: a = i++; return i++; |
|
|
| Operator | Description | Example
|
| + | 덧셈
A + B |
| - | 뺄셈
A - B | | * | 곱하기 A B
d ivide
B / A
|
% |
나머지 찾기 |
B % A
++ |
increment |
A++ |
- - |
감소 |
A-- |
| | 관계 연산자는 다음과 같습니다. C 언어 |
| Operator | Description | Instance
|
| == | 둘 다 확인 값이 같은지 여부를 확인하고 같으면 True를 반환하고 그렇지 않으면 False를 반환합니다.
A == B |
| != | 두 값이 같지 않은지 확인하고, 같지 않으면 True를 반환하고, 같지 않으면 False를 반환합니다.
A != B 🎜🎜🎜>🎜🎜왼쪽 값이 오른쪽 값보다 큰지 확인하고, 그렇다면 True를 반환하고, 그렇지 않으면 False를 반환합니다. 🎜🎜A > B🎜🎜🎜🎜=🎜🎜왼쪽 값이 오른쪽 값보다 크거나 같은지 확인하여 그렇다면 True를 반환하고 그렇지 않으면 False를 반환합니다. 🎜🎜A >= B🎜🎜🎜🎜
运算符 |
描述 |
实例 |
&& |
如果两边的操作数都是 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 返回值;
}
编程思想对比
更多编程相关知识,请访问:编程视频!!
|