Go语言学习-包、变量和函数

文章目录

  • 变量
  • 函数

本文参考:

Go语言之旅
Go By Example

  • Go程序都是由包构成的,程序从main包开始运行。
  • 可以使用圆括号分组形式导入别的包,package之间直接换行进行分割。
  • 包名与导入路径的最后一个元素一致,“math/rand” 包中的源码均以 package rand 语句开始
  • math包中的Pi以大写字母开头,是导出名,可以在包外访问
  • 在编写代码的时候,和Python一样,不需要";"断句
package main // 定义main包

//使用圆括号分组形式导入别的包
import (
	"fmt"
	"math"
	"math/rand" //包名与导入路径的最后一个元素一致,"math/rand" 包中的源码均以 package rand 语句开始
)

func main() {
	fmt.Println(math.Pi) //math包中的Pi以大写字母开头,是导出名,可以在包外访问
	fmt.Println("My favorite number is", rand.Intn(10))
}

变量

基本类型:

  • int, uint 和 uintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。
bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

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

float32 float64

complex64 complex128

var关键词声明变量:

package main

import "fmt"

//var语句可以出现在包、函数级别
var e1, e2 int

//var关键词用于声明一个变量列表,类型声明跟在后面
//var变量在声明的时候也可以直接初始化
var num3, num4 int = 3, 4

//同样可以采用分组的形式进行变量声明
var (
	// 在声明时初始化值已经存在的话,可以忽略类型声明
	num1, num2 = 1, 2
)

func main() {
	//var语句可以出现在包、函数级别
	var c, python, java = true, false, "no!"

	fmt.Println(num1, num2, num3, num4, c, python, java)

	// 没有明确初始值的变量声明会被赋予零值
	// 在Java中这样使用局部变量的话,已经会因为没有给局部变量初始化而报错了
	var i int     // 0
	var f float64 // 0
	var b bool    // false
	var s string  // ""
	fmt.Printf("%v %v %v %v %v %q", e1, e2, i, f, b, s)
}

输出:

1 2 3 4 true false no!
0 0 0 0 false ""

短变量声明:
:= 可在类型明确的地方替代var关键词声明,函数外的语句都必须以关键词开始(var, fun等等),因此:=不能在函数外使用。

  • 从这里也可以看出,当变量类型已经明确(声明或者表达式推导出来)的时候,可以采用:=或者var 变量=语法,否则还是采用var 变量 变量类型的形式
  • Go 在不同类型的项之间赋值时需要显式转换
package main

import "fmt"

func main() {
	//类型明确的地方使用,相比于上面类型明确的var变量声明还更加简洁了一个var关键词
	i := 1
	j := 2
	fmt.Println(i, j)

	//变量类型明确时的,变量类型右值推导
	var k = i
	l := i
	fmt.Println(k)
	fmt.Println(l)

	//不同类型的项之间赋值需要显式转换
	var f float64
	o := 42
	f = float64(o)
	fmt.Println(f
}

常量:
常量用const关键词声明,只能用=声明。

package main

import "fmt"

//同样可以分组定义,类型明确省去了类型声明
const (
	i = 1
	j = 2
)

func main() {
	//函数中也可以声明常量
	const k = 3
	fmt.Println(i, j, k)
}

函数

  • 和一般函数声明一样,只是了类型放在变量后面,返回值也放在后面。
  • Go 的返回值可被命名,没有参数的return语句返回已命名的变量
package main

import "fmt"

// 和一般函数声明一样,只是了类型放在变量后面,返回值也放在后面
func subtract(i int, j int) int {
	return i - j
}

//相同类型的parameters只需要声明一次类型
func add(i, j int) int {
	return i + j
}

//多值返回,func声明的时候用(,..)表示返回值,return 的时候直接,分隔
func swap(i, j string) (string, string) {
	return j, i
}

//命名返回值
func divide(i, j int) (x, y int) {
	x = i / 10
	y = i % 10
	return
}
func main() {
	fmt.Println(add(1, 2))
	fmt.Println(subtract(2, 1))
	a, b := swap("hello", "world")
	fmt.Println(a, b)
	fmt.Println(divide(18, 10))
}

输出:

3
1
world hello
1 8

你可能感兴趣的:(Go学习之路,golang,学习)