前言

  • 这是一篇看完tour(官方教程)第一部分的总结文
  • 第一部分主要讲了基本数据类型还有一些注意点

基础知识

  • 所有go程序都是由包(package)组成
//一个简单的例子
package main

import (
    "fmt"
    "math/rand"
)

func main() {
    fmt.Println("My favorite number is", rand.Intn(10))
}
  • 开头的package main表示程序从main包开始运行
  • import关键词指出将要使用到的包,import还可以分开写
import "fmt"
import "math/rand"
  • main函数是程序的开始,其中的fmt和rand对象都是import而来的
  • import对象中的数据成员,要调用时通常需要大写,也就是exported names
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Pi)  //这里的Pi就是exported name
}
  • 函数的声明和定义中,对于参数和返回值的类型是有别于其它编程语言的,go中的类型是放在后面的
package main

import "fmt"

func add(x int, y int) int {
    return x + y
}

/*等价的写法,类型一致,只保留最右边的
func add(x, y int) int {
    return x + y
}
*/
func main() {
    fmt.Println(add(42, 13))
}
  • 函数支持多个返回值
package main

import "fmt"

func swap(x, y string) (string, string) {
    return y, x
}

func main() {
    a, b := swap("hello", "world")
    fmt.Println(a, b)
}
  • 函数返回值还可以直接写在函数声明处,在定义中省略,官方文档称之为naked return
package main

import "fmt"

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

func main() {
    fmt.Println(split(17))
}

基本数据类型

  • bool
  • string
  • int int8 int16 int32 int64
  • uint uint8 uint16 uint32 uint64 uintptr
    • int uint uintptr这三个类型,在32位系统中为32位,而在63位系统中为64位
  • byte
    • byte和uint8等价
  • rune
    • rune和int32等价,用来表示一个unicode code point
  • float32 float64
  • complex64 complex128

关于基本数据的使用

  • 通过基本数据的声明定义,初始化,类型转换等行为可以理解其使用
  • 编程语言中有两类数据:变量和常量。基本数据类型也是围绕这两者而存在的
  • 在声明函数时,也会用到基本类型作为参数和返回值,官方教程一开始没有过多解释参数和返回值,详细的内容需要看官方教程中讲解函数的部分

    变量

    • 变量的定义和初始化可以使用var关键字来达成,也可以使用符号:=来完成
    //var的使用: var 变量名 变量类型 = 值
    var i int = 1
    var j int = 2
    var k int = 3
    //当定义的类型一样,可以简化为以下形式
    var i, j, k int = 1, 2, 3
    //还能一次性定义多个变量
    var (
    ToBe   bool       = false
    MaxInt uint64     = 1<<64 - 1
    z      complex128 = cmplx.Sqrt(-5 + 12i)
    )
    
    //符号:=的用法:变量名 :=  值
    i := 1
    j := 2
    k := 3
    //同样也可以简化,而且不再要求类型一致
    i, j, k := true, false, "no!"
    • 变量的定义和初始化可以在函数内也可以在函数外
    package main
    
    import "fmt"
    
    var c, python, java bool  //函数外
    
    func main() {
        var i int      //函数内
        fmt.Println(i, c, python, java)
    }
    • 变量如果没有初始化,那么将会赋予zero value
    0 for numeric types,
    false for the boolean type, and
    "" (the empty string) for strings.
    • 类型转换,在go的赋值过程中,如果两边的类型不同,是必须显式转换的
    • 转换的写法可以简单记忆为“类型加括号”
    package main
    
    import (
        "fmt"
        "math"
    )
    
    func main() {
        x, y := 3, 4
        f := math.Sqrt(float64(x*x + y*y))
        z := uint(f)
        fmt.Println(x, y, z)
    }
    
    • 如果没有表明变量类型,但是作了初始化,那边其类型将由右边值决定
    package main
    
    import "fmt"
    
    func main() {
        v :=  3.142// change me!
        fmt.Printf("v is of type %T\n", v)
    }
    

    常量

    • 通常理解为一经定义初始化就不能改变的值,并且一定要初始化
    • 使用到const关键字声明
    • 常量不能使用符号:=来声明定义
    package main
    
    import "fmt"
    
    const Pi = 3.14  //注意和var对比
    
    func main() {
        const World = 5 + 2i
        fmt.Println("Hello", World)
        fmt.Println("Happy", Pi, "Day")
    
        const Truth = true
        fmt.Println("Go rules?", Truth)
    }
    • 还能一次性定义多个常量
    const (
    Big = 1 << 100
    Small = Big >> 99
    )
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。