Go语言基础总结

一、Go语言结构

包声明

引入包

函数

变量

语句&表达式

注释

下面简单给出hello.go文件。

package src /*定义包名*/

import "fmt" /*引入包*/

func hello() { /*函数*/
	fmt.Println("Hello,World!") /*语句&表达式*/
	fmt.Println("菜鸟教程:runoob.com")
}

二、Go语言基础语法

Go程序可以由多个标记构成。可以是关键字、标识符、常量、字符串、符号等。


三、Go语言数据类型

数据类型用于声明函数和变量。

布尔型:布尔型的值只能是true或false。

数字类型:整型int、浮点型float32、float64、复数complex、位运算

字符串类型:字符串string

派生类型:指针类型pointer、数组类型、结构体类型struct、Channel类型、函数类型、切片类型、接口类型interface、Map类型


四、Go语言变量

Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

声明变量的一般形式是使用 var 关键字。

// var value type
// var value1,value2 type


func main() {
	var a string = "runoob"
	fmt.Println(a)

	var b, c int = 1, 2
	fmt.Println(b,c)
}

变量声明指定变量类型,如果没有初始化,变量默认为零值。

注释:

数值类型(包括complex64/128)零值为0

布尔类型零值为false

字符串类型零值为""(空字符串)

以下几种类型零值为nil

var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error

根据值自行判断变量类型。

如果变量已经使用 var 声明过了,再使用 := 声明变量,产生编译错误。


五、Go语言常量

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)、字符串型。

显示类型定义:const b string = "abc"

隐式类型定义:const b = "abc"

iota是特殊常量,可以认为是一个可以被编译器修改的常量。

iota在const关键字出现时将被重置为0,const中每新增一行常量声明将使iota计数一次。


六、Go语言运算符

算术运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

其他运算符


算术运算符

假定 A 值为 10,B 值为 20。

运算符 描述 实例
+ 相加 A + B 输出结果 30
- 相减 A - B 输出结果 -10
* 相乘 A * B 输出结果 200
/ 相除 B / A 输出结果 2
% 求余 B % A 输出结果 0
++ 自增 A++ 输出结果 11
-- 自减 A-- 输出结果 9

关系运算符

假定 A 值为 10,B 值为 20。

运算符 描述 实例
== 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为 True
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A > B) 为 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 (A < B) 为 True
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 (A >= B) 为 False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 (A <= B) 为 True

逻辑运算符

假定 A 值为 True,B 值为 False。

运算符 描述 实例
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 (A || B) 为 True
! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True

位运算符

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

假定 A 为60,B 为13:

运算符 描述 实例
& 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12, 二进制为 0000 1100
| 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 (A | B) 结果为 61, 二进制为 0011 1101
^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (A ^ B) 结果为 49, 二进制为 0011 0001
<< 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 A << 2 结果为 240 ,二进制为 1111 0000
>> 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 A >> 2 结果为 15 ,二进制为 0000 1111

赋值运算符

运算符 描述 实例
= 简单的赋值运算符,将一个表达式的值赋给一个左值 C = A + B 将 A + B 表达式结果赋值给 C
+= 相加后再赋值 C += A 等于 C = C + A
-= 相减后再赋值 C -= A 等于 C = C - A
*= 相乘后再赋值 C *= A 等于 C = C * A
/= 相除后再赋值 C /= A 等于 C = C / A
%= 求余后再赋值 C %= A 等于 C = C % A
<<= 左移后赋值 C <<= 2 等于 C = C << 2
>>= 右移后赋值 C >>= 2 等于 C = C >> 2
&= 按位与后赋值 C &= 2 等于 C = C & 2
^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2
|= 按位或后赋值 C |= 2 等于 C = C | 2

其他运算符

运算符 描述 实例
& 返回变量存储地址 &a; 将给出变量的实际地址。
* 指针变量。 *a; 是一个指针变量

七、Go语言条件语句

条件语句通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况下执行另外的语句。

Go语言基础总结_第1张图片

语句 描述
if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if...else 语句 if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。
switch 语句 switch 语句用于基于不同条件执行不同动作。
select 语句 select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

八、Go语言循环语句

Go语言基础总结_第2张图片

循环类型 描述
for 循环 重复执行语句块
循环嵌套 在 for 循环中嵌套一个或多个 for 循环
控制语句 描述
break 语句 经常用于中断当前 for 循环或跳出 switch 语句
continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环。
goto 语句 将控制转移到被标记的语句。

无限循环:如果循环中条件语句永远不为false则会进行无限循环。


九、Go语言函数

Go语言函数定义格式如下:

func function_name([parameter list]) [return_types] {
    函数体
}

function_name:函数名称

parameter list:参数列表,指定参数类型、顺序、参数个数。参数可选。

return_types:返回类型,函数返回一列值。

函数体:函数定义的代码集合。

func min(num1,num2 int) int {

    var result int

    if (num1 > num2) {
        result = num2
    }else{
        result = num1
    }
    return result
}

函数调用

package main

import "fmt"

func main() {

    var a int = 100
    var b int = 90
    var res int
    
    res = min(a,b)
    fmt.printf("最小值为: %d\n",res)
}

调用函数可通过两种方式来传递形参。

值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。


十、Go语言变量作用域

函数内定义的变量称为局部变量,作用域只在函数体内,参数和返回值变量也是局部变量。

函数外定义的变量称为全局变量,可在任何函数中使用。

函数定义中的变量称为形式参数,会作为函数的局部变量来使用。


十一、Go语言数组

声明数组语法格式:

var arrayname [size]dataType

arrayname是数组的名称,size是数组的大小,dataType是数组中元素的数据类型。


十二、Go语言指针

声明指针格式:

var var_name *var_type

var_name为指针变量名,var_type为指针类型,*号用于指定变量是作为一个指针。

var num *int      /*指向整型*/
var fp *float32   /*指向浮点型*/

十三、Go语言结构体

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}
type Books struct {
   title string
   author string
   subject string
   book_id int
}

访问结构体成员,需使用 . 点号操作符,格式为:结构体.成员名

结构体指针格式:

var struct_pointer *Books

十四、Go语言切片

使用make()函数来创建切片

var slice1 []type = make([]type, len)
或
slice1 := make([]type, len)

len():获取长度

cap():计算容量

append():向切片追加新元素

copy():拷贝切片


十五、Go语言范围

range关键字用于for循环中迭代数组array、切片slice、通道channel、集合map的元素。在数组和切片中返回元素的索引和索引对应的值,在集合中返回key-value对。

for key,value := range oldMap {
    newMap[key] = value
}

/*如果只想读取key*/
for key := range oldMap

或

for key,_ := range oldMap

/*如果只想读取value*/
for _,value := range oldMap

十六、Go语言Map集合

Map是一种无序的键值对的集合。在获取Map值时,如果键不存在,返回该类型的零值。

/*使用make函数或map关键字来定义Map*/

map_variable := make(map[KeyType]ValueType, initialCapacity)
// 创建一个初始容量为10的Map

m := make(map[string]int,10)  

m := map[string]int{
    "apple":1,
    "banana":2,
    "orange":3,
}

你可能感兴趣的:(Go学习笔记,golang,开发语言,后端)