一、go语言特点
1. go思想
Less can be more 大道至简,小而蕴真,让事情变得复杂很容易,让事情变得简单才难,深刻的工程文化。
2. go语言的优点
- 自带gc。
- 静态编译,编译好后,扔服务器直接运行。
- 简单的思想,没有继承,多态,类等。
- 丰富的库和详细的开发文档。
- 语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。
- 简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。
- 超级简单的交叉编译,仅需更改环境变量。
3. 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 nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic 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)字符长度不限。
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 main
import "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 main
import "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 main
import (
"fmt"
)
func main() {
// %d 表示整型数字,%s 表示字符串
var stockcode=123
var 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字符串格式化符号:
| 格式 | 描述 |
|---|---|
| %v | 按值的本来值输出 |
| %+v | 在%v基础上,对结构体字段名和值进行展开 |
| %#v | 输出Go语言语法格式的值 |
| %T | 输出Go语言语法格式的类型和值 |
| %% | 输出%本体 |
| %b | 整型以二进制方式显示 |
| %o | 整型以八进制方式显示 |
| %d | 整型以十进制方式显示 |
| %x | 整型以十六进制方式显示 |
| %X | 整型以十六进制、字母大写方式显示 |
| %U | Unicode字符 |
| %f | 浮点数 |
| %p | 指针,十六进制方式显示 |
- 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。
三、总结
Go语言是一种新颖并且没有大面积普及的语言,拥有高性能、高并发;语法简单、学习曲线平缓;丰富的标准库;完善的工具链;静态链接;快速编译;跨平台;垃圾回收等特点,由于各种原因,现在也正在被各大互联网公司所使用。它能长期保持简单性、稳定性和健壮性。Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言: Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。Go 的标准库高效、简洁、正确地实现了丰富的网络协议,并巧妙地结合了协作/抢占式多任务处理模型,因此使用 Go 编写可扩展的互联网软件非常容易。