Golang入门 |青训营笔记

47 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

Day 1

 package main
 import "fmt"
 func main() {
     fmt.Printf("%d %q", a, s)
     fmt.Println(a, b, s)
 }
 ​
 2.First time define use :=
   After use = 赋值
 函数外面不能使用 := 只能用var 且不是全局变量,只是包内变量
 eg: var (
     aa = 3
     ss = "kkk"
     bb = true
 )
复制代码

占位符表示

  • 普通占位符
占位符说明
%v相应值的默认格式
%+v打印结构体时,会添加字段名
%#v相应值的Go语法表示(更加详细
%T相应值的类型的Go语法表示
  • 布尔占位符
占位符说明
%ttrue 或 false
  • 整数占位符
占位符说明
%b二进制表示
%c相应Unicode码点所表示的字符
%d十进制表示
%o八进制表示
%q单引号围绕的字符字面值,由Go语法安全转义
%x十六进制表示,字母形式为小写a-f
%X十六进制表示,字母形式为大写A-F
  • 浮点数和复数的组成部分
  • 字符串与字节切片
占位符说明
%s输出字符串表示(string类型或[]byte)
%q双引号围绕的字符串,由Go语法安全地转义
%x十六进制,小写字母,每字节两个字符
%X十六进制,大写字母,每字节两个字符
  • 指针
占位符说明
%p十六进制表示,前缀0x

内建变量类型

  • bool, string
  • (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
  • byte, rune
  • float32, float64, complex64, complex128

rune 字符型 32位

complex 复数

强制类型转换

类型转换是强制的

 func triangle() {
     var a, b int = 3, 4
     var c int
     c = int(math.Sqrt(float64(a * a + b * b))
     fmt.Println(c)
 }
             //math.Sqrt() 要float64 且c为int 需要强制类型转换为 int
复制代码

常量

不需要首字母大写

 func consts() {
     const filename = "abc.txt"
     const a, b = 3, 4 //const数值可作为各种类型使用
     var c int
     c = int(math.Sqrt(a*a + b*b))
     fmt.Println(filename, c)
 }
复制代码

常量枚举类型 (普通类型和自增值类型)

iota 自增值种子

 func enums() {
     const (
         cpp = iota
         _
         python
         golang
         javascript
     )
     //b, kb, mb, gb, tb, pb
     const (
         b = 1 << (10 * iota)
         kb
         mb
         gb
         tb
         pb
     )
     fmt.Println(cpp, javascript, python, golang)
     fmt.Println(b, kb, mb, gb, tb, pb)
 }
复制代码

条件语句

if

  • if的条件里可以赋值
  • if的条件里赋值的变量作用域只在这个if块里
 package main
 ​
 import (
     "fmt"
     "io/ioutil"
 )
 ​
 func main() {
     const filename = "abc.txt"
     if contents, err := ioutil.ReadFile(filename); err != nil {
         fmt.Println(err)
     } else {
         fmt.Printf("%s\n", contents)
     }
     //if err != nil {
     //  fmt.Println(err)
     //} else {
     //  fmt.Printf("%s\n", contents)
     //}
 }
复制代码

switch

  • switch 会自动break,除非使用fallthrough
  • switch 后可以没有表达式
 func eval(a, b int, op string) int {
     var result int
     switch op {
         case "+":
             result = a + b
         case "-":
             result = a - b
         case "*":
             result = a * b
         case "/":
             result = a / b
         default:
         panic("unsupported operator:" + op)
     }
     return result
 }
复制代码

循环语句

for

  • for的条件里不需要括号
  • for的条件里可以省略初始条件,结束条件,递增表达式

for 起始条件;结束条件;递增条件

1.若没有起始条件和递增条件

则如下所示,相当于while循环

  1. 啥都不写 相当于死循环
 for scanner.Scan() {
     //while 循环
 }
 ​
 for {
     //死循环
 }

作者:devinroot
链接:juejin.cn/post/710868…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。