go语言学习-包、变量、函数

235 阅读3分钟

基础

参考文献

  • 程序从main包开始运行
  • 按照约定,包名与导入路径的最后一个元素一致。例如,"math/rand" 包中的源码均以 package rand 语句开始。
  • 包导入方式
1:
import "fmt"
import "math"

2:
import (
    "fmt"
    "math"
)

导出名

  • 在 Go 中,如果一个名字以大写字母开头,那么它就是已导出的。例如,Pizza 就是个已导出名,Pi 也同样,它导出自 math 包。
  • 在导入一个包时,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问。

函数

  • 函数声明:
func add(x int, y int) int {
	return x + y
}
  • 当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。
func add(x, y int) int {
    return x + y
}

  • 函数可以返回任意数量的返回值
func swap(x, y int) (int, int){
    tmp := x
    x = y
    y = tmp
    return y, x
}

  • Go 的返回值可被命名,它们会被视作定义在函数顶部的变量。
  • 没有参数的 return 语句返回已命名的返回值。也就是 直接 返回。
func swap(x, y int) (a, b int){
    a = x
    b = y
    return
}

变量

  • 变量声明(var声明变量可以在包级别或者函数级别)
var i int // 声明i为int类型
var a, b, c int //连续声明变量
var (
    a int
    b bool
    c string
)
  • 变量初始化
1:
var a, b int = 1, 2

2:
var a, b int
a ,b = 1, 2

  • 短变量声明
// 短变量声明不能在函数外使用

a := 1 // 声明变量a并且赋值1

  • 零值
    • 当变量被声明但没有被赋值时,会有默认值,成为零值
数值类型为 0,
布尔类型为 false,
字符串为 ""(空字符串)。

基本类型

  • Go 的基本类型有
bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
    // 表示一个 Unicode 码点

float32 float64

complex64 complex128

本例展示了几种类型的变量。 同导入语句一样,变量声明也可以“分组”成一个语法块。

int, uint 和 uintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。 当你需要一个整数值时应使用 int 类型,除非你有特殊的理由使用固定大小或无符号的整数类型。

  • 类型转换 import "strconv"

    • int转换为字符串:Itoa()
    // Itoa(): int -> string
    fmt.Println("a" + strconv.Itoa(32))  // a32
    
    • string转换为int:Atoi()
    x, err := strconv.Atoi("1")
    if err != nil {
        fmt.Println("转换失败")
        return
    }
    fmt.Println(x)
    
    • int 转 float64
    x := float64(1)
    fmt.Println(x)
    
    • float64 转 int
    y := 1.9
    x := int(y)
    fmt.Println(x)
    
    • Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
    b, err := strconv.ParseBool("true")
    f, err := strconv.ParseFloat("3.1415", 64)
    i, err := strconv.ParseInt("-42", 10, 64)
    u, err := strconv.ParseUint("42", 10, 64)
    
    • 将给定类型格式化为string类型:FormatBool()、FormatFloat()、FormatInt()、FormatUint()。
    s := strconv.FormatBool(true)
    s := strconv.FormatFloat(3.1415, 'E', -1, 64)
    s := strconv.FormatInt(-42, 16)
    s := strconv.FormatUint(42, 16)
    
  • 常量

// 常量可以是字符、字符串、布尔值或数值。
const Pi = 3.14

const (
	Pi = 3.14
	A = 1
	B = "hello"
	C = true
)