第六届字节跳动青训营第一课 | 青训营

140 阅读4分钟

在本周,我们跟随王克纯老师学习了go语言基础语法的相关知识,这是一门全新的语言,虽然是静态语言,但给人的感觉是动态语言,既提高了开发效率,又保证了系统的性能。学习了第一课之后也有了一些心得体会:Golang的语法与Python很相似,同时吸收了C语言和JavaScript的语法,并对Java的一些思想做了借鉴,例如接口,但是在Golang中没有对象这个概念,取而代之的是结构体。 与此同时,在学习课程的过程中还体会到了go语言的优势

  1. Golong是编译型语言,开发效率比C高,而且速度比Python快,可以说是一门不可多得的优质编程语言,我想这也是字节跳动研发工程师们热衷go语言进行开发的一大主要原因。
  2. 部署十分简单,大大减少了成本。可想而知,诸如抖音这样日播放量上百亿的视频平台,后端的设计成本是无比巨大的,go语言的使用能够极大的减少部署难度,大大减小成本。

除此之外,Golong还有许多与众不同的特性

  1. 如果只声明不使用则会编译不通过,除非命名为_。
  2. 如果项目依赖必须引用则需要取名为_。
  3. 大括号必须是右上角-左下角格式,不能是上下格式,否则编译不通过。
  4. Golang不论什么数据类型的传递都是值传递,如果想引用传递则需要使用指针。
  5. Golang简化了指针的使用,例如user是一个结构体指针,*(user).name与user.name是一个意思。
  6. Golang中只有for循环,没有while循环,可以用for循环实现while的效果。
  7. 一个项目必须有一个main包,即package main,一个main包有且只有一个main函数,这个函数是项目的入口。 以下是对于具体语法的学习体会:

1.常量与变量:

①声明变量:

在Golang中,变量的声明使用var关键字,变量类型写在后面,变量声明后不需要赋值,Golang会默认赋值,这一点与c语言,Java,python都不一样:

var a int
a = 10

在编写程序时通常使用:=进行变量声明和赋值,上述代码可以合并为a:=10

②匿名变量:

在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量。匿名变量用一个下划线_表示:

func foo() (int, string) { 
    return 10, "Q1mi" 
} func main() { 
    x, _ := foo()
    _, y := foo() 
    fmt.Println("x=", x) 
    fmt.Println("y=", y) 
}

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。

③声明常量:

Golang使用const关键字声明常量,可以一次声明一个,也可以一次声明多个:

const LENGTH int = 10 
const WIDTH int = 5
const ( 
    Unknown = 0 
    Female = 1 
    Male = 2 
)

其中,iota是一种特殊常量,可以认为是一个可以被编译器修改的常量,可以是常量操作,也可以是表达式

import "fmt"

func main() {
    const (
        a = iota   //0
        b          //1
        c          //2
        d = "ha"   //独立值,iota += 1
        e          //"ha"   iota += 1
        f = 100    //iota +=1
        g          //100  iota +=1
        h = iota   //7,恢复计数
        i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
    
    const (
        i=1<<iota	//1
        j=3<<iota	//6
        k			//12
        l			//24
	)
    fmt.Println("i=",i)
    fmt.Println("j=",j)
    fmt.Println("k=",k)
    fmt.Println("l=",l)
}

2.基本数据类型:

①数据类型介绍:

布尔型:true、false; 整数类型:uint8、uint16、uint32、uint64、int8、int16、int32、int64;浮点型:float32、float64; 复数类型:complex64、complex128; 字符串:双引号包裹,采用UTF-8编码,一个汉字需要3个字节编码。字符串操作与Python类似,但是求长度的时候需要注意编码,在utf-8编码当中,如果直接求len则会显示编码长度,需要使用rune数组。

②数据类型转换:

通常情况下:

func sqrtDemo() {
	var a, b = 3, 4
	var c int
	// math.Sqrt()接收的参数是float64类型,需要强制转换
	c = int(math.Sqrt(float64(a*a + b*b)))
	fmt.Println(c)
}

3.循环结构:

①for循环:

Go 语言中的所有循环类型均可以使用for关键字来完成:

for i := 0; i < 10; i++ {
    fmt.Println(i)
}

for循环的初始语句和结束语句都可以省略,就变成了while条件循环,例如:

i := 0
for i < 10 {
    fmt.Println(i)
    i++
}

此外,for循环也可以通过break、goto、return、panic语句强制退出循环。

②switch循环:

使用switch语句可方便地对大量的值进行条件判断,每一行不用break,会自动break:

	case s == "a":
		fmt.Println("a")
		fallthrough
	case s == "b":
		fmt.Println("b")
	default:
		fmt.Println("...")
	}

	switch finger {
	case 1,2,3:
		fmt.Println("大拇指")
	default:
		fmt.Println("无效的输入!")
	}