首页 > 其他分享 >1.1 Golang 初识

1.1 Golang 初识

时间:2024-05-30 13:44:27浏览次数:19  
标签:1.1 编译 支持 Golang go 初识 Go 语言

1.1.1 简介

Go(又称Golang)是Google的Robert Griesemer,Rob Pike及Ken Thompson开发的一种计算机编程语言

1.1.2 设计初衷

Go是一种编译型语言,可以进行快速开发,解决c/c++项目太慢 内存泄漏等问题。有着很强的并发能力以及极低的内存消耗。

1.1.3 应用领域

1.Go服务器端/游戏软件工程师

2.Go分布式/云计算软件工程师

3.区块链工程师

Go特别适合应用在需要高并发的场景

Go 语言出现的目的是希望在编程领域创造最实用的方式来进行软件开发。它并不是要用奇怪的语法和晦涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提倡通过接口来针对面向对象编程,通过 goroutine 和 channel 来支持并发和并行编程。

1.1.4 说明

第 18 章可以作为你在开发时的一个参考手册,因为当中包含了众多的有价值的代码片段以及相关的解释说明。

最后要说明的是,书中所有的代码都在 Go1.4 版本下测试通过。

Go 语言的官方网站是 golang.org,这个站点采用 Python 作为前端,并且使用 Go 语言自带的工具 godoc 运行在 Google App Engine 上来作为 Web 服务器提供文本内容。在官网的首页有一个功能叫做 Go Playground,是一个 Go 代码的简单编辑器的沙盒,它可以在没有安装 Go 语言的情况下在你的浏览器中编译并运行 Go,它提供了一些示例,其中包括国际惯例 “Hello, World!”。

更多的信息详见 github.com/golang/go,Go 项目 Bug 追踪和功能预期详见 github.com/golang/go/issues

go-lang.cat-v.org/ 是 Go 语言开发社区的资源站,irc.freenode.net 的#go-nuts 是官方的 Go IRC 频道。

@golang 是 Go 语言在 Twitter 的官方帐号,大家一般使用 #golang 作为话题标签。

这里还有一个在 Linked-in 的小组:www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr

Go 编程语言的维基百科:en.wikipedia.org/wiki/Go_(programming_language)

Go 语言相关资源的搜索引擎页面:gowalker.org

Go 语言还有一个运行在 Google App Engine 上的 Go Tour,你也可以通过执行命令 go install go-tour.googlecode.com/hg/gotour 安装到你的本地机器上。对于中文读者,可以访问该指南的 中文版本,或通过命令 go install https://bitbucket.org/mikespook/go-tour-zh/gotour 进行安装。

1.1.5 Go语言的发展目标

Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。

Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。

Go 语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒

Go 语言还能够在运行时进行反射相关的操作。

使用 go install 能够很轻松地对第三方包进行部署。

此外,Go 语言还支持调用由 C 语言编写的海量库文件(第 3.9 节),从而能够将过去开发的软件进行快速迁移。

1.1.6 指导设计原则

Go语言通过减少关键字的数量(25 个)来简化编码过程中的混乱和复杂度。

Go 语言有一套完整的编码规范,你可以在 Go 语言编码规范 页面进行查看。作为一门具有明确编码规范的语言,它要求可以采用不同的编译器如 gc 和 gccgo(第 2.1 节)进行编译工作,这对语言本身拥有更好的编码规范起到很大帮助。

LALR 是 Go 语言的语法标准,你也可以在 src/cmd/internal/gc/go.y 中查看到,这种语法标准在编译时不需要符号表来协助解析。

1.1.7 语言的特性

因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。

函数是 Go 语言中的基本构件,它们的使用方法非常灵活。

Go 语言使用静态类型,所以它是类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快。

作为强类型语言,隐式的类型转换是不被允许的,记住一条原则:让所有的东西都是显式的。

Go 语言其实也有一些动态语言的特性(通过关键字 var),所以它对那些逃离 Java 和 .Net 世界而使用 Python、Ruby、PHP 和 JavaScript 的开发者们也具有很大的吸引力。

Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行下 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化!

1.1.8 特性缺失

  • 为了简化设计,不支持函数重载和操作符重载

  • 为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换

  • Go 语言通过另一种途径实现面向对象设计(第 10-11 章)来放弃类和类型的继承

  • 尽管在接口的使用方面(第 11 章)可以实现类似变体类型的功能,但本身不支持变体类型

  • 不支持动态加载代码

  • 不支持动态链接库

  • 不支持泛型

  • 通过 recoverpanic 来替代异常机制(第 13.2-3 节)

  • 不支持断言

  • 不支持静态变量

1.1.9 小结

这里列举一些 Go 语言的必杀技:

  • 简化问题,易于学习
  • 内存管理,简洁语法,易于使用
  • 快速编译,高效开发
  • 高效执行
  • 并发支持,轻松驾驭
  • 静态类型
  • 标准类库,规范统一
  • 易于部署
  • 文档全面
  • 免费开源

标签:1.1,编译,支持,Golang,go,初识,Go,语言
From: https://www.cnblogs.com/kuro-liang/p/18222179

相关文章

  • golang reflect 常见示例
    reflect是golang中元编程的能力体现。需要注意的是,reflect尽量不用,有性能问题,也有避免滥用的考虑。packagemainimport( "log" "reflect")typeAstruct{ aint bstring cbool}//实验reflect的相关函数funcmain(){ typeValue() callFunc()}funcother......
  • Android基础-初识Android系统架构
    Android系统架构详解Android系统作为一款广泛应用于智能手机、平板电脑等设备的操作系统,其架构的设计对于系统的稳定性、可扩展性和用户体验至关重要。Android系统架构是一个复杂的层次结构,旨在实现硬件与软件之间的高效协同工作,为用户提供丰富的功能和良好的体验。以下是对An......
  • 1.1 嵌入式八股文(一)
    C语言简述编译运行一段代码的过程源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件,源程序就是所写好的代码。可执行程序,即常说的.exe程序,可以执行程序,完成计算机功能。在C语言中,.c文件就是所谓的源文件。源程序到可执行程序的过程。在这个过程中......
  • 初识dockerfile
     dockerfile就是用来构建docker镜像的构建文件!命令脚本!先体验一下!通过这个脚本可以生成镜像,镜像是一层一层,脚本一个个的命令,每个命令都是一层!#创建一个dockerfile文件,名字可以随机,建议dockerfile#文件中的内容指令(大写)参数[root@localhosthome]#mkdirdocker-test-volume......
  • golang errgroup 的作用
     errgroup是Go中用于并发控制和错误处理的一个工具,提供了一种方便的方式来协调多个goroutine。它允许你在一个组中运行多个goroutine,并等待它们全部完成,同时收集和返回第一个发生的错误。它的主要作用包括:同步:errgroup.Group提供了一个Wait方法,这个方法会阻塞调......
  • golang errgroup 的超时检测
     > golangerrgroup的作用.errgroup的超时检测通常是一种事后得到结果的方式。 errgroup本身并不直接支持超时控制,而是依赖于与之关联的context.Context来实现超时和取消功能。 当context超时时,它会关闭Done通道,这将通知errgroup中的协程。 errgroup的Wait方法在检......
  • golang kafka例子
    packagemain//生产者代码import( "fmt" "github.com/IBM/sarama" "time")//基于sarama第三方库开发的kafkaclientvarbrokers=[]string{"127.0.0.1:9092"}vartopic="hello_kafka0"//同步消息模式funcsyncProducer(conf......
  • Git初识-常用命令
    commandsconfiggitconfig--localuser.name"<user-name>"#配置本地(当前项目)的用户名gitconfig--localuser.email"<user-email>"#配置本地(当前项目)的用户邮箱gitconfig--globaluser.name"<user-name>"#配置全局的用户名gitconfig......
  • ubuntu18.04.6安装配置StrongSwan5.1.1
    目前成功配置执行ipsecstart命令的ubuntu版本为18.04.6以及22.04,两个版本的配置过程完全相同,但是22.04版本在后续配置CA证书中发生未知错误,18.04.6正常进行,推荐优先低于18.04.6版本进行配置。虚拟机均从清华源下载https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/Vm工......
  • Golang中的三种指针
    三种类型的指针:类型用途备注普通类型指针传递对象的地址,不能做指针运算uintptr作为一段内容的首地址,可以做指针运算,GC不把uintptr当指针,uintptr无法持有对象。uintptr类型的目标会被回收。unsafe.Pointer不能做指针运算,可以用做在不同数据类型指针间转......