美文网首页
Golang语言学习

Golang语言学习

作者: Dozing | 来源:发表于2019-11-05 00:46 被阅读0次

main函数类似是一个入口

  1. package是最基本的分发单位和工程管理中依赖关系的体现
  2. 每个Go语言源代码文件开头都拥有一个package声明,表示源代码文件所属代码包
  3. 要生成Go语言可执行程序,必须要有mainpackage包,且必须在该包下有main()函数
  4. 同一个路径下只能存在一个package,一个package可以拆分成多个源文件组成

Go工程中共有三个文件夹,分别是:srcpkgbin
src:存放Go源码文件
pkg:存放编译后的包文件
bin:存放编译后的可执行文件src目录需要手动创建,一般pkgbin目录不需要创建,编译时会自动创建。
由于当前章节视频中没有真正的执行install,所以代码直接放在工程目录下build暂时还没有报错。如果执行install的话就会报错了。

Go语言基础语言--import

  • import语句可以导入源代码文件所依赖的package包;

  • 不得导入源代码文件中没有用到的package,否则Go语言编译会报编译错误

主要有两种格式

第一种:

  import "package1"
  import "package2"
  import "package3"

第二种:

import  (
                "package1"
                "package2"
                "package3"
)

Go语言基础语法---import原理

  • 如果一个main导入其他包,包将被顺序导入
  • 如果导入的包中依赖其它包(package B),会首先导入B包,然后初始化B包中常量和变量,最后如果B包中有init,会自动执行init()
  • 所有包导入完成后才会对main中常量和变量进行初始化,然后执行main中的init函数(如果存在),最后执行main函数
  • 如果一个包被导入多次则该包只会被导入一次
gopackage.png

Go语言 基础语法---import别名," . "," _ "

  • 别名操作的含义:将导入的包命名为另一个容易记忆的别名

    package main
    import (
    imooc "fmt"  //package 别名命名方法
    )
    func main(){
        imooc.Print("Hello World!")
    }
    
  • .操作的含义是:点.标识的包导入后,调用该包中函数时可以省略前缀包名 ---不建议用,容易混淆

    package main
    import(
           . "fmt" //点`.`
    )
    func main(){
        Print(a:"hello imooc") //调用该包中函数时可以省略前缀包名fmt
    }
    
  • 下划线_操作的含义是:导入该包,但不导入整个包,而是执行该包中的init函数,因此无法通过包名来调用包中的其他函数.使用下划线_操作往往是为了注册包里的引擎,让外部可以方便地使用,

GO语言--数据类型

  • 数据类型,字符串类型和布尔型
  • 派生类型
  • 类型零值和类型别名
  • 类型所占存储大小

一个字节是8位

  1. 整型,浮点型,复数,字符串和布尔型
  • 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存

  • 布尔型的值只可以是常量true或者false.一个简单的例子:var a bool = true

  • 字符串类型string,编码统一为UTF-8

  1. 派生类型
  • 指针类型(Pointer)
  • 数组类型
  • 结构化类型(struct)
  • Channel类型(chan)
  • 函数类型(func)
  • 切片类型(slice)
  • 接口类型(interface)
  • May类型(map)
  1. 类型零值和类型别名
  • 类型零值不是空值,而是某个变量被声明后的默认值,一般情况下,值类型的默认值为0,布尔型默认值为false,string默认值为空字符串
  • 可以对类型设置别名
package main
type imooc int32
funct main(){
    var i imooc //imooc就是int32的别名
}
Golangbyte.png

Go 语言 变量与常量

(一)变量
  • 变量声明,初始化与赋值
  • 变量可见性guiz
  • 常量,常量声明和iota的使用
  1. 单个变量声明和赋值

    (1). 变量的声明格式:var <变量名称> [变量类型]

    (2). 变量的赋值格式:<变量名称> = <值,表达式,函数等>

    (3). 声明和赋值同时进行:var <变量名称> [变量类型] = <值,表达式,函数等>

    (4). 分组声明格式:

    var (
        i int
        j float32
        name string
    ) //分组声明格式也可以同时赋值
    
  2. 同一行声明多个变量和赋值:var a,b,c int = 1,2,3 或者 a,b := 1,2

  3. 全局变量的声明必须使用var关键词,局部变量则可以省略

  4. 特殊变量下划线_ ----//作用把这个值相当于一个回收站,程序运行是不再使用

  5. Go语言中不存在隐式转换,类型转换必须是显式的

  6. 类型转换只能发生在两种兼容类型之间

  7. 类型转换格式:<变量名称> [:] = <目标类型>(<需要转换的变量>)

  8. 变量的可见性规则

    (1). 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量

    (2). 小写字母开头的就是不可导出的,是私有变量

(二)常量
  • 常量定义形式和变量类型范围
  • 特殊常量iota的使用

(1) 常量定义形式和变量类型范围

  • 常量定义从形式上可分为显示隐式:
    显式:const identifier [type] = value
    隐式:const identifier = value(通常叫无类型常量)

  • 常量可以使用内置表达式定义,例如:len(),unsafe.Sizeof()

  • 常量范围目前只支持布尔型数字型(整数型,浮点型和复数)字符串类型

代码示例:

//例子1 常量可以分组赋值
const(
         cat string = "cat"
         dog = "dog"
)

//例子2 
const apple, banana string = "apple","banana" //显式单行定义多个常量
const apple, banana  = "apple","banana" //隐式单行定义多个常量

//例子3 
const a string = "apple"
const b = len(a) //表达式定义常量。只能为内置函数,自定义函数不能定义

iota只能在常量定义中使用,不能在函数体中使用

(2) 特殊常量iota的使用

  • iota在const关键字出现时将被重置为0;
  • const中每新增一行常量声明将iota计数一次
  • iota常见使用方法:
    1. 跳值使用法
    2. 插队使用法
    3. 表达式隐式使用法
    4. 单行使用法

iota只能在常量定义中使用,不能在函数体中使用

//1. 跳值使用法
   const (
                a = iota
                b = iota
                - 
                c = iota     //c 的值为3
                )
                
//2.插队使用法
       const (
                a = iota
                b = 3.14
                c = iota     //c的值为2
                )
    
//3.表达式隐式使用法
           const (
                a = iota * 2    //a的值为0
                b                   //b的值为2
                c                   //c的值为4
                )
    
               const (
                a = iota * 2    //a的值为0
                b = iota * 3    //b的值为3
                c                   //c的值为6
                d                   //c的值为9
                )
                //隐式向上继承非空表达式
    
//4. 单行使用法
    
    const (
                a,b = iota ,iota + 3  //a的值为0,b的值为3 同一行iota不会计数加1
                c,d                                //c的值为1,的值为4
                f = iota                        //f的值为2
                )
   

GO语言运算符

  • 算术运算符


    Image 1.png
  • 关系运算符


    Image 2.png
  • 逻辑运算符


    Image 3.png
  • 按位运算符


    Image 4.png
  • 赋值运算符


    Image 5.png

GO控制语句:

  1. 条件语句if if else 嵌套if else if
  2. 选择语句switch select
  3. 循环语句for
  4. 控制语句中使用
2. 选择语句switch select
  • switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上直下逐一测试,知道匹配为止
  • switch语句执行的过程从上至下
  • switch语句还可以被用于type-switch来判断某个interface变量中实际存储的变量类型


    Image 1.png

示例代码:

package main
import "fmt"
func main() {
switch 3 {
case 1:
         fmt.Print(a:"判断为1")
case 2:
         fmt.Print(a:"判断为2")
default:
         fmt.Print(a:"以上都不满足!")
}
}
//判断类型
package main
import "fmt"
func main() {
   var a interface{}
   a = 32
   switch a.(type) {
   case int:
           fmt.Print(a:"类型为整形")
case string:
         fmt.Print(a:"类型为字符串类型")
default:
         fmt.Print(a:"以上都不满足")
}
}
3. 循环语句for
Image 5.png

示例代码:

package main

import (
   "fmt"
   "time"
)

func main() {
for i:=1;i<=10;i++{
    fmt.Print(a:"Keep")
    fmt.Print(i)
    fmt.Print(a:"\n")
    fmt.Sleep(1*time.Second)
}
}
package main

import (
    "fmt"
    "time"
)

func main() {
for i:=1;i<=10;i++{
     fmt.Print(a:"Keep")
     fmt.Print(i)
     fmt.Print(a:"\n")
     fmt.Sleep(1*time.Second)
}
}

package main

import (
    "fmt"
    "time"
)

func main() {

for {
        fmt.Print(a:"Keep")
}//无限循环

for i:=1;i<=10;i++ {
        fmt.Print(a:"Keep")
        fmt.Print(i)
        fmt.Print(a:"\n")
        fmt.Print(1*time.Second)
}

a := []string{"banana","apple","pear"}
for _,value := range a {
     fmt.Print(a:"value的值为:")
     fmt.Print(value)
     fmt.Print(a:"\n")
}
}
4. 控制语句中使用goto break continue
Image 8.png
package main

import (
    "fmt"
    "time"
)

func main() {
for {
       fmt.Print(a:"Keep")
       time.Sleep(1*time.Second)
       break
 }
}
package main

import (
    "fmt"
    "time"
)

func main() {

for i:= 1,i<=3;i++{
for  i:=1;j<=2;j++ {
       fmt.Print(a:"Keep")
       time.Sleep(1*time.Second)
       break  //break只终止当前循环
 }
 }
}
package main

import (
   "fmt"
   )
   
func main() {
            for i:=1;i<=3;i++ {
                    if i >= 2 {
                    fmt.Print(a:"Keep")
                    fmt.Print(i)
                    fmt.Print(a:"\n")
                    continue
            }
            fmt.Print(a:"Keep on\n")
  }
}
5. GOTO 语句
package main

import "fmt"

func main() {
          goto One
          fmt.Print(a:"中间代码块")
          One:
                   fmt.Print(a:"这里是代码块一\n")

}
package main

import  (
                   "fmt"
                   "time"
                  )

func main() {
           One:
                     fmt.Print(a:"这里是代码块一\n")
                     time.Sleep(1*time.Second)
             goto One  //无限循环
}       

相关文章

网友评论

      本文标题:Golang语言学习

      本文链接:https://www.haomeiwen.com/subject/gewjbctx.html