概述
一种静态强类型、编译型语言! (而Java是解释型语言)
前景介绍
几百万做 Java 的是不是傻子不太确定。
Rob Pike 那帮人绝不是傻子而且聪明绝顶,这很确定!
安装
官网下载,傻瓜式安装,环境变量会自动配置好,cmd输入cmd输入go version
检查是否成功!
工作空间默认C:\用户名\go
下,可以去环境变量中修改!
该目录下:
执行第一个Go
package main //程序入口包(可以打包的 类似SpringBoot)
// 导入外包
import "fmt"
//程序入口
func main(){
fmt.Println("hello world!")
}
go build 编译:
其他命令:
go run main.go //直接运行.go文件
go build -o hello //将编译的可执行文件命名为hello.exe
go install :
1. 先编译得到一个可执行文件
2. 将可执行文件copy到GOPATH/bin下(类似于moven项目install)
交叉编译
.exe文件可不能在Linux系统上运行,所以:
标识符
字母数字下划线
包管理
指针
&v
表示v变量的指针,即地址
*p
表示p指针所指向的值
而 *t
表示指向t类型数据的指针 (即 指针的类型)
func main() {
v := 10 //变量v
p := &v //获取指向变量v的指针(即变量v的地址) 指针也是一种变量
a := *p //获取指针p所指向的数据赋予变量a
fmt.Printf("type=%T value=%v \n",v,v) // type=int value=10
fmt.Printf("type=%T value=%v \n",p,p) // type=*int value=0xc0000ac058
fmt.Println(a == v) // true
}
new 初始化指针
内置函数 new(Type)
返回 *Type
类型的指针
func main() {
var p *int //同样的 这样只是声明,并不会初始化
fmt.Printf("type=%T value=%v \n",p,p) // type=*int value=<nil>
pp := new(int) // 只有等号的声明才会去初始化 从内存中拿个地址
fmt.Printf("type=%T value=%v \n",pp,pp) // type=*int value=0xc00000a0d0
}
make 初始化复合数据类型
make(t Type, size ...IntegerType)
返回一个初始化后的复合数据类型
杂记
- 方法名首字母小写,则此方法只能在同包下调用;大写则在其他包中可以调用。
- 程序从 main 包开始运行,其中的main()函数是程序的入口
- Go的局部变量也会给默认值
- Go中的null为nil
var
声明变量基本数据类型会赋默认值,复合数据类型为nil(复合数据类型可以使用make函数初始化个非nil变量)- append():可以直接初始化一个切片(能够分配内存)
- 内置排序只能排序切片,不能排序数组:
a := [...]int{1,5,6,2,3}
sort.Ints(a[:])