Golang总结(1)

该教程介绍了Golang语言的特点,如高性能、高并发、简单的语法,以及字节跳动为何选择使用Golang。接着,详细讲解了变量和常量的声明、分支结构、循环(for)、数组、切片、map以及结构体的使用,包括结构体方法的绑定。还特别提到了Golang中的map非线程安全这一特性。
摘要由CSDN通过智能技术生成

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)
}
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值