others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

golang 基础一

访问量:1228 创建时间:2020-06-16

go的文件结构

package main //package main定义包名,非注释第一行用于定义这个文件属于哪个包,package main表示可独立执行程序,go应用程序都包含一个main包,作为程序入口。

import "fmt" //告诉编译器,导入fmt包,fmt包是用来格式化IO(输入输出)的函数

func main() {  //func main()是程序入口函数,通常是启动第一个运行。
   /* 注释 */
   fmt.Println("Hello, World!")
}

变量命名规则

字母下划线开头,(不包含go的关键字,例如if ,else等)

数据类型

类型 说明
布尔型 var a bool = true;var a bool = false
数字类型 整形int;浮点型float
字符串类型 字符串的字节使用UTF-8编码标识Unicode文本
指针类型Pointer 派生类型
数组类型 派生类型
结构化类型struct 派生类型
联合体类型 union 派生类型
函数类型 派生类型
切片类型 派生类型
接口类型interface 派生类型
map 类型 派生类型
channel类型 派生类型

常量与变量

常量:在程序运行时不会被修改的内容,(比如程序的配置信息,数据库连接字符串等)

定义格式:const identifier [type] = value

iota,特殊常量,可以认为是一个可以被编译器修改的常量。每出现一次iota,其所代表的数字会自动增加1。

变量:变量的值可以通过变量名访问。

声明形式:var identifier type

package main
import "fmt"
func main() {
    var a string = "test"
    const c1 = "test2"
    fmt.Println(a)
    fmt.Println(c1)
    var b, c = 1, 2
    const c2, c3 = 3, 4
    fmt.Println(b,c)
    fmt.Println(c2,c3)
    fmt.Println("Hello, World!")
}

go语言变量未赋值时为nil,nil是预定义的标识符,代表指针、通道、函数、接口、映射或切片的零值,只能赋值给指针、channel、func、interface、map或slice类型的变量 (非基础类型)

package main

import "fmt"

func main() {
    var a int
    var b float64
    var c bool
    var d string
    fmt.Printf("%v %v %v %q\n", a, b, c, d)
}
//运行结果:0 0 false ""

运算符

go内置的运算符有:算术运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,其他运算符。

算术运算符 描述
+ a+b 相加
- a-b相减
* a * b相乘
/ 相除
% 取余数
++ 自增 a++
-- 自减 a--
关系运算符 描述
== 比较两个值是否相等,相等返回 True ,否则返回 False。
!= 比较两个值是否不相等,不相等返回 True ,相等返回 False。
> 左边值是否大于右边值,如果是返回 True 否则返回 False。
< 左边值是否大于右边值,如果是返回 True 否则返回 False。
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。
逻辑运算符 描述
&& 与运算,两边的操作数都是 True,则条件 True,否则为 False。
|| 或运算 , 如果两边的操作数有一个 True,则条件 True,否则为 False。
! 非运算,如果条件为 True,则逻辑 NOT 条件 False,否则为 True。
位运算符 描述
& 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。
| 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或
^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1
<< 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
>> 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
赋值运算符 描述
= 简单的赋值运算符,将一个表达式的值赋给一个左值 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;是一个指针变量
运算符优先级 运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

流程控制

条件语句,通过判断条件是否成立,选择要执行的代码段。

结构 功能 demo
if condition 如果条件成立执行{}里面的代码 if 1 == 1
if condition {// do something} else 如果条件成立执行if{}里面的代码,否则执行else{}里面的代码 if 1 == 2 {fmt.Println("1=1")} else
if condition {// do something} else if {// do something} else {} 同上
switch con 判断 con 与case 的条件是否相等,没有匹配最后执行default代码段

循环语句,根据条件范围,循环执行代码段,break跳出循环,continue跳出本次循环,继续下次循环,goto转移到目标代码地址开始执行

结构 功能 demo
for condition {} for i := 0; i < 10; i++

函数

go有内置函数,用户自定义函数。内置函数如len(),用来计算参数代表类型的长度。 定义格式:

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

函数调用:通过 函数名(参数) 来调用函数

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Google", "Runoob")
   fmt.Println(a, b)
}

参数传递的方法: 值传递(将实际参数复制一份传递到函数中),引用传递(将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数)

变量作用域

登陆评论: 使用GITHUB登陆