翻译:Day1内容

144 阅读3分钟

#你好,Golang!

Let's Go

链接:

  1. Tour of Go

  • GO程序是由包组成的
  • 程序从main包开始执行
  • 包名与导入路径的最后一个元素一致

导入

  • 使用分组导入语句会好过多行多行语句
import (
	"fmt"
	"math"
)//分组导入
import "fmt"
import "math"

导出名

  • 当导入一个包时,你只能使用开放的名字,包的外部任何无法访问不开放的名字
  • 在Go中,如果一个名字以大写字母开头,那么它就是已导出的。未以大写字母开头,则是未导出的

函数

  • 函数可以有一到多个参数
  • 类型是追加在函数名后面的(这一点要注意!)
func add(x int,y int, z int) int{//这一点和C/C++有点不一样
	return x+y+z
} 
  • 当两个或多个形参的类型一样,除最后一个类型以外,其它的都可以省略.
func add(x, y int, z bool) int {
return x+y
}
  • 一个函数可以返回多个参数.
func swap(x int, y string) (string, int) {
	return y, x
}

命名返回值

  • 返回值可以被命名,它们被视为定义在函数顶部的变量
  • 没有参数的return语句返回已命名的返回值
func Subtract(x,y int)(z int){
	z = x -y
    return
}

变量和初始化Variables and Initializers

  • var语句可以定义多个变量
  • 和函数的参数列表一样,参数在后面
  • var语句可以出现在包或函数级别
  • 变量的定义可以包含初始值每个变量对应一个
  • 如果初始值已存在可以省略类型
  • 变量会从初始值中获取类型
import 	"fmt"
var i, j int = 1, 2
func main() {
	var c, python, java = true, false, "no!"
	fmt.Println(i, j, c, python, java)
}

短变量定义

  • 函数内, := 短变量定义可以替代 有明确类型的var 定义
  • 函数外,每个语句必须以以关键字开始(var,func等等) 所以:=结构不可以使用
import "fmt"
// i := 1  This is not avalible!
func main() {
	var i, j int = 1, 2
	k := 3
	e,t := "OJ","Bk" 
	c, python, java := true, false, "no!"
	fmt.Println(e,t)
	fmt.Println(i, j, k, c, python, java)
}

基础类型

  • 变量的定义可以分组到一个块中,像导入语句一样

bool

string

int int8 int16 int32 int64

byte//alias for uint8

rune//alias for int32;represents a Unicode code point

float32 float64

complex64 complex128

import (
   "fmt"
   "math/cmplx"
)
var (
   a bool = false
   b string ="Hi,Go!"
   c int = -12345
   d uint64 = 1<<64 - 1
   e byte = 123
   f rune = 2
   g float32 = 1.5
   h complex128 = cmplx.Sqrt(-5 + 12i)
)
func main() {
   fmt.Printf("Type: %T Value: %v\n", a, a)
   fmt.Printf("Type: %T Value: %v\n", b, b)
   fmt.Printf("Type: %T Value: %v\n", c, c)
   fmt.Printf("Type: %T Value: %v\n", d, d)
   fmt.Printf("Type: %T Value: %v\n", e, e)
   fmt.Printf("Type: %T Value: %v\n", g, g)
   fmt.Printf("Type: %T Value: %v\n", h, h)
}

零值

没有明确初始值的变量声明会被赋予零值

func main() {
	var i int // 0
	var f float64 // 0
	var b bool // false 
	var s string // ""
	fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

类型转换

表达时将 T(v) 将值的类型转换为类型 T

import (
	"fmt"
	"math"
)
func main() {
	var x, y int = 3, 4
	var f float64 = math.Sqrt(float64(x*x + y*y))//float64(值)
	var z uint = uint(f)
	fmt.Println(x, y, z)
}

常量

  • 除了关键字key,常量和变量的定义一样
const pi = 3.14
func main(){
const d = 1
}