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