Golang的语言特性

Golang的语言特性和与Java的比较

Go的语言特点

Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率使用一个表达式来形容 Go 语言:Go=C+Python,说明 Go 语言既有类似C语言这类静态语言的运行速度,又能达到 Python 动态语言的快速开发

继承C语言的理念

Go语言从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针

引入了包的概念

引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。

类似Java的自动GC

Go语言提供了垃圾回收机制,内存自动回收,不需开发人员管理

天然支持并发

  • 从语言层面支持并发,实现简单
  • goroutine :轻量级线程,可实现大并发处理,高效利用多核。
  • 基于 CPS 并发模型(Communicating Sequential Processes )实现
  • 吸收了管道通信机制,形成 Go 语言特有的管道 channel 通过管道 channel ,可以实现不同的 goroute 之间的相互通信。

类似Python的语法

  • 函数可以返回多个值

编译部署效率快

  • 编译速度快:Go 的编译器非常高效,即使是大型项目也能快速编译。
  • 生成静态链接的二进制文件:无需依赖外部动态库,部署极为简单

面向接口而非面向继承

  • 接口(interface)是隐式实现 :只要实现了接口的方法集合,就自动实现该接口。

  • 组合优于继承 :通过结构体嵌套实现代码复用,避免传统 OOP 中继承的复杂性。

Go和Java的联系和区别

Go和Java的相似之处

  • 静态类型语言 :Java 和 Go 都是静态类型语言,变量类型在编译时确定,便于类型检查。
  • 支持跨平台
    • Java 运行于 JVM,由JVM将统一的字节码解释成机器码
    • Go 编译器允许通过设置环境变量,编译出适用于 不同操作系统和架构 的二进制文件,从而支持跨平台开发。
  • 自动垃圾回收 :两者都具备 GC(Garbage Collection)机制,自动管理内存。

Go和Java的区别

  • 并发模型
    • Java:使用线程 + 线程池,较重,需显式管理
    • Go:使用 goroutine + channel,轻量且原生支持 CSP 模型
  • 面向对象
    • Java:典型的 OOP(支持继承、多态、接口)
    • Go:不支持类和继承,使用结构体 + 接口组合实现面向对象
  • 部署难度
    • Java:通常打包为 .jar.war,依赖 JRE 环境运行
    • Go:编译为单个可执行文件,部署非常方便

Go的环境变量

可通过命令查看和修改环境变量

1
2
go env #查看环境变量
go env -w #永久修改全局环境变量

基本路径

  • GOROOT :Go 安装目录(包含编译器、标准库等)默认由安装器自动设置,一般不需要修改
  • GOPATH :工作目录,用于存放源码、依赖、可执行文件
  • GOBIN :安装可执行文件的目录

模块管理

  • GOPROXY :模块代理地址,解决模块下载慢的问题
  • GO111MODULE :模块启用策略

Go的编译执行过程

命令行执行

  • 编译 :通过 go build 命令将 .go 文件编译成 .exe 文件,go build -o 可以指定可执行文件的名称
  • 执行 :运行 .exe 文件
  • 编译同时执行:go run.go 文件直接编译同时运行

Go支持跨平台构建,因此可以在一个平台上构建出针对不同平台的可执行文件

通过临时修改环境变量来构建出针对不同平台的可执行文件

1
2
3
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=0

可执行文件的类型

  • Windows:.exe 文件
  • Mac OS/Linux:无后缀名的文件

跨平台性

Go和Java一样支持 一次编译,处处运行

相比于Java根据不同平台设计不同的虚拟机来解释字节码的做法,Go 采用 静态编译(Static Compilation) 的策略

源代码 → 本地平台的完整二进制可执行文件,不依赖任何外部动态库或虚拟机。

这意味着生成的程序在目标平台上运行时不需要安装 Go 语言环境,也不需要共享库(.so/.dll),从而使跨平台部署变得非常容易。

Go实现跨平台性的原理是因为Go 编译器(主要是 cmd/compilecmd/link)支持多个目标平台架构(GOOS + GOARCH),并且这些后端已经内置在 Go 安装包中,不需要你手动安装交叉编译工具链(如 gcc-arm)。

比如,在 macOS 上安装 Go 后,你就能直接构建 Linux、Windows、Android、WASM 等平台的可执行文件。

在构建可执行文件时,通过设置环境变量实现平台切换

  • GOOS : 控制目标操作系统(如 linux、windows、darwin、android 等)
  • GOARCH :控制目标架构(如 amd64、arm64、386 等)

Go 编译器根据这两个变量,选择对应的:

  • 标准库实现(如 syscall_linux.gosyscall_windows.go
  • 汇编指令集
  • 系统调用桥接层
  • 链接器策略

go build和go run的区别

  • 如果先使用 go build 编译生成了可执行文件,那么可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行
  • 如果我们是直接 go run 源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发环境,否则无法执行。相当于编译到临时目录 + 执行后删除
  • 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多。
그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计