zoukankan      html  css  js  c++  java
  • GO系列 | 5分钟入门GO【译】

    什么是Google Go?

    Google Go是由Robert Griesmer,Rob Pike和Ken Thompson在Google设计的一种开源编程语言。 Go在语法上类似于C语言; 除了内存安全性,垃圾回收,结构化类型和CSP样式并发之外。 它具有丰富的标准库。 它最初于2007年开发,于2009年11月发布。最近于2019年4月11日进行了更新。

    Google Go也被称为Golang。 Golang是汇编语言(GC)和C ++`(gccgo)的实现。

    先决条件

    对于Go编程语言,应该熟悉C编程。 如果您擅长C语言,那么您很容易理解Go编程的概念。 我试图简化本教程,并从头开始。


    Go编程的特点

    它的一些基本特性如下:

    • 快速编译
    • 内置并发支持
    • 它支持接口和类型嵌入
    • 它是现代快速并且强壮的。

    为了使其简洁明了,特意排除了其某些功能。

    Go的一些被排除的特性是-

    • 类型继承支持
    • 方法或操作符重载
    • 指针的算术
    • 断言的支持
    • 泛型编程支持

    GO程序结构

    Go程序的基本结构包含以下部分:

    • 声明包
    • 导入包
    • 变量
    • 语句和表达式
    • 函数
    • 注释

    Go安装入门指南

    Go编程可以安装在Windows,Linux,Mac等不同的操作系统上。要安装Go语言,请访问其官方网站golang.org。 选择所需的操作系统包,例如Windows 7,选择适用于window7的设置,然后按照安装过程进行操作。

    设置环境变量(对于Windows)

    您可以在“系统”控制面板的“高级”选项卡上找到环境变量的设置。

    检查Go版本

    您可以使用go version命令检查Go语言的版本。

    第一个Go程序

    我们可以在任何所需的目录中的任何基本编辑器上编写Go代码,并将其保存为扩展名.go

    package main
     
    import ("fmt")
     
    func main() {
     
                fmt.Println("Hello World! This is my first Go program
    ")
     
    }
    

    保存扩展名为.go,我这里保存为first.go

    执行

    打开CMD然后按执行

    go run First.go
    

    输出

    Hello world! This is my first Go program
    

    如下所示

    GO的包、导入操作和可见性

    为了便于维护程序我们将软件包进行分类。 Go程序的每个文件都属于某些程序包。 每个Go程序必须具有“main”程序包。

    包命名应使用小写字母。 如果更改并重新编译了程序包,则也必须重新编译属于该软程序包的所有客户端程序。

    导入操作

    Import用于从库中导入任何程序包。 Go程序通过import关键字链接到其他程序包。

    我们可以通过一个语句导入多个程序包,例如:

    import “fmt”
    
    import “os”
    

    或者我们可以写成

    import “fmt”;
    import”os”;
    

    我们还可以使用以下方式进行包导入操作

    import(
    “fmt”
    “os”)
    
    //或者
    import(“fmt;”os”)
    

    可见性

    标识符可以是变量,函数,类型或结构(struct)字段或常量。 标识符可以声明为小写或大写。

    如果标识符以小写字母声明,则它将在包中可见。 如果以大写形式声明,那么它将在称为export的包的内部或外部可见。 点(.)运算符用于访问标识符: pack.Date(此处为pack)是包名称,Date是标识符。


    Google Go数据类型

    数据类型表示存储在变量中的值的类型,函数返回的值的类型,等等。

    Go-中有三种基本数据类型

    • 数值类型
    • 字符串类型
    • 布尔型

    数值类型

    它代表各种数值,例如整数,浮点数和复数值。

    一些数值类型:

    • In8(8位有符号整数)
    • Int16(16位有符号整数)
    • Int32(32位有符号整数)
    • Int64(64位有符号整数)
    • Uint8(8位无符号整数)
    • Uint16(16位无符号整数)
    • Uint32(32位无符号整数)
    • Uint64(64位无符号整数)
    • Float32(32位浮点数)
    • Float64(64位浮点数)
    • Complex64(具有32个实部和虚部)
    • Complex128(具有浮点数的32个实部和虚部)

    字符(String)类型

    字符串表示字符序列(字节)。 可以在字符串中执行各种操作,例如连接,提取子字符串等。

    布尔类型

    它有两个值true或者false

    变量

    变量是指用于存储某些值的内存地址。类型参数表示可以存储在内存中的值类型。

    语法

    Var <变量名> <类型>
    

    声明变量后,你就可以给变量分配一个。 您也可以在声明变量时给出初始值

    Var <变量名> <类型> = <值>
    

    也可以在单个语句中声明多个变量

    Var <变量1>, <变量2> = <值1>, <值2>
    

    一个便于理解变量的GO代码:

    package main
     
    import “fmt”
     
    func main() {
     
    var a int      //variable declaration
     
      	a=3 //assigning value 3 in a
     
        fmt.Println("a:", a) //prints 3
     
     //declaring a integer variable b with value 20
     
        var b int
     
    	b=20
     
        fmt.Println("b:", b)
     
       
     
        //declaring a variable c with value 50
     
        var c=50
     
        fmt.Println("c:", c)
     
       
     
        //Multiple variables are assigned in single line- p with an integer and q with a string
     
        var p, q = 100,"hello"
     
        fmt.Println("p and q:", p,q)
     
    }
    

    输出

    a: 3
     
    b: 20
     
    c: 50
     
    p and q: 100 hello
    

    常量

    常量通过使用关键字“ const”来声明。 如果分配了常量,则不能更改其值。

    Sample:

    package main
     
    import ("fmt")
     
    func main() {
     
                const x =50
     
                fmt.Println(x)
     
                x = 20
     
                fmt.Println(x)
     
    }
    

    输出

    .constant.go:7:4: cannot assign to b
    

    循环

    循环用于根据给定条件重复执行该代码块。 大多数编程语言都支持三种循环类型:for,while和dowhile

    注意: Go仅支持循环。

    语法

    for initialization_expression; evaluation_expression; iteration_expression{s
     
    // statements
     
    }
    

    首先执行initialization_expression,然后计算evaluation_expression。如果为真,则执行块代码。执行itereation_expression id,然后循环再次开始。这个过程将继续下去,直到evaluation_expression变为false

    循环的代码示例

    package main
     
    import "fmt"
     
     
     
    func main() { 
     
    var i int
     
    for i = 0; i <= 7; i++ {
     
    fmt.Println(i)
     
        }
     
    }
    

    输出

    0
     
    1
     
    2
     
    3
     
    4
     
    5
     
    6
     
    7
    

    条件语句

    if-else 语句

    是一个条件语句

    语法

    if condition
     
    { // statement1
     
    }
     
    else
     
    {// statement2
     
    }
    

    验证输入的数字是正数还是负数

    package main
     
    import "fmt"
     
     
     
    func main() { 
     
        int i;
     
        if i< 0 {
     
            //Executes if i< 0
     
            fmt.Println("i is negative")
     
        }
     
    else{
     
    fmt.println(“I is positive)
     
    }
    

    Switch语句

    Swtich也是条件语句。 Switch语句比较条件并评估结果。 找到匹配项后,将执行与该条件关联的语句。 我们还可以添加一个默认条件来进行切换,如果找不到其他匹配项,将执行该默认语句。

    语法

    switch expression {
     
        case 1:
     
            statement_1
     
        case 2:
     
            statement_2
     
        case n:
     
            statement_n
     
        default:
     
            statement_default
     
        }
    

    Switch示例代码

    package main
     
    import "fmt"
     
    func main() { 
     
        x,y := 10,5
     
        switch x+y {
     
        case 1:
     
            fmt.Println("Sum is 15")
     
        case 2:
     
            fmt.Println("Sum is 20")
     
        case 3:
     
            fmt.Println("Sum is 30")
     
        default:
     
            fmt.Println("Printing default")
     
        }
    }
    

    输出

    sum is 15
    

    Goto语句

    Goto是一个跳转语句。 它用于将控件转移到程序的其他部分。 每个Goto语句都有一个标签,我们使用该标签来转移程序的控制权。

    示例

    Package main
     
    Import (“fmt”)
     
    Func main() {
     
    Var input int
     
    Loop: 
     
       fmt.Print("You  are a child ") 
     
       fmt.Print("Enter  age ") 
     
       fmt.Scanln(&input) 
     
       if (input <= 18) { 
     
          goto Loop 
     
       } else { 
     
          fmt.Print("you are a man") 
     
       } 
     
    }
    

    输出

    You are a child
     
    Enter your age 12
     
    You are a child
     
    Enter your age 19
     
    You are a man
    

    break语句

    break语句可以在for循环中用于计数器,条件等。它也可以在switch语句中使用。 break语句用于中断发生它的最里面运行的语句。

    语法

    break;
    

    bread语句示例

    package main 
     
    import "fmt" 
     
    func main() { 
     
       var  x int = 1 
     
       for x< 10{ 
     
          fmt.Print("Value of x is ",x,"
    ") 
     
          x++; 
     
          if x > 5{ 
     
             /* Terminate the loop using break statement */  
     
             break; 
     
          } 
     
       } 
     
    }
    

    输出

    Value of x is 1
     
    Value of x is 2
     
    Value of x is 3
     
    Value of x is 4
     
    Value of x is 5
    

    数组

    数组是具有相同数据类型的元素的集合。 Array表示固定大小,并命名为元素序列。 数组不能具有两个不同数据类型的元素。 一旦定义,我们就无法更改数组的大小。

    语法

    var arrayname [size] type
    

    每个数据元素都可以按如下赋值

    arrayname [index]= value
    

    数组坐标从 0 到 1

    我们可以在声明期间赋值给数组元素

    arrayname:=[size] type { value_0,value_1,value_2,…….,value_n}
    

    GO数组示例

    package main
     
    import "fmt"
     
    func main() { 
     
        var numbers [3] string // string declaration of array size 3
     
        numbers[0] = "One"
     
        numbers[1] = "Two"
     
        numbers[2] = "Three"
     
        fmt.Println(numbers[1]) //prints Two
     
        fmt.Println(len(numbers)) //prints 3
     
        fmt.Println(numbers) // prints [One Two Three]
     
        directions := [...] int {1,2,3,4,5} // creating an integer array and the size of the array is defined by the number of elements
     
        fmt.Println(directions) //prints [1 2 3 4 5]
     
        fmt.Println(len(directions)) //prints 5
     
    }
    

    输出

    Two
     
    3
     
    [One two three]
     
    [1 2 3 4 5]
     
    5
    

    Slice切片

    切片是数组的一部分,或者是其指向的基础数组的局部视图。 您可以像访问数组一样访问切片名称和索引号。 我们可以更改切片的大小,但不能更改数组的大小。 切片的内容实际上是数组的指针。 如果我们更改slice中的元素,那么它也会影响数组的内容。可以把Slice理解成Java的动态数组ArrayList

    语法

    Var slice_name [] type= array_name [start: end]
    

    小结

    好了,到这里相信大家已经了解到了GO的一些特性和基本用法,我们初学一门语言不要死磕它的所有内容,主要关注它的特性,然后再跟我们学过的语言类比学习,程序设计的思想实际是跟我们过去学过的语言大同小异,下一章我们就可以直接进入程序实战演练,去熟悉GO的高级用法,当遇到不懂的东西,我们再去查找相关资料,这样子会吸收得更快。

  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/evan-liang/p/12520214.html
Copyright © 2011-2022 走看看