go环境安装
1、安装
go官网:Downloads - The Go Programming Language (google.cn)
go中文网:Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)
这里我是amd64位win10系统,所以我下载这个
下载完成之后安装到自己喜欢的目录就好。我选择的是D:\Environment\go
安装完成之后可以启动cmd检查安装是否成功,cmd界面输入go version
之后会显示当前安装的go语言版本
2、配置环境变量
首先,在自己喜欢的地方创建一个目录goworks(这个目录用来存放以后我们创建的go项目)。我的是D:\Environment\GoWorks。这个目录下创建三个文件夹(当然也可以不用创建,go设置了一个默认的存放位置在c盘)
需要配置一个GOROOT(用来指定go的安装位置)和一个GOPATH(用来指定go项目的存放地址)
在系统变量中新建GOROOT和GOPATH,在用户变量中找到GOPATH并修改为我们指定的目录
最后在cmd中输入go env
查看设置是否成功
使用开发工具GoLand
hello,world!
创建项目
用goland创建一个go的工程项目,选择路径为gopath的路径,然后在工程根目录中创建一个hello.go的文件
创建好之后,修改包名为main,一个go项目只有一个main包且只有一个main方法
package main
import "fmt"
func main() {
fmt.Println("hello,world")
}
cmd命令运行
进入hello.go所在的路径打开cmd,输入go run hello.go
,cmd显示helloworld
goland运行
点击运行按钮
控制台正确显示helloworld就可以
如果报错,可能是模式的问题
打开cmd修改环境,go env -w GO111MODULE=off,再次输入go env查看第一行是否显示为off。然后再次运行。
基础语法
注释
单行注释
// 这是一个单行注释
多行注释
/*
这是一个多行注释
*/
变量
使用var来声明一个变量,后接变量名和变量类型
var name string = "123"
同时声明多个变量用一个var加上小括号,括号里直接定义变量
var (
name string
address string
age int
)
//string默认值为空
//int默认值为0
/*
整型默认为0,浮点型默认为0.0
字符串默认为空
布尔类型默认为false
切片 函数 指针变量默认为null
*/
同时输出多个变量可以使用逗号直接隔开
fmt.Println(name, address, age)
go的变量命名也遵循驼峰命名规则
语法糖省略显示定义变量类型和var关键字(短变量定义)
name := "123"
age := 18
//这是编译器自动推到变量类型
- 短变量定义需要在定义的时候显示的初始化
- 不能指定数据类型
- 只用用在函数内部
格式化输出
fmt.Printf("%T,%T", age, name)
//格式化输出,%T的意思是输出变量的类型
fmt.Printf("%p", &age)//输出变量的内存地址
变量交换
go语言可以更简便的实现两个变量值之间的交换
a := 100
b := 200
a, b = b, a//go语言自动实现两个变量之间的数值交换
fmt.Println(a, b)
匿名变量
匿名变量使用下划线_来表示,下划线被称为空白标识符,任何类型都可以赋值给他,任何赋值给他的变脸值都会被丢弃。匿名变量不占用空间,不分配内存
全局变量和局部变量
全局变量定义之后,局部变量可以在定义一次同名的变量,但在函数内使用变量时会优先使用局部变量
常量
使用const关键字定义常量。常量名一般使用大写表示,并且常量定义时可以省略数据类型(隐式定义)。
多常量定义
const a, b, c = 3.1415926, false, "12"
iota(常量计数器)
iota是go语言中比较特殊的。他是用来计算在枚举类型定义中常量定义了多少个,iota只需要被定义一次,然后每当常量被定义的时候,iota会自增1。在新一组常量的定义中,iota又会从0开始
const(
a = iota
b
c
d
)
数据类型
布尔型
默认为false,格式化输出打印类型使用%T,打印布尔类型的值%t
浮点型
默认保留6位小数,数据类型为float64,其中64指定了使用多少位来存储数据,位数越大,能够存储数据的范围越大,丢失精度的情况下四舍五入
数据类型转换
go不存在隐式数据类型转换,所有类型转换都必须显示声明。存在转换精度丢失
位运算符
运算符 | 描述 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或,不同为1,相同为0 |
&^ | 位清空,a&^b,对b的每一位来说,如果是0,取a对应位置上的数值,如果为1则取0 |
<< | 左移,a<<b表示为a乘2的b次方。实际为a的二进制数整体左移b位,高位溢出则丢弃,低位补0 |
>> | 右移,同上除以2的b次方 |
使用键盘控制输入和输出
var a int
var b float64
//fmt.Scan(&a, &b) 普通的输入控制,只有输入了对应数量的值才会结束
//fmt.Scanf()格式化输入
fmt.Scanln(&a, &b) //输入,并且不管是否有值,只要回车就会结束
fmt.Println("a:", a)
fmt.Println("b:", b)