Go语言基础(一)数据类型、条件、函数、集合,2024年最新Golang大厂面试真题解析大全

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§

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语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事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行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值