linux上go编译器下载:yum install go -y
1.go:hello.go
package main
import "fmt"
/* { 不能独立一行,只能跟随在函数等后面 */
func main(){
fmt.Println("hello,world")
}
运行:go run hello.go
编译:go build hello.go
编译体积:2M
去掉符号体积为1.4M:strip -s hello
2.c++: hello.cpp
#include <iostream>
int main()
{
std::cout << "hello,world" << std::endl;
return 0;
}
动态编译体积:8K
需要动态库如下:
[root@jn go]# ldd a.out
linux-vdso.so.1 => (0x00007ffd87d78000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f1f793b5000)
libm.so.6 => /lib64/libm.so.6 (0x00007f1f790b3000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f1f78e9d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1f78acf000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1f796bf000)
[root@jn go]#
静态编译体积:5.5M
去掉符号体积为1.3M:strip -s a.out
结论:
go语言使用静态编译,初衷是为了避免库依赖,相比C++静态编译,体积方面相差不多
3.在 Go 语言中,变量在声明但没有明确初始化时,会被赋予其对应类型的默认零值。Go 支持以下几种基本类型的默认零值:
- 数值类型(整数和浮点数):默认为 0。
int
、int8
、int16
、int32
、int64
uint
、uint8
、uint16
、uint32
、uint64
、uintptr
float32
、float64
- 布尔类型:默认为
false
。
bool
- 字符串类型:默认为空字符串
""
。
string
- 字符类型:默认为 0(即空字符)。
byte
:uint8
的别名rune
:int32
的别名,用于表示 Unicode 码点
- 复数类型:默认为 0。
complex64
:由两个float32
表示的复数complex128
:由两个float64
表示的复数
-
指针类型:默认为
nil
。
**int
、*float64
、*string
等 -
函数类型:默认为
nil
。
func
- 接口类型:默认为
nil
。
interface
- 切片类型:默认为
nil
。
[]int
、[]string
等
- 映射类型:默认为
nil
。
map[string]int
等
- 通道类型:默认为
nil
。
chan int
等