基本结构,函数


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

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录