标识符、关键字、命名规则

标识符:

  1. 由字母、下划线、数字组成
  2. 以字母或者下划线开头
  3. 区分大小写

关键字:

系统中有特殊含义的

命名规范:

  1. 结构体:驼峰式MapReduce
  2. 接口:以er结尾
  3. 单元测试:
  • 文件命名:example_test.go
  • 测试用例的函数名称:TestExample()


变量:

声明:

  • 变量声明之后必须使用
  • 声明格式:var name type
  • 批量声明
    var(

    • name string

    • age int

    )

初始化

语法:

  • - var name string = "hello"
    - var age int = 20

类型推断:

根据初始化的值推导出类型,不用加上类型名的初始化

  • var name = "hello"

批量初始化

  • var name,age,b = "he",20,true

短变量声明::=

  • 函数内部,外部不可以
  • 省略var和类型
  • func main(){
    name := "hello"
    age := 30
    b := true
    }

匿名变量:

  • 不起名字
    return "hello",30
  • 用下划线_表示不使用的变量
  • name,_ := GetNameAndAge()

常量:

关键字:const

iota:

被认为是一个可以被编译器修改的常量,默认的开始值是0,每调用一次加1,遇到const关键字时被重置为0。

  • 省略:_或者自定义一个其他常量(不用iota)

数据类型:

  • 数字类型
  • bool类型
  • 字符串
  • 派生:指针、数组等

判断一个变量的数据类型:%T

  • fmt.Printf("%T\n",var)

布尔类型:

  • 布尔表达式:
var age = 16
ok:= age > 18
fmt.Println(ok)
  • 不能用0或者非0表示布尔类型
var i = 1
if i {//错误的
}

数字类型:

  • go语言中没有float类型,只有float32和float64,没有double类型
  • int类型
    • int32 int 64有符号
    • uint32 无符号


字符串

是一组字符数组[]byte

创建方式:

  • 双引号
s := "hello"
  • 反引号
var s string = `
	line 1
	line 2
	line 3
`

字符串连接:

  • +号
var s1 = "hello"
var s2 = "world"
var s3 = s1 + s2
  • 格式化输出:fmt.Sprintf()
var s1 = "hello"
var s2 = "world"
var msg = fmt.Sprintf("%s %s",s1,s2)//%s与%s之间的符号表示s1与s2的连接符是什么
  • strings.Join()
var s1 = "hello"
var s2 = "world"
var s4 = strings.Join([]string{s1, s2}, " ")
//把要拼接的字符串传进一个字符串数组,然后再传一个字符串之间的连接符,从而进行连接
  • buffer.WriteString()

数据类型转换

go中的数据类型转换时,必须显示的转换

var n1 int32 = 10
var n2 int64
n2 = int64(n1) + 20 //强制转换
fmt.Printf("n2: %v\n", n2)


go语言的格式化输出

占位符:

普通占位符:

  • %v 默认格式
  • %#v Go的语法表示
  • %T 值的类型
  • fmt.Printf("%T\n",a)
  • %b 二进制
  • %c 相应的Unicode码点所表示的字符
    • Unicode码可以容纳100多万个符号,将各国文字都转换为二进制,是一个字符集
    • UTF-8是一种编码方式,常用的字符用短编码,不常用的用长编码。例如英文字母是1个字节,中文一般是2~3个字节
    • GBK是个国标的编码方式


运算符

  • 自增自减
    • 与其他语言不同,go中的++和--不参与运算


var a = 1
var b = a++//错误写法,自增自减不能赋值

流程控制

循环:

for循环:2种,没有其他语言的while / do while

  • for 循环
  • for range

if语句

  • 判断语句不需要加括号
  • 即使只有一句,也要加大括号
  • 左括号与 if/else在同一行
  • 初始化语句可以在if语句中,注意作用范围
if age := 20; age > 18{
	fmt.Println("成年")
}

for range

  • 针对数组、切片、字符串,返回索引
  • map返回键和值
  • 通道返回通道内的值

break

可以用在循环、switch、select中

  • 在循环中可以设置内外层循环的标志,跳出外层循环
  • switch语句中,默认每个case后面带有一个break,匹配成果则不会向下执行,而是跳出switch;但是可以使用fallthrough强制执行后面case的代码,直到遇到下一个break

continue

只能用在循环中,结束这一次循环,进行下一次循环

goto

可以跳转到任何语句

for i := 0; i < 10; i++{
	if(i == 5){
		goto END
	}
}
END:
	fmt.Println("END……")