Go初识

Wesley13 等级 292 0 0
标签: go语言

Go初识

下载安装包:https://golang.org/dl/

什么是Go语言

  • Go语言也称为 Golang,是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言;Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验就可以轻松搞定。

Go语言特点

  • 语法简单:Go语言的语法规则严谨,没有歧义,更没什么黑魔法变异用法。任何人写出的代码都基本一致,这使得Go语言简单易学
  • 并发模型:从根本上将一切都并发化,运行时用 Goroutine 运行所有的一切,包括 main.main 入口函数,Goroutine 是 Go 最显著的特征。它用类协程的方式来处理并发单元,却又在运行时层面做了更深度的优化处理。这使得语法上的并发编程变得极为容易,无须处理回调,无须关注线程切换,仅一个关键字,简单而自然。搭配 channel,实现 CSP 模型。将并发单元间的数据耦合拆解开来,各司其职,这对所有纠结于内存共享、锁粒度的开发人员都是一个可期盼的解脱。666
  • 内存分配:它会竭力将对象分配在栈上,以降低垃圾回收压力,减少管理消耗,提升执行性能。可以说,除偶尔因性能问题而被迫采用对象池和自主内存管理外,我们基本无须参与内存管理操作。
  • 垃圾回收:还在完善中
  • 静态链接:将运行时、依赖库直接打包到可执行文件内部,简化了部署和发布操作,无须事先安装运行环境和下载诸多第三方库。这种简单方式对于编写系统软件有着极大好处,因为库依赖一直都是个麻烦。
  • 标准库:丰富,优秀代表(net、http)
  • 工具链:简单易容,内置完整测试框架,还可通过环境变量输出运行时监控信息,尤其是垃圾回收和并发调度跟踪,可进一步帮助我们改进算法,获得更佳的运行期表现。

Go适合做什么

  • 其实Go语言主要用作服务器端开发,其作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域。

Java与Go的对比

Go初识

特点

Java

Golang

性能

Java执行性能比golang差一些

go的性能可以媲美c,c++

并发

Java并发性能比golang差一些

引入了协程,并发粒度相对java更小,性能更高。

生态

Java工具丰富,社区庞大。Spring全家桶十分强大

golang工具比Java少。Beego、****Gin等web框架,稍逊spring

跨平台

支持跨平台。编译部署比较简单。

编译go如同编译C++一样,不同操作系统需要交叉编译,由于依赖服务器的一些环境

统一异常处理

Spring框架可以简单的设置统一异常处理

Gin等框架也可以,对异常和错误统一进行处理,返回统一的错误格式

垃圾回收

支持垃圾回收,并且效率很高

支持垃圾回收。目前垃圾回收效率略低于Java

面向对象

支持面向对象,支持封装,继承,多态

支持面向对象,但是没有继承。满足封装和多态。官方推荐使用组合。认为继承的入侵性太强。

虚拟机

代码运行虚拟机中

无虚拟机

AOP

java在运行时能通过字节码操作,强化类功能。实现动态代理。

go是静态语言,不支持动态机器码生成。可以使用策略模式,实现类似功能。

指针

不支持指针操作

支持指针

泛型

支持泛型

Go1.17新版本,也将支持泛型

APM 工具链

非常完善

目前支持还不够完善

网络

拥有Netty,网络支持完善

拥有fasthttp,但是HTTP/2.0不支持,WebSocket 不支持

待续......

收藏
评论区

相关推荐

【Golang】Goland使用介绍
goland介绍 Goland官方地址:http://www.jetbrains.com/go/(http://www.jetbrains.com/go/) goland安装 下载 Windows下载地址:https://download.jetbrains.com/go/goland2018.2.1.exe(https://download
Go语言开发的利与弊
Go 语言有多火爆?国外如 Google、AWS、Cloudflare、CoreOS 等,国内如七牛、阿里等都已经开始大规模使用 Go 语言开发其云计算相关产品。在 Go 语言的使用过程中,需要注意哪些 Yes 和 But? 最近,我们使用 Go 语言编写了一个 API,Go 语言是一种开源编程语言,2009 年由 Google 推出。在使用 Go 进行开
go 语言资源整理
Awesome GitHub Topic for Go(https://links.jianshu.com/go?tohttps%3A%2F%2Fgithub.com%2Ftopics%2Fgolang) Awesome Go(https://links.jianshu.com/go?tohttps%3A%2F%2F
知乎从Python转为Go,是不是代表Go比Python好?
众所周知,知乎早在几年前就将推荐系统从 Python 转为了 Go。于是乎,一部分人就说 Go 比 Python 好,Go 和 Python 两大社区的相关开发人员为此也争论过不少,似乎,谁也没完全说服谁。 知乎从Python转为Go,是不是代表Go比Python好?我认为,各有优点,谁也取代不了谁,会长期共存! “由 Python 语言转向 Go 语言
go语言开发入门:GO 开发者对 GO 初学者的建议
以促进 India 的 go 编程作为 GopherConIndia 承诺的一部分。我们采访了 40 位 Gophers(一个 Gopher 代表一个 GO 项目或是任何地方的 GO 程序员),得到了他们关于 GO 的意见。如果你正好刚刚开始 go 编程,他们对于我们一些问题的答案可能会对你有非常有用。看看这些。应该做:通读 the Go standard
Go 语言编程 — go mod 依赖包管理
目录 == ### 文章目录 * 目录 * go mod 依赖包管理 * 使用 go mod go mod 依赖包管理 ============ go mod 是 Golang 1.11 版本引入的依赖包管理工具。其中,Golang 对 Modules 的定义:Modules 是相关 Go Packages 的集合,是源代码交换和版本控制
Go文档支持
Go文档查看帮助很方便,主要可以通过以下两种方式查看 第一种,Go本地运行(参考:#Go语言安装#)起来后,References下面: * Package Go标准函数库说明。 * Command Go工具说明。 * Language Specification Go官
gh
gh-ost实战运用 ========== 一、安装步骤 ------ **1、环境** go版本:1.10.3 gh-ost版本:1.0.46 **2、安装go语言** # 安装go依赖包 yum install bison ed gawk gcc libc6-dev make -y #
go mod常用命令
开启Go module =========== go env ![](https://oscimg.oschina.net/oscnet/up-a2c46b6c3712f7a7e580445e593fe387a19.png) tips: 请使用go 1.13+版本 重点关注参数 ------ 开启go mod go en
go环境变量配置 (GOROOT和GOPATH)的区别和含义
<div id="myeditor" class="content article-entry"> <p>GOROOT就是go的安装路径</p><p>在~/.bash\_profile中添加下面语句:</p><p>GOROOT=/usr/local/go</p><p>export GOROOT</p><p>当然, 要执行go命令和go工具, 就要配置go的可
go遇到的坑
******GO配置:****** ================= GOROOT:go的安装路径:C:\\Go GOPATH:go命令安装的包存放的路径,这里放在%GOROOT%\\gocode GOROOT是不用配置环境变量就可以用的,但是GOPATH要配置才能用,如果没有配置的话默认是在%{USER}%\\go文件夹下。 GOPATH可以配置
vs code 下安装golang支持
1)安装gocode go get -u -v github.com/nsf/gocode 2)安装godef go get -u -v github.com/rogpeppe/godef 3)安装golint go get -u -v github.com/golang/lint/golint 4)安装go-find-references g
Golang查缺补漏(一)
### [Go语言高级编程(Advanced Go Programming)](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fbooks.studygolang.com%2Fadvanced-go-programming-book%2F) [Go语言高级编程(Advanced G
Sqlserver 事务处理模板
USE StuDB GO /****** Object: StoredProcedure [dbo].[proc_live_send_answer_v4] Script Date: 06/20/2017 14:44:26 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENT
Tus和go
前言 -- 现如今,分布式文件系统可谓是琳琅满目,多种多样,有hdfs,gfs,zfs,fastdfs,go-fastdfs等,怎么选择合适自己的分布式文件系统呢?在这篇文章中,我们不讲……额,我只想表达一下我在研究go-fastdfs过程中踩的坑。 go-fastdfs ---------- 首先,什么是go-fastdfs?是fastdfs的弟弟吗