您的位置:首页 > 编程语言 > Go语言

GO语言学习(二)

2016-06-13 00:00 239 查看
摘要: GO GO GO

4. go程序的基本要素和结构
a.包的概念、导入与可见性 :包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。
注意:非main包,编译产生 .a文件。所有的包文件都应该小写。

b.类型:基本类型:int,float,bool,string.结构化类型:struct,array,slice,map,channel;描述行为:interface.结构化的类型没有真正的值,它使用nil作为默认值。
(在Object-C中是nil,在java中是null,在c和c++中是NULL或0).在go中不存在类型继承。go是静态类型语言。
go程序的一般结构:
.在完成包的import之后,开始对常量,变量和类型的定义或声明。
.如果存在init函数,则对该函数进行定义(这是一个特殊的函数,每个含有该函数的包都会首先执行这个函数)。
.如果当前包是main包,则定义main函数。
.然后定义其余的函数,首先是类型的方法,接着是按照main函数中先后调用的顺序来定义相关的函数,如果有很多函数,可以按照字母的顺序来排序。
example:goTemplate.go
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() {
//..
}

function Func1() { //exported function Func1
//..

}

Go程序的执行(程序启动)顺序:
1.导入所有main包引用的packages,然后再每个包中执行如下的流程:
2.如果该包导入了其他的包,则从第一步开始递归执行,但是每个包只会被导入一次。
3.然后以相反的顺序在每个包中初始化常量和变量,如果该包含有init函数,则调用改函数。
4.在完成这一切之后,main也执行同样的过程,最后main函数开始执行程序。
(个人理解:递归导入了所有的包,把包的需要东西放在程序正确的位置后,main开始执行程序)

类型的转换:(go不存在隐式的转换)
valueOfTypeB = typeB(valueOfTypeA);
example: a :=5.0
b := int(a)
注意:超过精度,转换会失败。

5.常量 : const 定义常量
a. const hardEight = (1 << 100) >> 97
b.常量可以是任何大的精度,不会溢出。但是精度太小,可能导致编译错误。
c.赋值形式定义常量 :const beef, two, c = "eat", 2, "veg"
d.常量作为枚举:
const (
Unknown = 0
Female = 1
Male = 2
)
e.第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;每次iota遇到const就会重新置零。
6.变量: var 定义变量
a.一般变量的类型放在变量名后面。
b.函数体内声明局部变量时,应使用简短声明语法 := var a:=1
c.全局内声明变量:
var (
HOME = os.Getenv("HOME")
USER = os.Getenv("USER")
GOROOT = os.Getenv("GOROOT")
)
d.example :
package main

import (
"fmt"
"os"
)

func main() {
var goos string = os.Getenv("GOOS")

fmt.Printf("The operation system is : %s\n",goos)

path := os.Getenv("PATH")
fmt.Printf("Path is %s\n",path)
}

7.值类型和引用类型: 简单说变量存在栈中,大量数据存在堆中。
a.init 函数:变量除了可以在全局声明中初始化,也可以在init函数中初始化。这是一类非常特殊的函数,它不能够被认为调用,而是在每个包完成初始化后自动执行,并且执行的优先级比main函数高。
b.每一个源文件都可以包含而且只包含一个init函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。
c.一个可能的用途是在程序执行之前对数据进行检验或修复,以保证程序状态的正确性。
init.go
package tans
import "math"
var Pi float64

function init() {
Pi = 4*math.Atan(1) //init() function computes pi
}
注意:相同的变量不能再重复定义。error:undefined variable.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: