一、Go语言安装
一)下载地址
官网:go官网
镜像:go镜像
在Go语言中,GoPath在同一系统上的同一用户,一般规定只有一个,无论这个用户创建多少个go项目,都只有一个GoPath,并且这些项目都放在GoPath下的src目录下。
安装配置完成后在GoPath下创建三个目录:
-
1.bin (用于存放项目编译后的可执行文件)
-
2.pkg (用于存放类库文件,比如.a结尾的包模块)
-
3.src (用于存放项目代码源文件)
二)开发环境的搭建
1.Go SDK
GO中文社区SDK下载地址:https://studygolang.com/dl
我这里使用的是go 1.18.7,因为1.13后才完全支持Module功能。windows图形安装下载这个
https://studygolang.com/dl/golang/go1.14.6.windows-amd64.msi
2.Go的集成软件开发环境
我这里使用的是GoLand(GoLand是JetBrains公司开发的一款集成开发环境(IDE),是专门给Go语言开发者使用的。和IDEA是一家公司,并且大部分IDEA可以用的插件GoLand也可以用的)
二、Go语言基础
一)Go语言的结构模板
//主程序必须是写成main包名
package main
//导入别的类库
import "fmt"
//全局常量定义
const num = 10
//全局变量定义
var name string = "米尔大哥"
//类型定义
type P struct {
}
//初始化函数
func init() {
}
//main函数:程序入口
func main() {
fmt.Printf("Hello World!!!");
}
二)Go语言基本数据类型
1.布尔型:关键字【bool】: true false
2.有符号整形:头一位是代表正负
int 默认整形 4或8字节 32位或64位
int8 1字节 8位
int16 2字节 16位
int32 4字节 32位
in64 8字节 64位
【int是32还是64位取决于操作系统的位数,现在电脑一般都是64位的了,所以一般都是64位】
3.无符号整形
uint 4或8字节 32位或64位
uint8 1字节 8位
uint16 2字节 16位
uint32 4字节 32位
uint64 8字节 64位
4.浮点型
注:go语言没有float类型,只有float32和float64。
float32 32位浮点数
float64 64位浮点数
5.字符串
string
6. byte 等同uint8,只是类似于一个别名的东西
rune 等同int32 只是一个别名,强调表示编码概念对应的数字
三)Go语言引用数据类型
指针 Pointer
数组 Array[]
结构体 struct
进程管道: channel
函数 func
切片 slice
接口 interface
哈希 map
四)Go语言的变量创建
package main
import(
//包含print函数
"fmt"
)
var name string = "米尔大哥"//全局变量
func main() {//函数体内创建的变量为成员变量(局部变量)
//var 变量名 变量类型 = 变量值
var name string = "米尔大哥"
//方法内部可以直接使用 【 变量名 := 变量值 】 赋值,方法外不可以
name2:="xiao_hong"
fmt.Println("name = ",name)
fmt.Println("name2 = ",name2)
}
五)Go语言的常量
go中的常量是指在编译期间就能确定的量(数据),这一点和别的语言有区别,例如java中的常量被赋值一次后就不能修改。
package main
import(
//包含print函数
"fmt"
)
func main() {
//const 常量名 常量类型 = 常量值 显示推断类型
const name string = "米尔大哥"
//隐式推断类型
const name2 ="豆豆"
fmt.Println("name = ",name)
fmt.Println("name2 = ",name2)
}
六)Go语言的赋值
Go方法或函数内的赋值符号可以用 := ,也可以用 =,方法外只能用 = 。同时,Go支持多变量返回
package main
import(
//包含print函数
"fmt"
)
//方法外只能用 = 赋值
var my_name string = "my_name"
var my_name2 = "my_name2"
//my_name3:="my_name3" 不在方法内,错误
func main() {
name := "Golang"
//多变量同时赋值
var name1,name2 = "米尔大哥","豆豆"
fmt.Println("name = ",name)
fmt.Println("name1 = ",name1)
fmt.Println("name2 = ",name2)
}
七)Go语言丢弃赋值
在Go语言中,变量赋值后必须有方法或者函数去接收,否则编译不通过,这是我们可以用匿名符号_来丢弃赋值
package main
import(
//包含print函数
"fmt"
)
func main() {
//丢弃赋值 把 1和2丢弃 只取3
//在必须一次取两个以上的值的场景下,又不想要其中一个值的时候使用,比如从map中取key,value
var _,_,num = 1,2,3
fmt.Println("num = ",num)
}
八)Go语言的访问权限
在Go语言中,访问权限的默认规范是:某种类型(包括变量,结构体,函数,类型等)的名称定义首字母大写就是在其它包可以访问,首字母非大写,就是只能在自己的程序中访问。
package main
import "fmt"
func main() {
//这里的P是大写
//所有调用别的包下的函数,都是首字母大写
fmt.Printf("aa")
}
//这里的Person的首字母P也是表示外部程序导入该包后可以使用此Person类
type Person struct{
}
//这里的D同上
var Data string = "米尔大哥"
九)Go语言的选择结构
1.if else
package main
import (
"fmt"
)
func main() {
/*
if else分支结构语法格式如下:
if 条件判断 {
//代码块
} else if 条件判断{
//代码块2
} else {
//代码块3
}
*/
var num int
fmt.Printf("请输入数字")
fmt.Scan(&num)
if num > 10 {
fmt.Println("您输入的数字大于10")
} else if num == 10{
fmt.Println("您输入的数字等于10")
} else {
fmt.Println("您输入的数字小于10")
}
}
2.switch
package main
import (
"fmt"
)
func main() {
var a = "米尔大哥"
switch a {
case "米尔大哥":
fmt.Println("Hello!",a)
case "豆豆":
fmt.Println("Hello!",a)
default:
fmt.Println("No!")
}
}
十)Go语言的循环结构
1.for循环
package main
import (
"fmt"
)
func main() {
i := 0
//省略另外两项,相当于java中的while
for i < 3 {
i++
}
//break用法相同
for i == 3 {
fmt.Println(i)
break
}
//return
for i := 1; i < 10; i++ {
if i > 5 {
return
}
fmt.Println(i)
}
}
2.range循环
package main
import "fmt"
func main() {
var data [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}
for i, num := range data {//i 下标 num :值
fmt.Println(i,num)
}
}
十一)Go语言的数组
1.一维数组
package main
import "fmt"
// var 数组名 [数组长度]数组类型 = [数组长度]数组类型{元素1,元素2...}
//全局
var my_arr [6]int
var my_arr_1 [3]int = [3]int{1,2,3}
func main() {
//方法内:
this_arr := [2]int{1, 2}
fmt.Println(my_arr)
fmt.Println(my_arr_1)
fmt.Println(this_arr)
}
2.二维数组
package main
import "fmt"
//全局
var my_arr [4][6]int
var my_arr_1 [2][3]int = [...][3]int{{1, 2, 3}, {4, 5, 6}}
func main() {
//方法内:
this_arr := [2][3]int{{1, 2, 3}, {8, 8, 8}}
// 第 2 纬度不能用 "..."。
this_arr2 := [...][2]int{{1, 1}, {2, 2}, {3, 3}}
fmt.Println(my_arr)
fmt.Println(my_arr_1)
fmt.Println(this_arr)
fmt.Println(this_arr2)
}
十二)Go语言的指针
Go中有指针的概念指针简单的说就是存储一个【变量地址】的【变量】。
Go中使用指针的方法:
//*+变量类型 = 对应变量类型的指针类型,&+变量名 = 获取变量引用地址
var 指针变量名 *指针变量类型 = &变量名
例如:
var my_point *int = &num
//通过&+指针变量 = 修改原来的变量真实值
&指针变量名 = 修改的变量值
例如:
&my_point = 100;
示例:
package main
import "fmt"
func main() {
// 声明实际变量
var name string="米尔大哥"
// 声明指针变量
var name_point *string
// 指针变量的存储地址
name_point = &name
//直接访问变量地址
fmt.Println("name 变量的地址是:", &name )//name 变量的地址是: 0x10ae40f0
// 指针变量的存储地址
fmt.Println("name_point变量储存的指针地址:", name_point )// name_point变量储存的指针地址: 0x10ae40f0
// 使用指针访问值
fmt.Println("*name_point 变量的值:", *name_point )// *name_point 变量的值: 米尔大哥
}