一、GO语言特点
-
Go将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡。
-
同时Go 语言对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机。
-
构建速度快(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒,摆脱了c++在构建上的噩梦。
-
Go 语言采用包模型的根本原因,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性。
-
内存问题(通常称为内存泄漏)长期以来一直伴随着 C++ 的开发者们,Go 语言的设计者们认为内存管理不应该是开发人员所需要考虑的问题。因此尽管 Go 语言像其它静态语言一样执行本地代码,但它依旧运行在某种意义上的虚拟机,以此来实现高效快速的垃圾回收(使用了一个简单的标记-清除算法)
(1)需求:
1. 打印hello world!
(1) go文件的后缀是go
(2) package main
表示该hello.go文件所在的包是main,在go中,每个文件都必须归属于一个包。
(3)import “fmt”
表示:引入一个包fmt
(4) func main(){
}
func是一个关键字,表示一个函数。
main是函数名,是一个主函数,即程序入口。
2. 通过go build命令对该go文件进行编译,生成.exec文件。
>cd /Users/tjm/goproject/src/gocode/project01/main/
>go build hello.go
生成一个.exec文件
3. 运行hello.exec文件
4. 通过go run可以直接运行hello.go程序(类似于执行一个脚本文件的形式,相比编译后运行速度慢些)
5. go run与go build的区别
- go build生成可执行文件,可以拷贝在没有go开发环境的机器上运行,而go run 需要go 开发环境。
- go源代码编译成可执行文件,编译器会将程序运行依赖的库文件包含在可执行文件中,文件大小会变大很多。
6. Go build编译时,指定生成的可执行文件名
> go build -o myhello.exe hello.go
(2)go语言程序开发注意事项
- Go应用程序执行入口是从main开始
- 严格区分大小写
- Go方法由一条条语句构成,每个语句后面不需要加分号(Go会在每行后自动加分号)
- Go是一行一行进行编译的,所以一行只能写一条语句
- GO语言定义的变量或者import的包如果没有使用到,代码不能编译通过(与别的语言最为不同的地方)
(3)Go语言转义字符(escape char)
-
\t : 制表符
-
\n :转行
-
\r :回车
回车不是回到下一行,而是回到这一行开头,覆盖开头的字符。
package main import "fmt" func main() { fmt.Println("小兔子乖乖\r白色的") }
-
\:一个\
-
\ ":一个 "
(4)代码风格
缩进
- shift +tab
> gofmt -w main.go
该指令将格式化后的内容重新写入文件,当程序员重新打开文件后,就会看到格式化后的文件。
正确的代码风格
package main
import "fmt"
func main(){
fmt.Println("hello world!")
}
错误的代码风格(与c++,java不同)
package main
import "fmt"
func main()
{//go语言不允许这么写
fmt.Println("hello world!")
}
二、变量
1. 示例
声明变量
基本语法:var 变量名 数据类型
package main
import "fmt"
func main(){
//声明变量
var i int
//赋值
i = 10
//使用变量
fmt.Println("i =",i)
}
2. 变量使用注意事项
(1)变量不同的声明使用方式(尤其第三种是go特有的):
package main
import "fmt"
func main(){
//golang的变量使用方式1
//第一种:指定变量类型,声明后若不赋值,使用默认值
var i int
fmt.Println("i = ",i) //int默认值为0
//第二种:根据值自行判定变量类型(类型推导)
var num = 10.10
fmt.Println("num = ",num)
//第三种:省略关键字var 注意 := 左侧的变量不能是声明过的,否则重复声明会报错
name := "jiajia" //等价于 var name string; name = "jiajia"
fmt.Println("name = ",name)
}
(2)一次性声明多个变量的方式
package main
import "fmt"
func main(){
//一次性声明多个变量方式1
var n1, n2 ,n3 int
fmt.Println("n1 = ",n1,"n2 = ",n2,"n3 =",n3)
//一次性声明多个变量方式2,使用类型推导
var n1,n2,n3 = 100,"tom",888
fmt.Println("n1 = ",n1,"n2 = ",n2,"n3 =",n3)
//一次性声明多个变量方式3
n1,n2,n3 := 100,"tom",888//等价于方式2
fmt.Println("n1 = ",n1,"n2 = ",n2,"n3 =",n3)
}
(3)声明全局变量
就是在函数外声明变量
package main
import "fmt"
//一个一个的声明全局变量
var n1 = 100
var n2 = 200
var n3 = 800
//一次性声明全局变量
var (
n4 = 400
n5 = 900
)
func main(){
fmt.Println("n1 = ",n1,"n2 = ",n2,"n3 =",n3,"n4 =",n4,"n5 = ",n5)
}