1 包的使用
-新建一个文件夹
-内部有很多go文件
-在每个go文件的第一行,都要声明包名,并且包名必须一致
-在一个文件夹(同级)下只能有一个包
-在同一个包下,变量和函数都是共享的(一个包相当于一个go文件)
-在一个包下,不能重复定义变量和函数
-除了main包,其他都是用来被导入使用的
-无论是函数,还是变量,大写字母开头表示导出,可以在其他包使用
-尽量包名就是文件夹名
-1.11后才支持go moduls模式,现在都用
-如果使用go path开发,所有项目的代码,必须放在 go path路径下的 src文件夹下,否则找不到,包括包,包括下载的第三方包---》弃用了
-使用go mod以后,现在推荐的
-代码不需要放在go path路径下的 src文件夹下了,放在任何路径下都可以
-项目路径下必须要有个go.mod
-go mod init
-可以移动目录
-go mod init 项目名
-在项目路径下生成 go.mod,自动生成,不要去动
-内容:
module 项目名
go 1.17
-如果有第三方包,需要再执行一下
-go mod tidy
2 if-else语句
package main
import "fmt"
func main() {
number := 55
if number >= 90 && number <= 100 {
fmt.Println("优秀")
} else if number >= 60 && number <= 90 {
fmt.Println("良好")
} else {
fmt.Println("不及格")
}
}
3 循环
-基于迭代的循环
-基于索引的循环
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
var i2 = 0
for ; i2 < 10; i2++ {
fmt.Println(i2)
}
for i3 := 0; i3 < 10; {
fmt.Println(i3)
i3++
}
i4 := 0
for ; i4 < 10; {
fmt.Println(i4)
i4++
}
for i4 < 10 {
fmt.Println(i4)
}
var a = [3]int{1, 25, 34}
for i5, value := range a {
fmt.Println(i5)
fmt.Println(value)
}
var a6 = [3]int{1, 25, 34}
for i6 := 0; i6 < len(a6); i6++ {
fmt.Println(i6)
fmt.Println(a6[i6])
}
}
4 switch语句
package main
import "fmt"
func main() {
name := "cx"
switch name {
case "cx":
fmt.Println("11")
case "lqz":
fmt.Println("12")
}
name2 := "cx"
switch {
case name2 == "cx":
fmt.Println("21")
case name2 == "aa":
fmt.Println("22")
}
name3 := "cx"
switch name3 {
case "cx", "cx2":
fmt.Println("311")
case "lqz", "lqz2":
fmt.Println("312")
}
name32 := 10
switch {
case name32 == 11 || name32 == 1:
fmt.Println("321")
case name32 > 1 && name32 < 3:
fmt.Println("322")
case name32 == 1, name32 == 2, name32 == 10:
fmt.Println("333")
}
name4 := "cx"
switch name4 {
case "cx2":
fmt.Println("cx")
case "lqz2":
fmt.Println("lqz")
default:
fmt.Println("没匹配上")
}
name5 := "cx"
switch name5 {
case "cx":
fmt.Println("cx")
fallthrough
case "lqz":
fmt.Println("lqz")
default:
fmt.Println("没匹配上")
}
}
5 数组
package main
import "fmt"
func main() {
var a [3]int = [3]int{4, 5, 6}
fmt.Println(a)
a[0] = 99
fmt.Println(a)
fmt.Println(a[0])
var a3 = [3]int{4}
fmt.Println(a3)
a4 := [3]int{1, 2, 3}
fmt.Println(a4)
a5 := [30]int{28: 1}
fmt.Println(a5)
var a6 [3]int
fmt.Println(a6)
var a7 = [...]int{3, 4, 5}
fmt.Println(a7)
var a8 = [...]int{50: 99}
fmt.Println(a8)
fmt.Printf("%T", a8)
b := [3]int{1, 2, 3}
fmt.Println(len(b))
for i := len(b) - 1; i >= 0; i-- {
fmt.Println(a[i])
}
for i := 0; i < len(b); i++ {
fmt.Println(b[i])
}
for i := len(b) - 1; i>=0; i-- {
fmt.Println(b[i])
}
for i := range b {
fmt.Println(b[i])
}
for _, value := range b {
fmt.Println(value)
}
var b2 [3][4]int = [3][4]int{{3, 3, 3, 3}, {4, 4, 4}, {5}}
fmt.Println(b2)
for _, value := range b2 {
for _, value2 := range value {
fmt.Println(value2)
}
}
}
6 切片
package main
import "fmt"
func main() {
a1 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var s []int
s = a1[:]
fmt.Println(a1, s)
fmt.Printf("a的类型是%T,值是%v", a1, a1)
fmt.Println()
fmt.Printf("s的类型是%T,值是%v", s, s)
fmt.Println()
fmt.Println(s[0])
s[1] = 999
fmt.Println(s)
a3 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var s3 []int = a3[:]
s3[0] = 999
fmt.Println("s3:", s3)
fmt.Println("a3:", a3)
a4 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var s4 = a4[:]
s4[0] = 9999
fmt.Println("s4:", s4)
fmt.Println("a4:", a4)
a5 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var s5 = a5[0:3]
fmt.Println(s5)
fmt.Println(len(s5))
fmt.Println(cap(s5))
a6 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
s6 := a6[2:9]
fmt.Println(s6)
fmt.Println(len(s6))
fmt.Println(cap(s6))
var s7 []int = make([]int, 3, 4)
fmt.Println(len(s7))
fmt.Println(cap(s7))
var ss = []int{2, 3, 4}
fmt.Println(len(ss))
fmt.Println(cap(ss))
var s8 = make([]int, 3, 4)
fmt.Println(s8)
fmt.Println(len(s8))
fmt.Println(cap(s8))
s8 = append(s8, 99)
fmt.Println(s8)
fmt.Println(len(s8))
fmt.Println(cap(s8))
s8 = append(s8, 88)
fmt.Println(s8)
fmt.Println(len(s8))
fmt.Println(cap(s8))
a9 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
s9 := a9[2:9]
fmt.Println(s9)
s9[0] = 666
fmt.Println(s9)
fmt.Println(a9)
a9[8] = 999
fmt.Println(a9)
fmt.Println(s9)
s9 = append(s9, 93)
fmt.Println(s9)
fmt.Println(a9)
fmt.Println(len(s9))
fmt.Println(cap(s9))
s9 = append(s9, 94)
fmt.Println(s9)
fmt.Println(len(s9))
fmt.Println(cap(s9))
s9[0] = 10000
fmt.Println(s9)
fmt.Println(a9)
var a10 = [3]int{4, 5, 6}
test1(a10)
fmt.Println(a10)
var s10 = a10[:]
test2(s10)
fmt.Println(s10)
var s11 = [][]int{{1}, {2, 2}, {3, 3, 3}}
fmt.Println(s11)
fmt.Println(len(s11))
fmt.Println(cap(s11))
fmt.Println(len(s11[0]))
fmt.Println(cap(s11[0]))
fmt.Println(len(s11[1]))
fmt.Println(cap(s11[1]))
var s112 = make([][]int, 3, 4)
fmt.Println("s112[0]:", s112[0])
s112[0] = make([]int, 5, 6)
s112[0][0] = 99
fmt.Println(s112[0])
var s113 = [][]int{{1}, {2, 2}, {3, 3, 3}}
for i := 0; i < len(s113); i++ {
for i2 := 0; i2 < len(s113[i]); i2++ {
fmt.Println(s113[i][i2])
}
}
for _, v := range s113 {
for _, v2 := range v {
fmt.Println(v2)
}
}
var a12 = [10000]int{3, 4, 5}
fmt.Println(a12)
s12 := a12[:3]
fmt.Println(s12)
s121 := make([]int, 3, 3)
fmt.Println(s121)
copy(s121, s12)
fmt.Println(s121)
s1221 := make([]int, 5, 5)
copy(s1221, s12)
fmt.Println(s1221)
s1222 := make([]int, 2, 2)
copy(s1222, s12)
fmt.Println(s1222)
}
func test1(a [3]int) {
a[0] = 999
fmt.Println("test1:", a)
}
func test2(a []int) {
a[0] = 999
fmt.Println("test2:", a)
}
7 可变函数参数
package main
import "fmt"
func main() {
test3(2, 3, 4, 5)
test4("aa", "bb", "cc")
a := [3]int{3, 4, 5}
fmt.Println(1, 2, "aa", a)
s := []int{1, 2, 3}
test3(s...)
}
func test3(a ...int) {
fmt.Println(a)
fmt.Println()
fmt.Printf("类型:%T", a)
}
func test4(a ...string) {
fmt.Println(a)
fmt.Println()
fmt.Printf("类型:%T", a)
fmt.Println("第一个参数:", a[0])
}
8 map
map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值(Python的字典类型)
value值可以任意,但是go中value值必须都一致
key值只能用数字,字符串,布尔,key值也固定
package main
import "fmt"
func main() {
var m map[string]int
fmt.Println(m)
if m == nil {
fmt.Println("map没有初始化")
}
var m2 = make(map[string]int)
fmt.Println(m)
if m2 == nil {
fmt.Println("m2没有初始化")
} else {
fmt.Println("m2已经初始化了")
}
var a1 float32
var a2 string
var a3 bool
var a4 [4]string
fmt.Println(a1, a2, a3, a4)
var ss []int
fmt.Println(ss)
if ss == nil {
fmt.Println("空的")
}
var s = make([][]int, 3, 3)
if s[0] == nil {
fmt.Println("没有初始化")
}
var s1 []int
fmt.Println(s1)
if s1 == nil {
fmt.Println("没有初始化")
}
s2 := make([]int, 0, 4)
fmt.Println(s2)
if s2 == nil {
fmt.Println("没有初始化")
}
var m21 map[string]int = map[string]int{"name": 12, "age": 19}
var m22 = map[string]int{"name": 12, "age": 19}
m23 := map[string]int{"name": 12, "age": 19}
m24 := map[string]int{"name": 12, "age": 19}
fmt.Println(m21, m22, m23, m24)
m3 := map[string]int{"name": 12, "age": 19}
fmt.Println(m3["age"])
m3["age"] = 99
m3["sex"] = 1
fmt.Println(m3)
fmt.Println(m3["hobby"])
_, ok := m3["hobby"]
fmt.Println(ok)
m3["hobby"] = 66
_, ok1 := m3["hobby"]
fmt.Println(ok1)
m4 := map[string]int{"name": 12, "age": 19}
delete(m4, "name")
delete(m4, "hobby")
fmt.Println(m4)
m5 := map[string]int{"name": 12, "age": 19}
m5["xx"] = 12
m5["xx1"] = 12
m5["xx2"] = 12
m5["xx3"] = 12
fmt.Println(len(m5))
m6 := map[string]int{"name": 12, "age": 19}
fmt.Println(m6)
test5(m6)
fmt.Println(m6)
a9 := [3]int{4, 5, 6}
a10:=[3]int{4,6,6}
fmt.Println(a9 == a10)
}
func test5(m map[string]int) {
m["age"] = 99
fmt.Println(m)
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)