目录
1.注释
//单行注释
/*
多行注释
*/
2.变量
2.1:变量定义
// 一次定义一个变量: var 变量名 数据类型 = 变量值
var name string = "张三"
fmt.Println(name)
//一次定义多个相同类型变量: var 变量名1,变量名2,变量名3 数据类型 = 值1,值2,值3
var num1, num2, num3 int = 10, 20, 30
fmt.Println(num1, num2, num3)
/*
一次定义多个不同类型变量:
var (
变量名1 数据类型 = 值1
变量名2 数据类型 = 值2
变量名3 数据类型 = 值3
)
*/
var (
age int = 23
gender int = '男'
addr string = "山东"
)
fmt.Printf("age:%d,gender:%c,addr:%s\n", age, gender, addr)
/*
变量定义后未赋值会有一个默认值:
整型:0
浮点型:0.0
字符串:空字符串
布尔类型:false
切片、函数、指针:nil
*/
var (
i int
f float64
str string
bol bool
)
fmt.Printf("整型:%d,浮点型:%.1f,字符串:%s,布尔:%t\n", i, f, str, bol)
//简化写法
hobby := "染黄毛"
fmt.Println(hobby)
2.2:变量交换简化写法
var (
a int = 10
b int = 20
)
b, a = a, b
fmt.Printf("a:%d,b:%d\n", a, b)
2.3:匿名变量:_ 传给匿名变量的值将会被丢弃
func main() {
a, _ := anonymous()
fmt.Println(a)
}
func anonymous() (int, int) {
return 10, 20
}
2.4:打印变量类型和内存地址
name := "张三"
fmt.Printf("name:%s,数据类型:%T,内存地址:%p\n", name, name, &name)
2.5:变量的作用域
变量根据作用域不同可以分为全局变量和局部变量
全局变量:定义在函数外的变量
局部变量:定义在函数内的变量
3.常量
//显式定义
const NAME string = "张三"
//隐式定义
const AGE = 23
//一次定义多个
const GENDER, ADDR = "男", "山东"
fmt.Println(NAME, AGE, GENDER, ADDR)
4.基本数据类型
// %d 整型,%f 浮点型,%c 字符,%s 字符串,%t 布尔,%b 二进制,%p 地址,& 取地址符,%T 数据类型,\n 换行,\t制表符
//整型:%d,默认0
var i int
fmt.Printf("整型:默认值:%d,数据类型:%T\n", i, i)
//浮点型:%f,默认0.0,%.2f保留两位小数
var f float64
fmt.Printf("浮点型:默认值:%.2f,数据类型:%T\n", f, f)
//字符:是整型,%c打印字符,默认空字符
var gender int
fmt.Printf("字符型:默认值:%c,数据类型:%T\n", gender, gender)
//字符串:%s,默认空字符串
var str string
fmt.Printf("字符串:默认值:%s,数据类型:%T\n", str, str)
//布尔:%t,默认false
var b bool
fmt.Printf("字符串:默认值:%t,数据类型:%T\n", b, b)
5.运算符
// 算数运算符 +,-,*,/,%,++,--
//关系运算符 ==,!=,>,>=,<,<=
// 赋值运算符 =,+=,-=,*=,/=,%=,&=,|=,^=
//逻辑运算符 &&,||,!
//位运算符:换算成二进制按位计算,&,|,^,&^,>>,<<
var a int = 60 // 0011 1100
var b int = 13 // 0000 1101
//&:与,都是1结果才是1
fmt.Printf("%b\n", a&b) //0000 1100
//|:或,有一个1结果就是1
fmt.Printf("%b\n", a|b) //0011 1101
//^:异或,不同为1,相同为0
fmt.Printf("%b\n", a^b) //0011 0001
//&^:位清空,对于b上的每个数值,如果为0则取a对应位上的数值,如果为1则取0
fmt.Printf("%b\n", a&^b) //0011 0000
//>>:右移:往右边移两位
fmt.Printf("%b\n", a>>2) //右移后:0000 1111
//<<:左移:往左边移两位
fmt.Printf("%b\n", a<<2) //左移后:1111 0000
6.获取键盘输入
/*
获取键盘输入:
fmt.Scan() //接收键盘输入;如果要求输入多个值,只输入了一个,回车后程序会等待继续输入
fmt.Scanln() //接收键盘输入;如果要求输入多个值,只输入了一个,回车后未输入的值会赋默认值
fmt.Scanf() //接收键盘输入;如果要求输入多个值,只输入了一个,回车后未输入的值会赋默认值,支持格式化输入
打印:
fmt.Println() // 打印并换行
fmt.Printf() // 格式化输出
fmt.print() // 打印输出
*/
func main() {
fmt.Println("请输入两个整数:")
var a, b int
testScanf(a, b)
}
func testScan(a, b int) {
fmt.Scan(&a, &b)
fmt.Printf("scan,a:%d,b:%d", a, b)
}
func testScanln(a, b int) {
fmt.Scanln(&a, &b)
fmt.Printf("scanln,a:%d,b:%d", a, b)
}
func testScanf(a, b int) {
fmt.Scanf("%d,%d", &a, &b)
fmt.Printf("scanf,a:%d,b:%d", a, b)
}