网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
var ages [10]int
ages[0] = 11
//声明数组方式二
var names = [10]int{2, 3}
//修改元素
names[5] = 22
//二维数组方式一
var list [3][5]int
list[0][0] = 12
list[0][1] = 13
list[1][1] = 13
//二维数组方式二
var list2 = [3][5]int{{1, 2}, {3, 4}}
[]( )切片(自动扩容的数组)
-------------------------------------------------------------------------
//切片(动态数组),建议用切片代替普通数组
var names2 = []int{2, 3, 5, 67, 78}
var names3 = []int{1: 20, 5: 30} //下标:元素
var names4 = [...]int{1: 20, 5: 30} //下标:元素
//二维切片(动态数组),建议用切片代替普通数组
var list3 = [][]int{{1, 2, 6, 7, 8, 9}, {3, 4}}
var list4 = [][]int{1: {1, 2, 6, 7, 8, 9}, 5: {3, 4}} //下标:元素
var list5 = [][]int{1: {1: 1, 3: 2, 6,}, 5: {3, 4}} //下标:元素
//长度
lens := len(names2)
//容量
caps := cap(names2)
//赋值不能超过当前切片范围,不然下标越界
//names2[10] = 2
//往切片中添加数据,append时,如果超出容量会自动扩容,为上一次容量*2,超过1024字节,则每次扩容1/4
ints := append(names2, 5)
//截取切片(从1到3,不包含下标3)
ints2 := names2[1:3]
fmt.Println("截取", ints2)
//拷贝切片
var cname = make([]int, 4)
var length = copy(cname, names2) //开辟独立空间,修改copy后的数据不影响原数据
[]( )字符串常用方法
---------------------------------------------------------------------
var a = "积极,你好,你真好"
var c = " 积 极,你好, 你真 好 "
var d = "===积=== 极===你好, 你真好==="
var b = "你"
var result = strings.Contains(a, b) //a包含b
var stringlist = []string{"138", "8765", "9865"}
var sresult = strings.Join(stringlist, "-")
var index = strings.Index(a, b) //b在a第一次出现的下标6的位置,中文一个文字3个index
var rstr = strings.Repeat(b, 10) //将字符串重复10次
var rep = strings.Replace(a, "你", "you", 2) //2代表只替换2次,<0 代表全部替换
var rep2 = strings.ReplaceAll(a, "你", "you")
//根据逗号截取
var sp = strings.Split(a, ",")
//去除字符串首尾指定内容
var tri = strings.Trim(c, " ")
var tris = strings.Trim(d, "=")
//去除首尾空格
strings.Fields(" ")
[]( )字符串类型转换
---------------------------------------------------------------------
str := "hello would"
//字符串转为字符切片
ss := []byte(str) //强制类型转换
//字符切片转为字符串
newstr := string(ss)
fmt.Println("字符切片", ss)
fmt.Println("切片转为字符串", newstr)
for i := 0; i < len(ss); i++ {
fmt.Printf("%c", ss[i])
}
//字符串转换
bstr := strconv.FormatBool(true)
boo, err := strconv.ParseBool("false")
inttostr := strconv.Itoa(123)
strtoint, err := strconv.Atoi("345")
strconv.ParseInt("12345", 10, 64)
strconv.ParseFloat("4.123", 64)
//其他类型转成切片
slice := make([]byte, 0, 1024)
slice = strconv.AppendBool(slice, true)
slice = strconv.AppendInt(slice, 234, 10)
fmt.Println("转成切片:", string(slice))
if err != nil {
fmt.Println("转换出错")
} else {
fmt.Println(boo)
fmt.Println(inttostr)
fmt.Println(strtoint)
}
[]( )map
-----------------------------------------------------------------
//方式一
var mymap map[int]string = map[int]string{12: "张飞", 22: "诸葛亮", 2: "刘备"}
mymap[12] = "飞飞"
fmt.Println("map", mymap)
for k, v := range mymap {
fmt.Println(k)
fmt.Println(v)
fmt.Println(mymap[k])
}
//方式二
//map的长度是自动扩容的
newmap := make(map[string]string)
newmap["1"] = "菲菲"
newmap["11"] = "看看"
fmt.Println(newmap)
//map中保存数组
strs := []string{"飞机", "火车"}
strs2 := []string{"轮船", "看看"}
mm := make(map[int][]string)
mm[0] = strs
mm[22] = strs2
fmt.Println(mm)
//根据key删除元素
delete(mm, 22)
//可以用作判断是否存在某个key 的值
value, ok := mm[888]
if ok {
fmt.Println(value)
} else {
fmt.Println("未找到数据")
}
[]( )结构体
-----------------------------------------------------------------
//结构体
type User struct {
id int
name string
age int
}
func main() {
uu := User{2, "诸葛亮", 35}
var u2 = User{id: 3, name: "刘备", age: 56}
var user User
user.name = "张飞"
user.age = 56
user.id = 1
fmt.Println(uu)
fmt.Println(u2)
fmt.Println(user)
//结构体名默认指向第一个成员地址
fmt.Printf("%p\n", &uu)
fmt.Printf("%p\n", &uu.id)
fmt.Printf("%p\n", &uu.name)
if uu == u2 {
//比较两个结构体所有成员值是否相同
}
//结构体数组
var suts1 = [2]User{
{1, "张飞", 32}, {3, "方法", 32},
}
//结构体切片
var suts2 = []User{
{1, "张飞", 32}, {3, "方法", 32},
}
//往切片中添加结构体
stu3 := append(suts2, User{3, "11", 33})
fmt.Println(suts1)
fmt.Println(suts2)
fmt.Println(stu3)
//结构体放在map中使用
m := make(map[int]User)
m2 := make(map[int][]User)
m[0] = User{1, "ff", 33}
m[1] = User{2, "统一", 2}
m2[0] = []User{{3, "gg", 2}, {4, "ww", 56}}
m3 := append(m2[0], User{6, "hj", 67})
delete(m, 0)
fmt.Println(m)
fmt.Println(m2)
fmt.Println(m3)
getstumap(m)
//数组入参
func getstumap(user map[int]User) {
//指针不能直接使用这样修改
//user[0].name = "典韦"
//先定义临时变量赋值后修改
newUser := user[0]
newUser.name = "赵云"
user[0] = newUser
fmt.Println("修改", user)
}
//切片入参
func getstumaps(user map[int][]User) {
}
[]( )指针
----------------------------------------------------------------
### []( )指针变量
var a = 39
//p获取了a的地址
var p *int = &a
fmt.Println(p)
fmt.Printf("%p\n", p)
fmt.Printf("%T\n", p)
//通过指针间接修改变量的值,指针类型存储的都是无符号16进制整型数据
*p = 55
fmt.Println(a)
fmt.Println(*p)
//开辟内存空间,返回数据类型指针,go语言也有GC
var s *int = nil
s = new(int)
*s = 66
fmt.Println(s)
fmt.Println(*s)
//指针作为函数参数
aa := 1
bb := 2
swap(&aa, &bb)
fmt.Println(aa, bb)
func swap(a *int, b *int) {
*a = 22
*b = 33
temp := *a
*a = *b
*b = temp
}
### []( )数组指针
//数组指针
var pp *[3]int
ps := [3]int{1, 2, 3}
pp = &ps
pps := &ps
//通过指针间接操作数组
fmt.Println(*pp)
fmt.Println(*pps)
//通过指针修改的2种方式
(*pps)[0] = 55
//仅限数组,切片不可这样使用
pp[0] = 34
var p1 = &ps
var p2 = &ps[0]
fmt.Printf("%T\n", *p1)
fmt.Printf("%T\n", *p2)
//存储数组指针的数组
b1 := [2]int{1, 2}
b2 := [2]int{5, 6}
var aar = [2]*[2]int{&b1, &b2}
fmt.Println(aar)
fmt.Println(*aar[0])
var e *[2]int
//创建内存空间存储e
e = new([2]int)
e[0] = 1
e[1] = 5
fmt.Println(e)
//数组指针作为参数
func add(p *[2]int) {
}
### []( )切片指针
//切片指针
a1 := 1
a2 := 2
var gets = []*int{&a1, &a2}
*(gets[0]) = 200
fmt.Println(gets)
fmt.Println(a1)
k := []int{1, 2, 3}
ks := &k
//这种写法错误,切片不可以这样用
//ks[0] = 24
//这种是可以的
(*ks)[0] = 35
//切片指针作为参数
func add2(p *[]int) {
*p = append(*p, 1, 2)
}
### []( )结构体指针
//结构体指针
var uus = &user
fmt.Printf("%T\n", uus)
fmt.Println("结构体指针", *uus)
//通过指针间接修改结构体数据
(*uus).name = "菲菲"
//指针也可直接操作
uus.name = "飞飞"
fmt.Println("结构体指针2", *uus)
//使用map存储结构体指针
//m11 :=make(map[int]*User)
//m22 :=make(map[int]*[2]User)
//m33 :=make(map[int]*[]User)
//结构体指针作为参数
func add3(us *User) {
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
}
### []( )结构体指针
//结构体指针
var uus = &user
fmt.Printf("%T\n", uus)
fmt.Println("结构体指针", *uus)
//通过指针间接修改结构体数据
(*uus).name = "菲菲"
//指针也可直接操作
uus.name = "飞飞"
fmt.Println("结构体指针2", *uus)
//使用map存储结构体指针
//m11 :=make(map[int]*User)
//m22 :=make(map[int]*[2]User)
//m33 :=make(map[int]*[]User)
//结构体指针作为参数
func add3(us *User) {
[外链图片转存中…(img-D1X8ScrW-1715815242788)]
[外链图片转存中…(img-SxophI4Q-1715815242788)]
[外链图片转存中…(img-J55S8xRC-1715815242788)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新