go语言学习之包和变量详解

前言

本文主要介绍了关于go语言之包和变量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、包的概念

包是go语言中不可缺少部分,在每个go源码的第一行进行定义,定义方式是:package "包名",并且该名称是作为调用该包时候所使用的名称。

包的概念总结:

  • 每个 Go 文件都属于且仅属于一个包。一个包可以由许多以 .go 为扩展名的源文件组成,因此文件名和包名可能不同,为了规范,功能相似或者属于相同性质的源码归集到相同的包名中。
  • 每个应用程序都必须有且只有一个包名称为main,他是该程序的入口,执行时候会寻找包名为main的代码
  • 包与包之间可以被相互调用,主要为了减少代码重复性
  • 包一旦被引入就需要被使用,除非引入的时候忽略它(前面加_表示忽略它,只是用它来初始化),如果引入了包,而在代码中没用使用,运行时候会报错

二、包的引入

1.包引入的方法

方法一:

import "fmt"
import "os"

方法二:

import "fmt"; import "os"

方法三(推荐!)

import (
 "fmt"
 "os"
)

2.引入其他包

go语言中,引入包的路径是根据GOPATH/src 这个环境变量作为相对路径进行引入的,如果GOPATH存在多个,那么go将逐一寻找路径,直到找到,若GOPATH/src未找到则编译出错。

示例:

我的GOPATH为:C:\Users\17647\Desktop\go_work\src

首先建立包文件1:C:\Users\17647\Desktop\go_work\src\day02\eg1\pkg.go(相对于GOPATH/src的路径为day02\eg1\pkg.go)

内容如下:

package add 

import "fmt"

func Sum(a int,b int) {
 var c int
 c = a + b
 fmt.Println("res",c) 

}

在main进行引入如下:

package main

import (
 "fmt"
 "day02/eg1" /* 引入包 */
)

func main() {
 add.Sum(2,3) /* 调用包 */
 fmt.Println("Hello, World!")
}

图示:

二、变量

1.单个变量的声明

go语言中,所有变量都必须先声明在使用,下面是声明变量和赋值方法:

  • 先声明后赋值: var <变量名称> <变量类型>         赋值:变量的赋值格式: <变量名称> = <表达式>
  • 声明的同时赋值:var <变量名称> <变量类型> = <表达式>   (简写为 变量名称 :=  表达式)

示例:

package main

import "fmt"
func main() {

 var a string /* 声明一个变量名为a,类型为字符串的变量 */
 a = "wd" /* 对a变量赋值*/
 var age int = 22 /* 声明并赋值变量 */
 fmt.Println(a,age)
}

2.多个变量声明

  • 先声明后赋值:var <变量1>,<变量2>,<变量3>  <变量类型>     赋值 : <变量1>,<变量2> =  值1,值2
  • 声明同时赋值 :var  <变量1>,<变量2> = 值1,值2   可简写为: <变量1>,<变量2> = 值1,值2
  • 多个变量还可以使用var()声明

示例:

package main

import "fmt"
func main() {

 var a,b int
 a,b = 1,2
 var c,d = 3,"wd" /* 类型自动推断 */
 e, f := 4, "hello" /* 简写 */
 fmt.Println(a,b,c,d,e,f)
}

使用var()声明

package main

import "fmt"

func main() {
 var (
 a int //默认值为0
 b string // 默认值为空字符串("")
 c = 3
 )
 fmt.Println(a,b,c)
}

3.变量名

命名原则:

  • 首字符可以是任意的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

4.可见性

可见性即对包外可见,当其他包调用当前包的变量时候是否允许可见(可访问)。

  • 变量开头字符大写,表示可见
  • 变量开头字母非大写,则表示私有,不可见

 5.变量的作用域

  • 函数内定义的变量称为局部变量,其作用域在函数内
  • 函数外定义的变量称为全局变量,作用于整个包,并且该变量首字母大写,则对其他包可见。

三、常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

定义常量语法:

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
)

用法:

package main

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)
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 举例讲解Go语言中函数的闭包使用

    和变量的声明不同,Go语言不能在函数里声明另外一个函数.所以在Go的源文件里,函数声明都是出现在最外层的. "声明"就是把一种类型的变量和一个名字联系起来. Go里有函数类型的变量,这样,虽然不能在一个函数里直接声明另一个函数,但是可以在一个函数中声明一个函数类型的变量,此时的函数称为闭包(closure). 例: 复制代码 代码如下: packagemain   import"fmt"   funcmain(){     add:=func(baseint)fun

  • 详解Golang编程中的常量与变量

    Go语言常量 常量是指该程序可能无法在其执行期间改变的固定值.这些固定值也被称为文字. 常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型.还有枚举常量. 常量是一样,只是它们的值不能自己定义后进行修改常规变量处理. 整型常量 一个整数文字可以是十进制,八进制,或十六进制常数.前缀指定基或基数:0x或0X的十六进制,0表示八进制,并没有为十进制. 一个整数文字也可以有一个后缀为U和L的组合,分别为无符号和长整型.后缀可以是大写或小写,并且可以以任意顺序. 这里是整数常

  • Go语言声明一个多行字符串的变量

    Go如何声明一个多行字符串的变量?使用 ` 来包含即可. package main import ( "fmt" ) func main() { str := `hello world v2.0` fmt.Println(str) } Demo:http://play.golang.org/p/BOL8_SwQ0D 以上所述就是本文的全部内容了,希望大家能够喜欢.

  • GO语io包的常用接口

    本文实例分析了GO语io包的常用接口.分享给大家供大家参考.具体分析如下: 我没有 C/C++ 基础,没有接口的概念,且从 Python 投奔而来,Python 的极简主义(一个结果往往只提供一个方法),让我在 Golang 中非常迷糊,特别是文件的读写操作,因为 Go 的文件读写操作有很多的方法,让我不知道怎么选择.直到我学习了 interface 的概念,然后由看了 package io 后才慢慢理解,也渐渐的喜欢上了 Golang 的灵活性.以我的经验来说,接口是一个很重要的知识点,是一系

  • GO语言获取系统环境变量的方法

    本文实例讲述了GO语言获取系统环境变量的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (  "fmt"  "os"  //我们要用到os包中的env ) func main() {  //os.Getenv检索环境变量并返回值,如果变量是不存在的,这将是空的.  HOME:= os.Getenv("HOME")  fmt.Println(HOME)  fmt.Printf(os.Ge

  • Go语言基础知识总结(语法、变量、数值类型、表达式、控制结构等)

    一.语法结构 golang源码采用UTF-8编码.空格包括:空白,tab,换行,回车. - 标识符由字母和数字组成(外加'_'),字母和数字都是Unicode编码. - 注释: 复制代码 代码如下: /* This is a comment; no nesting */ // So is this. 二.字面值(literals)类似C语言中的字面值,但数值不需要符号以及大小标志: 复制代码 代码如下: 23 0x0FF 1.234e7类似C中的字符串,但字符串是Unicode/UTF-8编码的

  • go语言里包的用法实例

    本文实例讲述了go语言里包的用法.分享给大家供大家参考.具体分析如下: 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 这个程序使用并导入了包 "fmt" 和 "math". 按照惯例,包名与导入路径的最后一个目录一致. 复制代码 代码如下: package main import (  "fmt"  "math" ) func main() {  fmt.Println("Happy",

  • Go语言中的变量声明和赋值

    1.变量声明和赋值语法 Go语言中的变量声明使用关键字var,例如 复制代码 代码如下: var name string //声明变量 name = "tom" //给变量赋值 这边var是定义变量的关键字,name是变量名称,string是变量类型,=是赋值符号,tom是值.上面的程序分两步,第一步声明变量,第二步给变量赋值.也可以将两步合到一起. 复制代码 代码如下: var name string = "tom" 如果在声明时同时赋值,可以省略变量类型,Go语

  • Go语言的os包中常用函数初步归纳

    (1)os.Getwd函数原型是func Getwd() (pwd string, err error) 返回的是路径的字符串和一个err信息,为什么先开这个呢?因为我看os的包的时候第一个是Chkdir这个包,但是你不知道当前目录怎么知道改变目录了呢?所以先说Getwd() 函数demo 复制代码 代码如下: import (  "fmt"  "os" ) func main() {  dir, _ := os.Getwd()  fmt.Println("

  • 深入理解Go语言中的闭包

    闭包 在函数编程中经常用到闭包,闭包是什?它是怎么产生的及用来解决什么问题呢?先给出闭包的字面定义:闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境).这个从字面上很难理解,特别对于一直使用命令式语言进行编程的程序员们. Go语言中的闭包 先看一个demo: func f(i int) func() int { return func() int { i++ return i } } 函数f返回了一个函数,返回的这个函数就是一个闭包.这个函数中本身是没有定义变量i的,而是引用

随机推荐