Go 基础语法入门

90 阅读1分钟

变量定义

func main() {
   // 变量定义
   var a string = "a"
   // 类型推断
   var b = 18
   // 多个定义
   var c, d, e int = 1, 2, 3
   // 多个定义并类型推断
   var f, g, h = 4, "5", true
   // 简短写法 在包内定义变量的时候不能用简短写法
   i := 6
   // 省略写法
   var (
      j = 7
      k = 8
      l = 9
   )
   fmt.Println(a, b, c, d, e, f, g, h, i, j, k, l)
}

内建变量类型

  • bool string
  • int int8 int16 int32 int64 uintptr(没有long)
  • byte rune(rune字符 类似char)
  • float32 float64 complex64 complex128(复数)

  • 强制类型转换
    • 只有强制类型转换 没有向上转型 没有隐式转换

常量和枚举

const name = "go"

// 枚举
func enums() {
   const (
       cpp    = 0
       java   = 1
       python = 2
   )
   // iota 自增值
   const(
       cpp = iota
       _
       python
       js
   )
}

条件语句

  • if
func main() {
    // if判断
   const filename = "abc.txt"
   contents, err := ioutil.ReadFile(filename)
   if err != nil {
      fmt.Println(err)
   } else {
      fmt.Printf("%s\n", contents)
   }
   
   // if后面可以跟语句 变量的作用域就在这个if块里面
   if contents, err := ioutil.ReadFile(filename); err !=nil{
       fmt.Printf("%s\n", contents)
   }
}
  • switch
// switch 后面可以没有值 这样就可以在case里面进行条件的判断
func grade(score int) string {
   g := ""
   switch {
   case score < 0:
      panic("no no no")
   case score < 60:
      g = "C"
   case score < 80:
      g = "B"
   case score <= 100:
      g = "A"
   case score > 100:
      panic("nonono")
   }
   return g
}

循环

  • for
sum := 0
for i := 0; i < 100; i++ {
   sum += i
}
fmt.Println(sum)
// int 转换为Bin
func convertToBin(num int) string {
   result := ""
   // 省略初始条件的for
   for ; num > 0; num /= 2 {
      lsb := num % 2
      result = strconv.Itoa(lsb) + result
   }
   return result
}
// for也可以省略初始条件和递增条件 类似while
// for死循环
for{
    fmt.println("loop")
}