GoLang学习笔记(二) GoLang基础

一、包

Go程序从 main 包开始运行,程序内通过导入路径来使用其他的包。

Go中的约定是,包名与导入路径的最后一个元素一致。

"math/rand"包中的代码都是以package rand开头

package main//main包 程序运行

//包的导入
import (
	"fmt"
	"math/rand"
)

func main() {
	fmt.Println("hello go ", rand.Intn(100))
}
  1. 包的导入
    Go可以通过编写多个导入语句进行导包
import "fmt"
import "math

也可以通过上面代码中的分组导入语句进行导包

上述代码中通过路径"fmt""math/rand"导入了两个包。

  1. 导出
    Go中,如果一个名称的首字母是大写的,那么这个名称是已导出的,这个方法是其他包可见的,相当与Java中是由public关键字修饰。
    若一个名称是以小写字母开头,那么这个名称未导出的,是其他包不可见的。
    相当与Java中private关键字修饰。
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.pi)//此处pi为未导出的
}

运行结果为

制作golang基础镜像_变量声明

修改为 math.Pi 程序正常运行

制作golang基础镜像_制作golang基础镜像_02

二、变量

  1. 基本类型
bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

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

float32 float64

complex64 complex128 //复数 complex64为32位实数+32位虚数 complex128为64位实数+64位虚数

注意:int, uintuintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。

  1. 变量声明
    var用于一个变量的声明 声明格式为
var 变量名 变量类型

行尾无须分号,Go代码中不需要分号结尾

若多个变量为相同类型,通过var+变量名2+,+变量名1+ 变量类型 的形式声明

var a,b,c int

批量声明 类似与包的批量导入 使用var和括号将一组变量放在一起声明

var (
    a int
    b string
    c []float32
    d func() bool
    e struct {
        x int
    }
)

短变量声明

使用:= 可以代替var进行变量的声明

package main

import (
	"fmt"

)

func main() {

	k := 3
	c, python, java := true, false, "no!"

	fmt.Println(k, c, python, java)
}

运行结果为:

制作golang基础镜像_变量声明_03

注意:

:= 结构不能在函数外使用 应为Go语言中,函数外的每个语句都必须以关键字开始(var, func 等等)

:=声明写法的左值变量必须是没有定义过的变量。若定义过,将会发生编译错误。

  1. 变量的初始化
    没有明确初始值的变量声明它们会被赋予:
  • 数值类型为 0
  • 布尔类型为 false
  • 字符串为 ""(空字符串)。
  1. 类型转换
    Go中不同类型之前的转换必须通过显示转换,不支持隐式转换
var i int = 42
var f float64 = float64(i)
  1. 类型推导
    当声明了一个不指定类型的变量时,Go会帮助我们进行类型推导,更具右边的值推导得出变量的类型

三、常量

const 关键字声明,定义格式语法与变量类似

常量的值必须是能够在编译时就能够确定的,可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。所有常量的运算都可以在编译期完成,这样不仅可以减少运行时的工作,也方便其他代码的编译优化,当操作数是常量时,一些运行时的错误也可以在编译时被发现。

const (
    e  = 2.7182818
    pi = 3.1415926
)

四、函数

  1. 参数
    函数可以无参也可以是多个参数
package main

import "fmt"

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

func main() {
	fmt.Println(add(42, 13))
}

若两个参数类型相同简写为:

package main

import "fmt"

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

func main() {
	fmt.Println(add(42, 13))
}
  1. 返回值
    Go支持一个函数拥有任意个数的返回值 并且这些返回值可以进行命名。
    返回值被命名后,会被视作定义在函数顶部的变量
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))
}

没有参数的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))
}

没有参数的return 语句会返回以及命名的返回值。

在较长的函数中不建议使用直接返回,这样会影响代码的可读性。