25个关键词
包相关的知识点
1.包名如果以.
或者/
开头就会在相对目录下查找,如果不是那么就会在全局查找
2.如果有多个包名相同,我们可以使用别名import fm "fmt"
文档注释
以后自己写程序的时候要注意一下
有多个返回值的函数要用小括号括起来
func FunctionName (a typea, b typeb) (t1 type1, t2 type2)
go程序的一般结构
所有的结构将在这一章或接下来的章节中进一步地解释说明,但总体思路如下:
1.在完成包的 import 之后,开始对常量、变量和类型的定义或声明。
2.如果存在 init 函数的话,则对该函数进行定义(这是一个特殊的函数,每个含有该函数的包都会首先执行这个函数)。
3.如果当前包是 main 包,则定义 main 函数。
4.然后定义其余的函数,首先是类型的方法,接着是按照 main 函数中先后调用的顺序来定义相关函数,如果有很多函数,则可以按照字母顺序来进行排序。
package main
import (
"fmt"
)
const c = "C"
var v int = 5
type T struct{}
func init() { // initialization of package
}
func main() {
var a int
Func1()
// ...
fmt.Println(a)
}
func (t T) Method1() {
//...
}
func Func1() { // exported function Func1
//...
}
Go 程序的执行(程序启动)顺序如下:
1.按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程:
2.如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次。
3.然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数。
4.在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序。
类型转换
用法如下valueOfTypeB = typeB(valueOfTypeA)
常量
go中常量定义有两个方式
1.显式类型定义: const b string = “abc”
2.隐式类型定义: const b = “abc”
常量的值必须是能够在编译时就能够确定的;你可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。
数字型的常量是没有大小和符号的,并且可以使用任何精度而不会导致溢出:
const Ln2 = 0.693147180559945309417232121458\
176568075500134360255254120680009
const Log2E = 1/Ln2 // this is a precise reciprocal
const Billion = 1e9 // float constant
const hardEight = (1 << 100) >> 97
根据上面的例子我们可以看到,反斜杠 \ 可以在常量表达式中作为多行的连接符使用。
常量也允许使用并行赋值的形式:
const beef, two, c = "eat", 2, "veg"
const Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 1, 2, 3, 4, 5, 6
const (
Monday, Tuesday, Wednesday = 1, 2, 3
Thursday, Friday, Saturday = 4, 5, 6
)
常量用于枚举
const (
Unknown = 0
Female = 1
Male = 2
)
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:
const (
a = iota
b
c
)
变量
fmt.print多个值可以用逗号隔开
fmt.Print("Hello:", 23)
变量并行赋值:a, b, c = 5, 7, "abc"
注意你先要声明一下,如果没有声明,自己使用:=
进行赋值
数据类型范围
go复数
complex64 (32 位实数和虚数)
complex128 (64 位实数和虚数)
复数使用 re+imI 来表示,其中 re 代表实数部分,im 代表虚数部分,I 代表根号负 1。
我们这里简单参考一下
var c1 complex64 = 5 + 10i
fmt.Printf("The value is: %v", c1)
// 输出: 5 + 10i
这里平时用的不多,只是简单介绍一下
类型别名
相当于自己新建一个变量
package main
import "fmt"
type TZ int
func main() {
var a, b TZ = 3, 4
c := a + b
fmt.Printf("c has the value: %d", c) // 输出:c has the value: 7
}
使用ASCII来表示字符var ch byte = 65 或 var ch byte = \'\x41\'
使用Unicode来表示编码
var ch int = \'\u0041\'
var ch2 int = \'\u03B2\'
var ch3 int = \'\U00101234\'
fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer
fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character
fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes
fmt.Printf("%U - %U - %U", ch, ch2, ch3) // UTF-8 code point