Go语言是Google的大牛们发明的一门新语言,2012年3月28日正式对外发布。去年7月份我第一次接触到Go语言,从此就喜欢上了它。本来这门语言是为C/C++程序员准备的,但是貌似更多的是Python程序员在学习和使用。
Go语言的主要特性有:
- 自动垃圾回收
- 丰富的内置语言类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
Hello world
hello.go
package main import "fmt" //需要使用fmt包中的Println()函数 func main(){ fmt.Println("Hello world") }
运行
有两种方式运行
//解释执行 >go run hello.go //编译执行 go build hello.go hello.exe
代码解读
1.每个Go的源代码开头都是一个package的声明,表示该Go代码所属的包。要生成Go可执行程序,必须建立一个名字为main的包,并且在该包中包含一个main()的函数,该函数不带参数,也没有返回值。
2. import用来导入程序中需要的包,如果导入的包没有被使用,Go的编译器会报错,支持相对路径和绝对路径。
3.Go的函数结构为:
func 函数名(参数列表)(返回值){ //函数结构体 } 如: func T(value1 int, value2 string)(result int, er error){ //.... }
函数以func开头,参数类型在参数的后面,如果有返回值在参数后面列出,强制左花括号必须在函数定义的第一行。
4.注释支持
/* 块注释 */ //行注释
变量
Go语言的变量声明和C/C++有明显的区别,它引入了关键字var,而且类型信息是放在变量名后面的。
变量的声明 var v1 int var v2 string var v3 [10] int //数组 var v4 [] int //数组切片 var v5 struct{ f int } var v6 int //指针 var v7 map[string]int var v8 func(a int)int 变量的初始化 var v1 int = 10 var v2 = 10 //编译器可以自动推导出v2的类型 var := 10 //编译器可以自动推到处v3的类型 := 不需要var来声明,一步到位,如果已经被声明,就不能使用这个符号了,否则会报错(no new variables on left side of :=) 变量赋值 var v10 int声明后,可以赋值 v10 = 10 多重赋值 i,j = j,i //无需加入中间变量 匿名变量 有的时候,我们需要获取函数返回的某一个值,却因为该函数返回多个值而定义许多没用的变量,从而导致不够优雅,Go有效的解决了这个问题,对于不用的变量,可以使用_来代替。 例如: func getName()(furstname,lastname,nickname){ return "David","Yang","D" } 如果只想获得第一个变量,可以这样来写代码 name,_,_ := getName()
常量
常量是指编译期间就已知并且不可改变的值,可以是数值类型(包括整型,浮点型,复数类型),布尔类型,字符串类型等。
const Pi = float64 = 3.14159275358979 const zero = 0.0 const ( size int64 = 1024 eof = -1 ) const a,b,c = 3,4,"foo" 常量赋值必须保证右边的值在编译期间运算的常量表达式,如果在运行期间才知道返回结果,在编译器内并不能保证,就会导致编译错误。 预定义常量 预定义了true,false和iota iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在洗衣歌const出现之前,没出现一次,其代表的数字就会自动增1. const( c1 = iota //c1==0 c2 = iota //c2==1 c3 = iota //c3==2 ) const x = iota //x==0 const y = iota //y==0
类型
Go语言内置了一下类型
- 布尔bool (不能接受其他类型的赋值,不支持自动或者强制的类型转换)
- 整形int8,byte,int16,int,uint,uintptr等(int和int32会认为是不同的类型,不能直接比较,编译器不会做强转)
- 浮点float32,float64(float32相当于C语言的float,float64相当于double)
- 复数complex64,complex128 (value = 3.2 + 12i)
- 字符串string (Go 语言仅支持UTF-8和Unicode)
- 字符rune
- 错误error
此外,还有一些复合类型
- 指针
- 数组
- 切片
- 字典
- 通道
- 结构体
- 接口
字符串遍历
以字节数组的方式遍历 package main import ( "fmt" ) func main(){ str := "hello,世界" //每个汉字在UTF-8中占3个字节 n := len(str) for i := 0; i < n; i++ { ch := str[i] fmt.Println(i, ch) } } 输出: 0 104 1 101 2 108 3 108 4 111 5 44 6 228 7 184 8 150 9 231 10 149 11 140 以Unicode字符遍历 package main import ( "fmt" ) func main(){ str := "hello,世界" for i,ch := range str { //ch的类型为rune fmt.Println(i,ch) } } 0 104 1 101 2 108 3 108 4 111 5 44 6 19990 9 30028 以unicode字符方式遍历时,每个字符的类型是rune(早期的Go语言使用int类型表示Unicode字符),而不是byte.Go语言中支持两个字符类型,一个是byte(是unit8的别名),代表UTF-8字符串的单个字节的值;另一个是rune,代表单个Unicode的字符。出于简化语言的考虑,Go语言的多数API都假设字符串为UTF-8。
相关推荐
go语言中文教程及手册. Go 编程语言是一个使得程序员更加有效率的开源项目。Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络...简洁,一句废话没有,对于初学者可以让大家快速掌握GO语言!
就事后诸葛的角度来看,Go语言的这些地方都做的还不错:拥有自动垃圾回收、一个包系统、 函数作为一等公民、词法作用域、系统调用接口、只读的UTF8字符串等。但是Go语言本身只有很少的特 性,也不太可能添加太多的...
04 Go语言实战开发一个WEB项目博客系统05 Go语言深度讲解(推荐 2018年1月更新)06 Go语言快速入门(2018年2月更新)07 Go语言协程流量统计(2018年3月更新)08 Go语言入门到实战视频教程(2018年3月更新)09 Go语言...
go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go...
Go语言结合了底层系统语言的能力以及现代语言的高级特性,旨在降低构建简单、可靠、高效软件的门槛。本书向读者提供一个专注、全面且符合语言习惯的视角。Go语言实战同时关注语言的规范和实现,涉及的内容包括语法、...
go语言小小demo一枚 go语言小小demo一枚 go语言小小demo一枚 go语言小小demo一枚
Go语言程序设计》既是一本实用的Go语言教程,又是一本权威的Go语言参考手册。书中从如何获取和安装Go语言环境,以及如何建立和运行Go程序开始,逐步介绍了Go语言的语法、特性以及一些标准库,内置数据类型、语句和...
中下载适合你系统的Go语言包,选择 .msi 安装包下载即可。 安装 Go 语言包 双击下载的安装包,按照提示进行安装。 配置环境变量 在环境变量中添加 Go 语言的路径,如 C:\Go\bin。这样,你就可以在任意目录下运行 ...
这是一本Go语言实战指南,帮你了解Go语言,按Go语言的方式思考,以及使用Go语言来编写高性能软件。 作者展示了如何编写充分利用Go语言突破性的特性和惯用法的代码,以及Go语言在其他语言之上所做的改进,并着重强调...
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易 Go 是由 Google 的一个团队与一些开源社区的 贡献者 一同开发的开源项目。 Go 编程语言是一个开源项目,它使程序员更具生产力。 Go 语言具有很...
go语言实现京东抢茅台脚本源码
简介:Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容 Go 语言: Go = C + Python ,
理解Go语言如何解决并发难以编写正确这一根本问题。 学习并发与并行的关键性区别。 深入到Go语言的内存同步原语。 利用这些模式中的原语编写可维护的并发代码。 将模式组合成为一系列的实践,使你能够编写大规模...
一、Go语言的由来 Go语言亦叫Golong语言,是由谷歌Goggle公司推出。Go语言的主要开发者有:肯.汤姆逊(Ken Thompson)、罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。这三个都是大神,稍介绍一下他们的...
上传一份Go语言语言相关的资源,文档内容为<<Go语言源码剖析>>,不是影印版本, 真实高清文字版本
go语言基础入门学习文档以及go语言并发学习的一些案例总结,我是一个两年多的Java开发工程师,从18年开始,开始接触容器化kubernetes这一块的项目,一开始是做了一个Java对接k8s启动pod,管理pod的平台。今年决定对...
Go语言是由谷歌的Rob Pike、Ken Thompson和Robert Griesemer共同设计开发的一种新型程序设计语言。2012年Go l的推出,代表着Go语言的稳定成熟,也正式宣告Go走人了主流语言的行列。《Go语言鄠动力》是Go语言程序设计...
Go语言结合了底层系统语言的能力以及现代语言的高级特性,旨在降低构建简单、可靠、高效软件的门槛。本书向读者提供一个专注、全面且符合语言习惯的视角。Go语言实战同时关注语言的规范和实现,涉及的内容包括语法、...