特点
拥有跟 C++ 的快速高性能编译
也拥有跟Python一样的大量库函数
还拥有跟Java的跨平台和垃圾回收机制
可以说是集合了很多语言的强大特点 外加自己的一些额外特点
入门
配置环境
开发环境去官网下载go语言 配置好环境变量即可
查看自己是否配置好环境变量 在cmd控制台输入go看看是否有以下输出
HelloWorld
学习一门语言肯定少不了hello world
在java中 我们需要创建一个类 然后添加main方法
class Main{
public static void main(String[] args){
System.out.Pringln("Hello World");
}
}
go创建 需要import一个fmt包 再package main 直接调用fmt的Println方法即可输出
package main
import "fmt"
func main(){
fmt.Println("Hello World")
}
语法
变量
在声明变量的时候需要使用var关键字
go语言不像java需要手动写数据类型 他能自动推导数据类型 赋给变量
var a = 1 //这里的a就为整型变量
var b = "1" //这里的b就为字符串变量
上面还有一种写法 用:=符号来代替var关键字
a := 1 //这里的a就为整型变量
b := "1" //这里的b就为字符串变量
上面得到的是一样的效果
常量
在声明常量的时候需要使用const关键字
const A = 1 //这里的a就为整型常量
const B = "1" //这里的b就为字符串常量
常量在声明定义赋值后 不能被改变
const A = 1 //这里的a就为整型常量
A = 3//这串代码会报错
逻辑处理
if else
用来进行真假判断
if 条件 {
//条件为真的时候执行
}else{
//条件为假的时候执行
}
上面的 条件 跟Java一样需要布尔值 不像c语言能0 1为真 假
for
go语言在循环中只存在 一个语法 就是for
java中存在 while for do...while等等
//死循环 只写一个for 什么都不写就是死循环
for{
}
//普通循环 定义一个变量 i 循环n次
for var i = 0;i <= n;i++{
}
//while循环 使用外部变量 循环n-i次
for i <= n{
}
//在循环中 使用break 能跳出循环
//使用continue 进入下一次循环
switch
java语言中 switch case后面必须加break 否则会全部执行
但是 go不需要
a:=2
switch a: {
case 1:
//a==1时的代码
case 2:
//a==2时的代码
case 3:
//a==3时的代码
default:
//其他情况时的代码
}
基本数据结构
数组
固定长度的一个容器 创建后 不能更改
var a [10]int
var b [10]string
在没赋值的时候 必须使用var关键字
切片
可变长度的一个容器 创建后可以改变
使用make方法来创建切片
a :=make([]int,10)
//n := make([]数据类型,长度)
//增加数据
a=append(a,1)//给a切片增加一条值1
a=append(a,2,3)//给a切片增加两条值2,3
//访问数据
fmt.Println(a[0])//使用角标获取角标对应值
fmt.Println(a[:3])//0-2位置的值 [)左闭右开
fmt.Println(a[1:3])//1-2位置值 [)左闭右开
fmt.Println(a[1:])//1-最后位置值[]左闭右闭
Map
使用键值对 来保存数据 对比数组 就是将角标改成指定的
比如说 a[0] 这是数组取值
如果有一个Map b 它的key为string 就可以使用 b[key]来访问对应值
使用make方法创建map
b := make(map[string]int)
//增加数据
b["one"] = 1
b["two"] = 2
//删除数据
b.delete("one")
go特有
range
range 一般使用在map,切片里 获取 map,切片角标和对应的值
//range arr
//range map
//在for里面使用
arr :=[]int{1,3,9}
for i,result := range arr{
fmt.Println(i +" "+result)
}
var map = make(map[string]string)
map["one"] = "one"
map["two"] = "two"
for i,result := range map {
fmt.Println(i + " " +result)
}
函数
基本格式
func methodName( x type) type
函数名称 形参 形参类型 返回值类型
跟其它语言区别很大 数据类型都在后面
指针
就是指向内存地址的变量
a := 1
fmt.Print(&a)//取出a的地址
在方法中声明
func main() {
n := 2
add(&n)
fmt.Println(n)
}
func add(n *int) { //形参是接受一个地址变量
*n += 2
}
结构体
定义多个变量的一个数据类型 后面再拓展