【Go入门】Go语言基础知识
文章目录
- 一、Go 语言介绍
- 1. Go 思想
- 2. Go 语言为并发而生
- 3. Go 语言简单易学
- 4. Go 优点
- 5. Go 适合做什么
- 二、Go 语言特点
- 三、Go 语言基础
- 1. Go 文件名
- 2. Go标记
- 3. 关键字
- 4. 标识符
- 5. Go 语言声明:
- 6. 不存在行分隔符
- 7. `{` 不能单独放在一行
- 8. 实现字符串连接:`+`
- 9. 空格的使用
- 10. 格式化字符串:`fmt.Sprintf`
- 参考链接
一、Go 语言介绍
Go 语言(或 Golang)是 Google 2009 年首次开源,并在 2012 年正式发布 Go 稳定版的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去10多年间软件开发的难度令人沮丧。Google 对 Go 寄予厚望,其设计是让软件充分发挥 多核心处理器同步多工 的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助开发者处理琐碎但重要的内存管理问题。Go 的速度也非常快,几乎和 C 或 C++ 程序一样快,且能够快速开发应用程序。
Go(又称 Golang)一种 静态强类型、编译型 语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
1. Go 思想
Less can be more 大道至简,小而蕴真,让事情变得复杂很容易,让事情变得简单才难,深刻的工程文化。
2. Go 语言为并发而生
Go语言在 多核并发 上拥有原生的设计优势,Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验。
Go是非常年轻的一门语言,它的主要目标是 “兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”
很多公司,特别是中国的互联网公司,即将或者已经完成了使用 Go 语言改造旧系统的过程。经过 Go 语言重构的系统能 使用更少的硬件资源获得更高的并发和I/O吞吐表现 。充分挖掘硬件设备的潜力也满足当前精细化运营的市场大环境。
Go语言的并发是基于 goroutine 的,goroutine 类似于线程,但并非线程。可以将 goroutine 理解为一种 虚拟线程 。Go 语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用CPU性能。开启一个goroutine的消耗非常小(大约2KB的内存),你可以轻松创建数百万个goroutine。
goroutine的特点:
- goroutine 具有可增长的分段堆栈。这意味着它们只在需要时才会使用更多内存。
- goroutine 的启动时间比线程快。
- goroutine 原生支持利用 channel 安全地进行通信。
- goroutine 共享数据结构时无需使用互斥锁。
3. Go 语言简单易学
语法简洁
Go 语言简单易学,学习曲线平缓,不需要像 C/C++ 语言动辄需要两到三年的学习期。Go 语言被称为“互联网时代的C语言”。Go 语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有 for 一种表示方法,就可以实现数值、键值等各种遍历。
代码风格统一
Go 语言提供了一套 格式化工具 ——go fmt。一些 Go 语言的开发环境或者编辑器在保存时,都会使用格式化工具进行修改代码的格式化,这样就保证了不同开发者提交的代码都是统一的格式。
开发效率高
Go语言实现了开发效率与执行效率的完美结合,让你像写Python代码(效率)一样编写C代码(性能)。
4. Go 优点
自带gc。
静态编译,编译好后,扔服务器直接运行。
简单的思想,没有继承,多态,类等。
丰富的库和详细的开发文档。
语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。
简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。
超级简单的交叉编译,仅需更改环境变量。
5. Go 适合做什么
- 服务端开发
- 分布式系统,微服务
- 网络编程
- 区块链开发
- 内存KV数据库,例如boltDB、levelDB
- 云平台
二、Go 语言特点
- 自动立即回收。
- 更丰富的内置类型。
- 函数多返回值。
- 错误处理。
- 匿名函数和闭包。
- 类型和接口。
- 并发编程。
- 反射。
- 语言交互性。
三、Go 语言基础
1. Go 文件名
所有的go源码都是以 “.go” 结尾。
2. Go标记
Go 程序由多个标记组成,包括关键字,标识符,常量,字符串,符号。
例如,以下 GO 语句由 6 个标记组成:
fmt.Println("Hello, World!")
//一行是一个标记,共6个标记
1. fmt
2. .
3. Println
4. (
5. "Hello, World!"
6. )
3. 关键字
Go只有25个关键字:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
Go还有37个保留字:
Constants: true false iota nilTypes: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptrfloat32 float64 complex128 complex64bool byte rune string errorFunctions: make len cap new append copy close deletecomplex real imagpanic recover
程序一般由关键字、变量、常量、运算符、类型和函数组成。
程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。
程序中可能会使用到这些标点符号:. , ; : …
4. 标识符
标识符用来 命名 变量、类型等程序实体。一个标识符实际上是由一个或是多个字母(大写或小写)、数字(0~9)、下划线_所组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
以下是有效的标识符:
mahesh kumar abc move_name a_123
myname50 _temp j a23b9 retVal
以下是无效的标识符:
1. 1ab(以数字开头)
2. case(Go 语言的关键字)
3. a+b(运算符是不允许的)
另外:以大写字母开头的标识符可导出
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
总结
Go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则:
1)首字符可以是任意的Unicode字符或者下划线
2)剩余字符可以是Unicode字符、下划线、数字
3)字符长度不限
5. Go 语言声明:
有四种主要声明方式:
var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)
Go程序保存在多个.go文件中,文件的第一行就是 package XXX 声明,用来说明 该文件属于哪个包(package),package声明下来就是import声明(导入哪些包),再下来是类型,变量,常量,函数的声明。
声明的位置决定其作用域:
1)声明在函数内部,是函数的本地值,类似 private
2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似 protect
3)声明在函数外部且首字母大写是所有包可见的全局值,类似 public
6. 不存在行分隔符
在 Go 程序中,一行代表一个语句结束。
不需要像 C 家族中的其它语言一样以分号 ;
结尾,因为这些工作都将由 Go 编译器自动完成。
如果你打算将多个语句写在同一行,它们则必须使用 ;
人为区分,但在实际开发中我们并不鼓励这种做法。
7. {
不能单独放在一行
表示函数体开始的前花括号“ { ” 不能单独放在一行。
例如,以下代码运行会报错:
package mainimport "fmt"func main()
{ // 错误,{ 不能在单独的行上fmt.Println("Hello, World!")
}
错误内容:
.\main.go:13:6: missing function body
.\main.go:14:1: syntax error: unexpected semicolon or newline before {
正确代码:
package mainimport "fmt"func main() { //“{”没有单独在一行fmt.Println("Hello, World!")
}
8. 实现字符串连接:+
package main
import "fmt"
func main() {fmt.Println("Google" + "Runoob")
}
以上实例输出结果为:
GoogleRunoob
9. 空格的使用
- Go 语言中变量的声明必须使用空格隔开,如:
var age int;
- 而且空格的使用会使得程序更加可读和美观。
10. 格式化字符串:fmt.Sprintf
Go 语言中可以使用 fmt.Sprintf
格式化字符串并赋值给新串:
package mainimport ("fmt"
)func main() {// %d 表示整型数字,%s 表示字符串var stockcode=123var enddate="2020-12-31"var url="Code=%d&endDate=%s"var target_url=fmt.Sprintf(url,stockcode,enddate)fmt.Println(target_url)
}
输出结果为:
Code=123&endDate=2020-12-31
fmt.Sprintf
格式化字符串的格式如下:
fmt.Sprintf(格式化样式, 参数列表…)
- 格式化样式:字符串形式,格式化符号以 % 开头, %s 字符串格式,%d 十进制的整数格式。Go 字符串格式化符号:
- 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。
参考链接
- 菜鸟教程 | Go语言
- go语言介绍
- Go语言的主要特征
【Go入门】Go语言基础知识相关推荐
- c语言基础知识入门(c语言基础知识入门代码)
C语言怎么入门 初学C语言的基本 一开始 由算法开始,毕竟你以前学的算法和c有所不同 然后开始学程序流程控制 接着学内存处理机制 提高深入编程 然后与其他软件 如sql web 联系起来学习 后面的 ...
- 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)
目录 第六章:数组 6-1 数组 6-2 数组计算 6.3 课后习题 第六章:数组 6-1 数组 题目:让用户输入一组整数以-1结束输入,算出这组数的平均值,并且输出大于平均值的数. 我们需要记录用户 ...
- C语言入门 | c语言基础知识
转自:http://www.pinlue.com/article/2020/06/2413/4210810901936.html
- C语言基础知识入门和C语言入门基础知识大全
一.C语言基础知识入门 C语言一出现,就以其丰富的功能.强大的表达能力.灵活性.方便性和广泛的应用,在世界范围内迅速普及和普及.C语言不仅高效而且可移植.它可以用来开发应用软件.驱动程序.操作系统等. ...
- R语言基础知识入门学习(一)
目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...
- 2023年C语言基础知识入门(大全)
一.C语言基础知识入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是 ...
- C语言基础知识入门(大全详解)
一.C语言基础知识入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是 ...
- C语言基础知识入门【2022】
一.C语言基础知识入门前言 C语言一经出现就以其特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等,也是其它众多高级编程语言的鼻祖语言,所以说学习C ...
- 2022最新知识,一步一步学习C语言基础知识入门(图例解析)
一.C语言基础知识入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是 ...
- java入门学习笔记(二)—— Eclipse入门学习之快捷键、java语言基础知识之各类关键字及其用法简析
一.Eclipse入门学习 1. 快捷键 对于一个编辑器,快捷键必不可少,是十分好用且有效的工具. 对于一个初学者,首先掌握了如下快捷键. (很多通用的快捷键不多说) Ctrl + / -- 注释当前 ...
最新文章
- ValueError: The data property of a figure may only be assigned a list or tuple that contains a .....
- HTML5--表单标签input新增type值
- boost::geometry::strategy::simplify::douglas_peucker用法的测试程序
- Facebook用户遭遇千年虫:瞬间有了46年老友
- 手机html5性能测试工具,HTML5模块 性能方面8大测试环节_小米 M3_手机硬件频道-中关村在线...
- jQuery UI 下载 拖动组件
- 株洲市码高机器人编程_码高机器人教育
- 库会因为权限问题无法打开——selinux开启严格模式
- PHP Xdebug调试专题
- TSO、UFO、GSO、LRO、GRO和RSS介绍(ethtool命令)
- NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题
- 【C语言】操作符详解
- python添加模块搜索路径和包的导入_python添加模块搜索路径和包的导入方法
- 虚拟现实跑步机Kat Walk自由来袭
- Win11控制面板快捷键 Win11打开控制面板的多种方法
- HTML5期末大作业:电影网站设计——电影资讯博客(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web学生网页设计作业源码
- pyqtgraph文档笔记(五)总结:几个类的理解( GraphicsView, GraphicsItem ,GraphicsObject, PlotWidget等)
- oracle10G安装与配置
- java技术栈xmind,zookeeper面试
- 《THE BASIC GRAMMER OF C》
热门文章
- Java中channel的应用总结
- 编写一个程序,此程序在运行时要求用户输入一个	整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。...
- java flowable_rxJava reactivex.Flowable使用
- 安娜Anna:世界最快的超级伸缩的KVS, 秒杀Redis
- 蓝桥 Python 大于等于n的最小完全平方数
- hype3 响应布局_使用Hype 3的基于时间轴的Web动画
- 多测师拱墅校区肖sir___性能测试之硬件指标
- pcb覆铜 厚度 过孔大小 过孔与导线比例
- LTE-V2X笔记:一些基础知识
- Profinet协议基础知识(二)