Golang总结(1)

简介: Golang总结(1)

BytedanceGolang教程笔记
1.dayOne
1.特点
高新能,高并发

语法简单,学习平缓

丰富的标准库

完善的工具链

静态链接

快速编译

跨平台

垃圾回收

2.字节为什么选择Go
python性能问题

c++不适合做在线业务

早期团队不是Java背景

性能搞

容易部署

学习成本低

内部的RPC和HTTP框架的推广

3.变量和常量
3.1变量的声明方式
隐式声明,会自动推导类型

var a = "init"


d := "helloworld"
显式声明

var b,c  int = 1,2

3.2常量
常量会根据上下文自动确定类型

const s string = "const"
const num = 10000

4.分支
tips:goland中if后面不推荐写()

if true {}
// 而不是
if (true) {}
5.循环
没有while和dowhile循环只有for,for循环也没有括号

for i := 0 :i < 100 :i++ {
fml("进行一些操作")
}
6.switch
switch中自动集成了break,在case后面

7.数组
//1,数组 var name [count]int ,并且拥有严格的类型
var courses1 [3] string
var courses2 [4]string
fmt.Printf("%T\n",courses1)
fmt.Printf("%T\n",courses2)
// []string 是一个切片,[3]string是一个三个元素的数组,Go拥有很强的类型
courses1[0] = "字节跳动"
courses1[1] = "美团"
courses1[2] = "华为"
for ,value := range courses1{
fmt.Println(value)
}
//数组的初始化
var names = [3]string {"Go","Java","c++"}
for
,value := range names{
fmt.Println(value)
}
//[...]是可变长数组
var ages = [...]string {"Go","Java"}
for _,value := range ages{
fmt.Println(value)
}

//数组之间的比较 1,类型得一样。 2元素内容和顺序也得一样
//多维数组,声明方法
var courseinfo [3][4] string
var couseinfo2 = [3][4] string {}
fmt.Println(courseinfo)
fmt.Println(couseinfo2)
8.map
// 名字 关键字 键 值
//var courseMap map[string]string

//初始化,map类型想要放置值必须要初始化

var courseMap1 = map[string]string{
"Go": "工程师",
"Java": "Java工程师",
}
//var courseMap1 = make(map[string]string,3)

fmt.Println(courseMap1["Java"])

//防值
courseMap1["hello"] = "helloworld"
fmt.Println(courseMap1)
//虽然是遍历,但是还是无序的
for key, value := range courseMap1 {
fmt.Println(key, value)
}
for key := range courseMap1 {
fmt.Println(key, courseMap1[key])
}

//判断是否
if d, ok := courseMap1["Java"]; !ok {
fmt.Println("not in")
} else {
fmt.Println("find " + d)
}

//删除,而且删除了不存在的元素不会报错
delete(courseMap1,"Java")
fmt.Println(courseMap1)


//tips:map不是线程安全的
9.slice
//切片-数组
var courses []string
fmt.Printf("%T\n",courses)

//append方法追加值,但是需要做接收
courses = append(courses,"Go")
fmt.Println(courses)
// 切片初始化
//1
allCourse := [3]string {"go","sm","leetcode"}
courseSlice := allCourse[0:len(allCourse)]// 左闭右开
fmt.Println(courseSlice)

//2
//courseSlice := []string {"go","sm","leetcode"}

//3,make函数,先把空间准备好,设置大小很麻烦
allCourse2 := make([]string,3)
allCourse2[0] = "c"
fmt.Println(allCourse2)

//可以在数组上创建切片,也可以在切片上面创建切片



//访问切片的元素
//fmt.Println(courseSlice[start:end]) 左闭右开

//多种元素添加,类似于js中的方法
courseSlice2 := []string{"mysql","jdbc"}
courseSlice3 := []string{"mysql","zhiyin"}
courseSlice2 = append(courseSlice2,courseSlice3...)
fmt.Println(courseSlice2)

//删除元素,没有直接的方法,需要重新生成slice

//复制slice
//courseSliceCopy := courseSlice
//fmt.Println(courseSliceCopy)

//利用copy的时候需要先拷贝长度
var courseSliceCopy []string =make([]string,len(courseSlice))
copy(courseSliceCopy,courseSlice)
fmt.Println(courseSliceCopy)
10.struct
package main

import "fmt"

// 结构体的定义
type Person struct {
name string
age int
address string
height float32
}
func main() {
//如何初始化结构体
p1 := Person{
name: "正字通",
age: 18,
address: "陕西省汉中市",
height: 189.0,
}
p2 := Person{
name: "肖哈哈",
age: 18,
address: "陕西省汉中市",
height: 189.0,
}
fmt.Println(p1)

//加入一个切片中
var persons []Person
persons = append(persons,p1)
persons = append(persons,p2)
fmt.Println(persons)

//可以这样赋值
p2.age = 20
fmt.Println(p2.name)
//匿名结构体
address := struct {
province string
city string
address string
}{
"陕西省",
"咸阳市",
"武功县",
}
fmt.Println(address.city)
}

11.结构体方法
package main

import "fmt"

type user struct {
username string
password string
}
// 为*结构体绑定方法 方法名 参数 返回值
func (u user) ChangePassword (password string) bool {
return u.password == password
}
func (u
user) resetPassword (password string) {
u.password = password
}
func main() {
u := user{
username: "hello world",
password: "123456",
}
u.resetPassword("hahahah")
fmt.Println(u)
}

相关文章
|
缓存 并行计算 Go
104.【GoLang基础】(四)
104.【GoLang基础】
62 0
|
大数据 编译器 Go
104.【GoLang基础】(三)
104.【GoLang基础】
91 0
|
2月前
|
Go
安装golang
golang官网——
36 1
|
6月前
|
Go
|
6月前
|
IDE Java Go
Golang
【6月更文挑战第26天】
56 1
|
6月前
|
Go Windows
golang hello 安装环境异常【已解决】
golang hello 安装环境异常【已解决】
39 1
|
6月前
|
存储 Java Go
|
6月前
|
存储 Java Go
|
测试技术 Go