一、Go代码运行方式
选择Go项目模版,项目路径自选,不要带中文字符。
环境变量填入GOPROXY=https://goproxy.cn,direct,使用国内七牛云的Go代理



go run .\main.go

二、注释
// 这是单行注释
/*
这是多行注释
能注释多行信息
*/
三、变量
变量定义
新建1.变量定义.go文件,输入如下内容:
package main
import "fmt"
func main() {
// 声明变量
var name string
// 赋值
name = "小超"
// 输出变量
fmt.Println(name)
}
输出
小超

Go语言变量光定义不使用,会报错。定义变量一定要使用。

变量声明三种方式:
1.指定变量类型
// 声明
var name string
// 初始化
name = "小超"
fmt.Println(name)
输出
小超
如果没有初始化,则变量默认为零值。
// 声明,不初始化
var name string
fmt.Println(name)
var num int
fmt.Println(num)
var flag bool
fmt.Println(flag)
输出
// 输出为空字符串
0
false
0
false
2.根据值自行判定变量类型
// 声明并赋值
var flag = true
fmt.Println(flag)
输出
true
3.短变量声明:=
package main
import "fmt"
// 全局变量
var title = "Go语言"
func main() {
// 声明并赋值
name := "小超"
fmt.Println(name)
/*
name := "小超"
等同于
var name string
name = "小超"
*/
}
输出
小超
如果变量已经使用 var 声明过了,再使用:=声明变量,会产生编译错误。
// 首次声明
var testStr string
// 再次声明
testStr := "测试" // 此时会出现编译错误,因为 testStr 变量已在上边声明,无需重复声明
全局变量与局部变量
局部变量:定义在函数体内的变量,此类变量定义后必须使用。
全局变量:定义在外部的变量,允许只定义不使用。
package main
import "fmt"
// 全局变量
var title = "Go语言"
func main() {
// 局部变量
var name string
name = "小超"
fmt.Println(name)
}
全局变量中,不允许使用
:= 声明变量,会报错。一定要用 var 关键字声明变量。多变量定义
Go语言支持同时定义多个同类型变量
package main
import "fmt"
func main() {
var num1, num2 int
num1, num2= 1, 2
fmt.Println(num1, num2)
// 或
var num1, num2 int = 1, 2
fmt.Println(num1, num2)
// 或
num1, num2 := 1, 2
fmt.Println(num1, num2)
}
一般定义多个全局变量会这样写
package main
import "fmt"
var (
name string = "小超"
age int = 18
)
func main() {
// 略...
}
五、常量
声明变量时就要赋初始值。
赋值后,不能被修改。
const version string = "1.0.0"
fmt.Println(version)
常量需要被跨包访问,变量首字母需要大写。
// about/about.go
package about
const Version = "0.1.0"
const date = "20260225"
// main.go
package main
import (
"fmt"
"go_study/about"
)
func main() {
fmt.Println(about.Version) // 可以找到
fmt.Println(about.date) // 出现报错,找不到about包下的date常量
}
六、输出
1.自带换行符输出
fmt.Println("Hello")
// 一次输出多个值,以空格分隔
fmt.Println("Hello", "World")
输出
Hello
Hello World
Hello World
2.格式化输出
fmt.Printf("%s 语言是世界上最好的语言!", "Go")
输出
Go 语言是世界上最好的语言!
占位符
// 字符串
fmt.Printf("学习%s\n", "Go语言")
// 整数
fmt.Printf("人数为%d\n", 3)
// 浮点数
fmt.Printf("%f\n", 3.1415926)
// 保留两位有效小数
fmt.Printf("%.2f\n", 3.1415926)
输出
学习Go语言
人数为3
3.1415926
3.14
人数为3
3.1415926
3.14
特殊占位符
// 输出值类型
fmt.Printf("%T %T\n", 3.1415926, 5)
// 任意输出
fmt.Printf("%v\n", "你好")
fmt.Printf("%v\n", 123)
fmt.Printf("%v\n", 3.14)
// 美化输出空字符串
fmt.Printf("%v\n", "")
fmt.Printf("%v#\n", "")
输出
float64 int
你好
123
3.14
// 实际这里输出空字符串,看不出来
“” // 这把空字符串换一种方式打印出来
你好
123
3.14
// 实际这里输出空字符串,看不出来
“” // 这把空字符串换一种方式打印出来
3.格式化内容赋值给变量
title := fmt.Sprintf("%v", "大家好")
fmt.Println(title)
输出
大家好
七、输入
package main
import "fmt"
func main() {
// 声明变量
// 没有初始化,默认为零值
var name string
var age int
// 输入名字
fmt.Print("请输入名字:")
nameVal, nameErr := fmt.Scan(&name) // fmt.Scan()函数会返回两个值,成功扫描的项数与错误信息
fmt.Println(name, nameVal, nameErr) // 当没有错误时,nameErr输出<nil>,即空
// 输入年龄
fmt.Print("请输入年龄:")
ageVal, ageErr := fmt.Scan(&age)
fmt.Println(age, ageVal, ageErr) // 当检测到输入类型不正确时,ageErr输出错误信息
}
正常输入
请输入名字:小超
小超 1 <nil>
请输入年龄:18
18 1 <nil>
小超 1 <nil>
请输入年龄:18
18 1 <nil>
错误输入
请输入名字:小超
小超 1 <nil>
请输入年龄:abc
0 0 expected integer
小超 1 <nil>
请输入年龄:abc
0 0 expected integer
七、基本数据类型
1.整数类型
Go整数类型有点多,具体有以下这几种
// 无符号随系统位数变化(32位或64位)
var num0 uint = 2
// 无符号8位
var num1 uint8 = 2
// 无符号16位
var num2 uint16 = 2
// 无符号32位
var num3 uint32 = 2
// 无符号64位
var num4 uint64 = 2
// 有符号随系统位数变化(32位或64位)
var num5 int = 2
// 有符号8位
var num6 int8 = 2
// 有符号16位
var num7 int16 = 2
// 有符号32位
var num8 int32 = 2
// 有符号64位
var num9 int64 = 2
需要注意以下几点:
- 类型名前边带u是无符号(unsigned),只能正整数
- 类型名后边数字是2进制的位数
- uint8等同于byte,都是一个字节(8bit)
- uint与int类型大小基于所用平台的位数
例:如表
uint8即8个2进制位,只能存正整数,范围从0到,即0到255
int8也是8个2进制位,可以存储正/负整数,需要用1位存储符号,实际可用只有7位,因此范围从到,即-128到127
| 第8位 | 第7位 | 第6位 | 第5位 | 第4位 | 第3位 | 第2位 | 第1位 | |
| uint8 | 数值 | 数值 | 数值 | 数值 | 数值 | 数值 | 数值 | 数值 |
| int8 | 符号 | 数值 | 数值 | 数值 | 数值 | 数值 | 数值 | 数值 |
2.浮点类型
// 32位
float32
// 64位
float64
float32范围从到
3.复数
4.布尔类型
5.字符串类型
参考
fengfengzhidao.com
https://www.fengfengzhidao.com/special/1/1
【8小时入门go语言开发|2023重制版】 https://www.bilibili.com/video/BV1zu4y187Wb/?p=1/1