1. package main
    2. import "fmt"
    3. func main() {
    4. // fmt.Println("你好golang")
    5. fmt.Println("你好golang")
    6. fmt.Print("aaa")
    7. fmt.Print("bbb")
    8. fmt.Print("ccc")
    9. fmt.Println("aaa")
    10. fmt.Println("bbb")
    11. fmt.Println("ccc")
    12. fmt.Println("go", "python", "php", "javascript")
    13. fmt.Print("go", "python", "php", "javascript")
    14. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. // fmt.Println("你好 golang")
    5. // fmt.Print("你好 golang")
    6. // fmt.Printf("你好 golang")
    7. /*
    8. fmt.Println("你好 golang")
    9. fmt.Print("你好 golang")
    10. */
    11. // ctrl+/ 单行注释 ctrl+/ 也可以解除单行注释
    12. /*
    13. Print Println区别
    14. 1、一次输入多个值的时候 Println 中间有空格 Print 没有
    15. 2、Println 会自动换行,Print 不会
    16. */
    17. // fmt.Println("你好 golang")
    18. // fmt.Print("你好 golang")
    19. // fmt.Print("A")
    20. // fmt.Print("B")
    21. // fmt.Print("C")
    22. // fmt.Println("A")
    23. // fmt.Println("B")
    24. // fmt.Println("C")
    25. // fmt.Print("A", "B", "C")
    26. // fmt.Println("A", "B", "C")
    27. /*
    28. Println 和 Printf 区别
    29. 1、Println默认会换行,Printf默认不会
    30. 2、Printf是格式化输出 比Println功能更强大更灵活
    31. */
    32. // var a = "aaa" //go语言中变量定义以后必须要使用
    33. // fmt.Println(a)
    34. // var a = "aaa" //go语言中变量定义以后必须要使用
    35. // fmt.Printf("%v", a)
    36. // var a int = 10
    37. // var b int = 3
    38. // var c int = 5
    39. // fmt.Println("a=", a, "b=", b, "c=", c)
    40. // fmt.Println("a=", a, "b=", b, "c=", c)
    41. // fmt.Printf("a=%v b=%v c=%v\n", a, b, c) // \n表示换行
    42. // fmt.Printf("a=%v b=%v c=%v", a, b, c)
    43. //类型推导方式定义变量
    44. a := 10
    45. b := 20
    46. c := 30
    47. fmt.Printf("a=%v b=%v c=%v\n", a, b, c)
    48. //使用Printf打印一个变量的类型
    49. fmt.Printf("a=%v a的类型是%T", a, a)
    50. }
    1. package main
    2. import "fmt"
    3. func getUserinfo() (string, int) {
    4. return "zhangsan", 10
    5. }
    6. var g = "全局变量"
    7. // gl := "全局变量 _端变量声明法 错误写法"
    8. func main() {
    9. fmt.Println(g)
    10. // fmt.Println(gl)
    11. /*
    12. 1、 var 声明变量
    13. var 变量名称 类型
    14. 变量名称的命名:Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。Go 语言中关键字 和保留字都不能用作变量名。
    15. */
    16. // var username string
    17. // fmt.Println(username) //变量声明后没有初始化的话 值为空
    18. // var a1="张三"
    19. // fmt.Println(a1)
    20. // var 1a string //错误:go变量的首个字符不能为数字
    21. // fmt.Println(1a)
    22. // var m_a="李四" //正确 不推荐
    23. // fmt.Println(m_a)
    24. // var if="李四" //错误 Go 语言中关键字 和保留字都不能用作变量名。
    25. // fmt.Println(if)
    26. //go语言变量的定义以及初始化
    27. //第一种初始化变量的方式
    28. // var username string
    29. // username = "张三"
    30. // fmt.Println(username)
    31. //第二种初始化变量的方式
    32. // var username string = "张三"
    33. // fmt.Println(username)
    34. //第三种初始化变量的方式
    35. // var username = "张三"
    36. // fmt.Println(username)
    37. /*
    38. Go 语言中的变量需要声明后才能使用,同一作用域内不支持重复声明
    39. var username = "张三"
    40. var age = 20
    41. var sex="男"
    42. fmt.Println(username,age,sex)
    43. var username = "李四"
    44. */
    45. /*
    46. var username = "张三"
    47. var age = 20
    48. var sex="男"
    49. username = "李四" //赋值
    50. fmt.Println(username,age,sex) //输出:李四 20 男
    51. */
    52. /*
    53. 2、 一次定义多个变量
    54. var 变量名称, 变量名称 类型
    55. var (
    56. 变量名称 类型
    57. 变量名称 类型
    58. )
    59. */
    60. /*
    61. var a1, a2 string
    62. a1 = "aaa"
    63. a2 = "aaaaaaaaaaa"
    64. fmt.Println(a1, a2)
    65. */
    66. /*
    67. var a1, a2 string
    68. a1 = "aaa"
    69. a2 = 123 //错误写法 go语言中定义的类型是string类型 赋值的时候必须赋值string类型的数据
    70. fmt.Println(a1, a2)
    71. */
    72. /*
    73. var (
    74. username string
    75. age int
    76. sex string
    77. )
    78. username = "张三"
    79. age = 20
    80. sex = "男"
    81. fmt.Println(username, age, sex)
    82. */
    83. /*
    84. var (
    85. username = "张三"
    86. age = 20
    87. )
    88. fmt.Println(username, age)
    89. */
    90. /*
    91. 3、短变量声明法 在函数内部,可以使用更简略的 := 方式声明并初始化变量。
    92. 注意:短变量只能用于声明局部变量,不能用于全局变量的声明
    93. */
    94. // var username = "张三"
    95. /*
    96. username := "张三"
    97. fmt.Println(username)
    98. fmt.Printf("类型:%T", username)
    99. */
    100. // 使用端变量一次声明多个变量,并初始化变量
    101. // a, b, c := 12, 13, 20
    102. // fmt.Println(a, b, c)
    103. // a, b, c := 12, 13, "C"
    104. // fmt.Println(a, b, c)
    105. // fmt.Printf("a类型:%T b类型:%T c类型:%T", a, b, c)
    106. /*
    107. 4、匿名变量 在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)。
    108. 匿 名变量用一个下划线_表示,例如
    109. func getUserinfo() (string, int) {
    110. return "zhangsan", 10
    111. }
    112. */
    113. // var username, age = getUserinfo()
    114. // fmt.Println(username, age) //zhangsan 10
    115. var username, _ = getUserinfo()
    116. fmt.Println(username) //zhangsan
    117. //匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
    118. var _, age = getUserinfo()
    119. fmt.Println(age) //10
    120. }
    1. package main
    2. func main() {
    3. // var username = "张三"
    4. // username = "李四"
    5. // username = "王五"
    6. // fmt.Println(username)
    7. //1、go语言中的常量
    8. // const pi = 3.14159
    9. // fmt.Println(pi)
    10. // const A = "A"
    11. // A = "AAA" //cannot assign to A 常量的值不可以改变
    12. // fmt.Println(A)
    13. //2、多个常量也可以一起声明
    14. // const (
    15. // A = "A"
    16. // B = "B"
    17. // )
    18. // fmt.Println(A, B)
    19. //3、const 同时声明多个常量时,如果省略了值则表示和上面一行的值相同。
    20. // const (
    21. // n1 = 100
    22. // n2
    23. // n3
    24. // n4
    25. // )
    26. // fmt.Println(n1, n2, n3, n4)
    27. /*
    28. 4、iota 是 golang 语言的常量计数器,只能在常量的表达式中使用。
    29. iota 在 const 关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量 声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)
    30. */
    31. // const a = iota
    32. // fmt.Println(a)
    33. // const (
    34. // n1 = iota
    35. // n2
    36. // n3
    37. // n4
    38. // )
    39. // fmt.Println(n1, n2, n3, n4) //0 1 2 3
    40. // const (
    41. // n1 = iota
    42. // _
    43. // n3
    44. // n4
    45. // )
    46. // fmt.Println(n1, n3, n4) //0 2 3
    47. //iota 声明中间插队
    48. // const (
    49. // n1 = iota //0
    50. // n2 = 100 //100
    51. // n3 = iota //2
    52. // n4 //3
    53. // )
    54. // fmt.Println(n1, n2, n3, n4)
    55. //多个 iota 定义在一行
    56. // const (
    57. // n1, n2 = iota + 1, iota + 2 //1 2
    58. // n3, n4 //2 3
    59. // n5, n6 //3 4
    60. // )
    61. // fmt.Println(n1, n2)
    62. // fmt.Println(n3, n4)
    63. // fmt.Println(n5, n6)
    64. //定义变量
    65. // n1, n2 := 20, 30
    66. // fmt.Println(n1, n2)
    67. //5、go语言中变量的名字是区分大小写的
    68. // var age = 20
    69. // var Age = 30
    70. // fmt.Println(age, Age)
    71. // var username = "zhangsan"
    72. // var DNS = "192.112.23.2"
    73. }
    1. package main
    2. import (
    3. "fmt"
    4. "github.com/shopspring/decimal"
    5. )
    6. func main() {
    7. price, err := decimal.NewFromString("136.02")
    8. if err != nil {
    9. panic(err)
    10. }
    11. quantity := decimal.NewFromInt(3)
    12. fee, _ := decimal.NewFromString(".035")
    13. taxRate, _ := decimal.NewFromString(".08875")
    14. subtotal := price.Mul(quantity)
    15. preTax := subtotal.Mul(fee.Add(decimal.NewFromFloat(1)))
    16. total := preTax.Mul(taxRate.Add(decimal.NewFromFloat(1)))
    17. fmt.Println("Subtotal:", subtotal) // Subtotal: 408.06
    18. fmt.Println("Pre-tax:", preTax) // Pre-tax: 422.3421
    19. fmt.Println("Taxes:", total.Sub(preTax)) // Taxes: 37.482861375
    20. fmt.Println("Total:", total) // Total: 459.824961375
    21. fmt.Println("Tax rate:", total.Sub(preTax).Div(preTax)) // Tax rate: 0.08875
    22. }
    1. package main
    2. import (
    3. "fmt"
    4. "github.com/shopspring/decimal"
    5. )
    6. func main() {
    7. // //加
    8. var num1 float64 = 3.1
    9. var num2 float64 = 4.2
    10. d1 := decimal.NewFromFloat(num1).Add(decimal.NewFromFloat(num2))
    11. fmt.Println(d1)
    12. //减去
    13. m1 := 8.2
    14. m2 := 3.8
    15. m3 := decimal.NewFromFloat(m1).Sub(decimal.NewFromFloat(m2))
    16. fmt.Println(m3)
    17. // 减法 Sub,乘法 Mul, 除法 Div 用法均与上述类似
    18. }
    1. package main
    2. import "strings"
    3. func main() {
    4. //1、定义string类型
    5. // var str1 string = "你好golang"
    6. // var str2 = "你好 go"
    7. // str3 := "你好golang"
    8. // fmt.Printf("%v--%T\n", str1, str1)
    9. // fmt.Printf("%v--%T\n", str2, str2)
    10. // fmt.Printf("%v--%T\n", str3, str3)
    11. //2、字符串转义符
    12. // str1 := "this \nis str" //换行
    13. // fmt.Println(str1)
    14. // str2 := "C:\\Go\\bin" //C:\Go\bin 输出反斜杠
    15. // fmt.Println(str2)
    16. /*
    17. C:Go"bin
    18. */
    19. // str2 := "C:Go\"bin"
    20. // fmt.Println(str2)
    21. // 3、多行字符串 `(反引号) tab键上面
    22. // str1 := `this is str
    23. // this is str
    24. // this is str111
    25. // this is str
    26. // this is str
    27. // `
    28. // fmt.Println(str1)
    29. // 4、len(str) 求长度
    30. // var str1 = "aaaa" //长度4
    31. // fmt.Println(len(str1))
    32. // var str1 = "你好" //长度6
    33. // fmt.Println(len(str1))
    34. // 5、+ 或者 fmt.Sprintf拼接字符串
    35. // str1 := "你好"
    36. // str2 := "golang"
    37. // str3 := str1 + str2
    38. // fmt.Println(str3)
    39. // str1 := "你好"
    40. // str2 := "golang"
    41. // str3 := fmt.Sprintf("%v %v", str1, str2)
    42. // fmt.Println(str3)
    43. // str1 := "反引号间换行将被作为字符串中的换" +
    44. // "文本将会原样输出" +
    45. // "行,但是所有的转义字符均无效"
    46. // fmt.Println(str1)
    47. //6、strings.Split 分割字符串 strings需要引入strings包
    48. // var str1 = "123-456-789"
    49. // arr := strings.Split(str1, "-")
    50. // fmt.Println(arr) //[123 456 789] 切片 (简单的理解切片就是数组 在golang中切片和数组还有一些区别)
    51. //7、strings.Join(a[]string, sep string) join 操作 表示把切片链接成字符串
    52. // var str1 = "123-456-789"
    53. // arr := strings.Split(str1, "-")
    54. // str2 := strings.Join(arr, "*")
    55. // fmt.Println(str2) //123*456*789
    56. // arr := []string{"php", "java", "golang"} //切片 后期会详细讲
    57. // // fmt.Println(arr)
    58. // str3 := strings.Join(arr, "-")
    59. // // fmt.Println(str3)
    60. // fmt.Printf("%v - %T", str3, str3)
    61. //8、 strings.contains 判断是否包含
    62. // str1 := "this is str"
    63. // str2 := "thisxxx"
    64. // flag := strings.Contains(str1, str2)
    65. // fmt.Println(flag)
    66. //9、strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
    67. // str1 := "this is str"
    68. // str2 := "this"
    69. // flag := strings.HasPrefix(str1, str2)
    70. // fmt.Println(flag)
    71. // str1 := "this is str"
    72. // str2 := "str"
    73. // flag := strings.HasSuffix(str1, str2)
    74. // fmt.Println(flag)
    75. //10、 strings.Index(),strings.LastIndex() 子串出现的位置 查找不到返回-1 查找到返回下标位置 下标是从0开始的
    76. // str1 := "this is str"
    77. // str2 := "is"
    78. // num := strings.Index(str1, str2)
    79. // print(num) //返回2
    80. // str1 := "this is str"
    81. // str2 := "is"
    82. // num := strings.LastIndex(str1, str2)
    83. // print(num) //返回5
    84. // str1 := "this is str"
    85. // str2 := "s"
    86. // num := strings.LastIndex(str1, str2)
    87. // print(num) // 返回 8
    88. str1 := "this is str"
    89. str2 := "xxx"
    90. num := strings.Index(str1, str2)
    91. print(num) //-1 查找不到返回-1
    92. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. /*
    5. Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。
    6. 注意:
    7. 1.布尔类型变量的默认值为false。
    8. 2.Go 语言中不允许将整型强制转换为布尔型.
    9. 3.布尔型无法参与数值运算,也无法与其他类型进行转换。
    10. */
    11. // var flag = true
    12. // fmt.Printf("%v--%T", flag, flag)
    13. //1.布尔类型变量的默认值为false。
    14. // var b bool
    15. // fmt.Printf("%v", b)
    16. //2.string型变量的默认值为空。
    17. // var s string
    18. // fmt.Printf("%v", s)
    19. //3.int型变量的默认值为0。
    20. // var i int
    21. // fmt.Printf("%v", i)
    22. //4.float型变量的默认值为0。
    23. // var f float32
    24. // fmt.Printf("%v", f)
    25. //5、Go 语言中不允许将整型强制转换为布尔型.
    26. // var a = 1
    27. // if a { //错误写法
    28. // fmt.Printf("true")
    29. // }
    30. //6.布尔型无法参与数值运算,也无法与其他类型进行转换。
    31. // var s = "this is str"
    32. // if s { //错误写法
    33. // fmt.Printf("true")
    34. // }
    35. var f1 = false
    36. if f1 { //正确写法
    37. fmt.Printf("true")
    38. } else {
    39. fmt.Printf("false")
    40. }
    41. }
    1. package main
    2. func main() {
    3. //1、golang中定义字符 字符属于int类型
    4. // var a = 'a'
    5. // fmt.Printf("值:%v 类型:%T", a, a) //值:97 类型:int32
    6. //当我们直接输出 byte(字符)的时候输出的是这个字符对应的码值
    7. //2、原样输出字符
    8. // var a = 'a'
    9. // fmt.Printf("值:%c 类型:%T", a, a) //值:a 类型:int32
    10. //3、定义一个字符串输出字符串里面的字符
    11. // var str = "this"
    12. // fmt.Printf("值:%v 原样输出%c 类型:%T", str[2], str[2], str[2])
    13. //4、一个汉子占用 3个字节(utf-8), 一个字母占用一个字节
    14. // unsafe.Sizeof() 没法查看string类型数据所占用的存储空间
    15. // var str = "this" //占用4个字节
    16. // fmt.Println(len(str))
    17. // var str = "你好go" //8
    18. // fmt.Println(len(str))
    19. // 5、定义一个字符 字符的值是汉子
    20. //golang中汉子使用的是utf8编码 编码后的值就是int类型
    21. // var a = '国'
    22. // fmt.Printf("值:%v 类型:%T\n", a, a) //Unicode编码10进制 值:22269 类型:int32
    23. // fmt.Printf("值:%c 类型:%T", a, a)
    24. //6、通过循环输出字符串里面的字符
    25. // s := "你好 golang"
    26. // for i := 0; i < len(s); i++ { //byte
    27. // fmt.Printf("%v(%c) ", s[i], s[i])
    28. // }
    29. // s := "你好 golang"
    30. // for _, v := range s { //rune
    31. // fmt.Printf("%v(%c) ", v, v)
    32. // }
    33. //7、修改字符串
    34. // s1 := "big"
    35. // byteStr := []byte(s1)
    36. // byteStr[0] = 'p'
    37. // fmt.Println(string(byteStr))
    38. // s1 := "你好golang"
    39. // runeStr := []rune(s1)
    40. // runeStr[0] = '大'
    41. // fmt.Println(string(runeStr))
    42. }
    1. package main
    2. func main() {
    3. //1、整型和整型之间的转换
    4. // var a int8 = 20
    5. // var b int16 = 40
    6. // fmt.Println(int16(a) + b)
    7. //2、浮点型和浮点型之间的转换
    8. // var a float32 = 20
    9. // var b float64 = 40
    10. // fmt.Println(float64(a) + b)
    11. //3、整型和浮点型之间的转换
    12. // var a float32 = 20.23
    13. // var b int = 40
    14. // fmt.Println(a + float32(b))
    15. //注意:转换的时候建议从低位转换成高位,高位转换成低位的时候如果转换不成功就会溢出,和我们想的结果不一样。
    16. }
    1. package main
    2. import (
    3. "fmt"
    4. "strconv"
    5. )
    6. func main() {
    7. //1、通fmt.Sprintf() 把其他类型转换成 String 类型
    8. //注意:Sprintf 使用中需要注意转换的格式 int 为%d float 为%f bool 为%t byte 为%c
    9. /*
    10. var i int = 20
    11. var f float64 = 12.456
    12. var t bool = true
    13. var b byte = 'a'
    14. str1 := fmt.Sprintf("%d", i)
    15. fmt.Printf("值:%v 类型:%T\n", str1, str1)
    16. str2 := fmt.Sprintf("%.2f", f)
    17. fmt.Printf("值:%v 类型:%T\n", str2, str2)
    18. str3 := fmt.Sprintf("%t", t)
    19. fmt.Printf("值:%v 类型:%T\n", str3, str3)
    20. str4 := fmt.Sprintf("%c", b)
    21. fmt.Printf("值:%v 类型:%T\n", str4, str4)
    22. */
    23. //2、通过strconv 把其他类型转换成string类型
    24. /*
    25. FormatInt
    26. 参数1:int64 的数值
    27. 参数2:传值int类型的进制
    28. */
    29. // var i int = 20
    30. // str1 := strconv.FormatInt(int64(i), 10)
    31. // fmt.Printf("值:%v 类型:%T\n", str1, str1)
    32. /*
    33. 参数 1:要转换的值
    34. 参数 2:格式化类型 'f'(-ddd.dddd)、
    35. 'b'(-ddddp±ddd,指数为二进制)、
    36. 'e'(-d.dddde±dd,十进制指数)、
    37. 'E'(-d.ddddE±dd,十进制指数)、
    38. 'g'(指数很大时用'e'格式,否则'f'格式)、
    39. 'G'(指数很大时用'E'格式,否则'f'格式)。
    40. 参数 3: 保留的小数点 -1(不对小数点格式化)
    41. 参数 4:格式化的类型 传入 64 32
    42. */
    43. // var f float32 = 20.231313
    44. // str2 := strconv.FormatFloat(float64(f), 'f', 4, 32)
    45. // fmt.Printf("值:%v 类型:%T\n", str2, str2)
    46. // str3 := strconv.FormatBool(true) //没有任何意义
    47. // fmt.Printf("值:%v 类型:%T\n", str3, str3)
    48. a := 'b' //没有任何意义
    49. str4 := strconv.FormatUint(uint64(a), 10)
    50. fmt.Printf("值:%v 类型:%T\n", str4, str4) //值:98 类型:string
    51. }
    1. package main
    2. import (
    3. "fmt"
    4. "strconv"
    5. )
    6. func main() {
    7. //1、string类型转换成整型
    8. // str := "123456"
    9. // fmt.Printf("%v--%T\n", str, str)
    10. /*
    11. ParseInt
    12. 参数1:string数据
    13. 参数2:进制
    14. 参数3:位数 32 64 16
    15. */
    16. // num, _ := strconv.ParseInt(str, 10, 64)
    17. // fmt.Printf("%v--%T", num, num)
    18. /*
    19. ParseFloat
    20. 参数1:string数据
    21. 参数2:位数 32 64
    22. */
    23. // str := "123456.333xxxx"
    24. // num, _ := strconv.ParseFloat(str, 64)
    25. // fmt.Printf("%v--%T", num, num)
    26. //不建议把string类型转换成bool型
    27. b, _ := strconv.ParseBool("xxxxxxx") // string 转 bool
    28. fmt.Printf("值:%v 类型:%T", b, b)
    29. }
    1. package main
    2. import "fmt"
    3. func main() {
    4. //1、定义int类型
    5. // var num int = 10
    6. // num = 22
    7. // fmt.Printf("num=%v 类型:%T", num, num)
    8. //2、int8的范围演示
    9. // var num int8 = 98
    10. // fmt.Printf("num=%v 类型:%T", num, num)
    11. // (-128 到 127) 错误
    12. // var num int8 = 130 //constant 130 overflows int8
    13. // fmt.Printf("num=%v 类型:%T", num, num)
    14. // var num int16 = 130 //ok
    15. // fmt.Printf("num=%v 类型:%T", num, num)
    16. //3、uint8的范围(0-255)
    17. // var n1 uint8 = -2 //constant -2 overflows uint8
    18. // fmt.Printf("n1=%v 类型:%T\n", n1, n1)
    19. // var n2 uint8 = 200 //constant -2 overflows uint8
    20. // fmt.Printf("n2=%v 类型:%T\n", n2, n2)
    21. //4、int8 int16 ... 占用的存储空间大小 unsafe.Sizeof 查看不同长度的整型 在内存里面的存储空间
    22. // var a int8 = 15
    23. // fmt.Printf("num=%v 类型:%T\n", a, a)
    24. // fmt.Println(unsafe.Sizeof(a)) // 1个字节
    25. // var a int32 = 15
    26. // fmt.Printf("num=%v 类型:%T\n", a, a)
    27. // fmt.Println(unsafe.Sizeof(a)) // 4个字节
    28. //5、int类型转换
    29. // var a1 int32 = 10
    30. // var a2 int64 = 21
    31. // fmt.Println(int64(a1) + a2) //把a1转换成64位
    32. // fmt.Println(a1 + int32(a2)) //把a2转换成32位
    33. //高位向底位转换的时候要注意
    34. // var n1 int16 = 130
    35. // fmt.Println(int8(n1)) //-126 有问题了
    36. // var n2 int16 = 110
    37. // fmt.Println(int8(n2)) //110
    38. // fmt.Println(int64(n2)) //110
    39. //6、数字字面量语法 %d 表示10进制输出 %b表示二进制输出 %o 八进制输出 %x 表示16进制输出(了解)
    40. // num := 30
    41. // fmt.Printf("num=%v 类型:%T\n", num, num)
    42. // fmt.Println(unsafe.Sizeof(num)) //表示64位的计算机 int就是int64 占用8个字节
    43. num := 12
    44. fmt.Printf("num=%v\n", num) //%v 原样输出
    45. fmt.Printf("num=%d\n", num) //%d 表示10进制输出
    46. fmt.Printf("num=%b\n", num) //%b 表示二进制输出
    47. fmt.Printf("num=%o\n", num) //%o 表示八进制输出
    48. fmt.Printf("num=%x\n", num) //%x 表示16进制输出
    49. }