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)
}
//方式一
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§
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)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
等大厂,18年进入阿里一直到现在。**
深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-6W0kpfCI-1712969918972)]
[外链图片转存中…(img-JXlAJlmr-1712969918973)]
[外链图片转存中…(img-Uf4Sgewh-1712969918973)]
[外链图片转存中…(img-iEWRGhMh-1712969918974)]
[外链图片转存中…(img-7mDBKlVj-1712969918974)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-4XmRojfD-1712969918975)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!