一. 包的基本概念
包是go语言中不可缺少部分,在每个go源码的第一行进行定义,定义方式是:package "包名",并且该名称是作为调用该包时候所使用的名称。
- 包的概念总结:
- 每个 Go 文件都属于且仅会属于一个包。一个包可以由许多以 .go 为扩展名的源文件组成,因此文件名和包名可能不同,为了规范,功能相似或者属于相同性质的源码归集到相同的包名中。
- 每个应用程序都必须有且只有一个包名称为main,他是该程序的入口,执行时候会寻找包名为main的代码
- 包与包之间可以被相互调用,主要为了减少代码重复性
- 包一旦被引入就需要被使用,除非引入的时候忽略它(前面加_表示忽略它,只是用它来初始化),如果引入了包但在代码中没用使用,运行时候会报错,当然这些东西用了IDE自然会有提示。
2、包的引入
import "net/http",import "strings";
或者(推荐用下面这种方式)
import (
"fmt"
"os"
)
go语言中,引入包的路径是根据GOPATH/src 这个环境变量作为相对路径进行引入的,如果GOPATH存在多个,那么go将逐一寻找路径,直到找到,若GOPATH/src未找到则会编译出错。
三,变量
1.go语言中,所有变量都必须先声明在使用,下面是声明变量和赋值方法:
- 先声明后赋值: var <变量名称> <变量类型> 赋值:变量的赋值格式: <变量名称> = <表达式>
- 声明的同时赋值:var <变量名称> <变量类型> = <表达式> (简写为 变量名称 := 表达式)
package main
import "fmt"
func main() {
var ip string /* 声明一个变量名为a,类型为字符串的变量 */
ip = "127.0.0.1" /* 对a变量赋值*/
var age int = 22 /* 声明并赋值变量 */
fmt.Println(a,age)
e, f := 4, "hello" /* 简写,编译器会自动类型推断 */
}
2.变量名命名原则:
首字符可以是任意的Unicode字符或者下划线
剩余字符可以是Unicode字符、下划线、数字
不能作为用以下关键字作为变量名
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
3.可见性
可见性即对包外可见,当其他包调用当前包的变量时候是否允许可见(可访问)。
变量开头字符大写,表示可见
变量开头字母非大写,则表示私有,不可见
4.变量的作用域
函数内定义的变量称为局部变量,其作用域在函数内
函数外定义的变量称为全局变量,作用于整个包,并且该变量首字母大写,则对其他包可见
四,常量
1.常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
定义常量语法:
const 名称 类型 = value
多个常量定义语法:
const (
a = 0 //类型自动推倒
b = 1 c = 2 )
- iota解释:
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。
iota 可以被用作枚举值:
const (
a = iota
b = iota
c = iota
)
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:
const (
a = iota
b
c
)
用法:
import "fmt"
func main() { const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}