• Go 其一 基础内容


      艺多不压身,学习一下最近蛮火的Go语言,整理一下笔记。相关Code和笔记也放到了Git上,传送门

    1.从Hello world开始

    1.  GOPATH 1.8版本默认在%USERPROFILE%/go
    2.  命令build命令 go build xxx.go, 运行命令go run xxx.go
    3.  Go默认情况下会使用静态链接, 编译好的文件可以直接运行
    4.  应用程序入口必须是main包, package main 必须是main方法:func main()  文件名不一定是main.go
    5.  Go中main函数不支持任何返回值,通过os.Exit来返回状态 
    6. main函数不支持传入参数,在程序中直接通过os.Args获取命令行参数

    2.测试程序,变量,常量

    1.  源码文件必须以_test结尾: xxx_test.go
    2. 测试方法名以Test开头: func TestXXX(t *testing.T) {...}
    3. 运行命令 go test -v .first_test.go
    4.  Go支持多种复制关系以及一定的类型推断,但在2.0版本后将会不推荐甚至禁用一部分写法,目的是code的风格统一
    5.  同一个文件夹下不同go文件的package要相同,否则会报错 can't load package: package...
    6.  在一个赋值语句中可以对多个变量进行同时赋值 例如: a,b=b,a

      常量定义方面

    // 1.快速设置连续值
    const (
    Monday = iota + 1
    Tuseday
    Wednesday
    ...
    Sunday
    )
    
    // 2. 表状态的bite位也可以这么玩
    Const (
    Open = 1 << iota
    Close
    Pending
    )
    

      

    3.基本数据类型

    bool
    string
    int int8 int16 int32 int64
    uint unit8 unit16 unit32 unit64 uintptr
    byte // alias for unit8
    rune // alias for int32, represents a Unicode code point !!!这个类型以后会详详细介绍,暂且放一放
    float32 float64
    complex64 complex128

    1. 默认类型根据运行的机器的位数决定使用多少位。
    2. Go语言不允许任何隐式类型转换
    3. 别名和原有类型也不能进行隐式类型转换

    类型的预定义值
      例如:
        math.MaxInt64
        math.MaxFloat64
        math.MaxUnit32

    指针类型 于其他主要变成语言的差异
      1. 不支持指针运算
      2. string是值类型,其默认的初始化值为空字符串,而不是nil

    4.运算符

    算术运算符

    1. 常用运算符如 + - * / % ++(后置) --(后置)与别的语言没什么差异
    2. Go语言中没有前置的 ++ -- (先自增,再引用)

    比较运算符
      常用运算符与别的语言没什么差异,但什么对象可以比较稍有差异,日后补充

      例:用==比较数组
        相同维数且含有相同个数元素的数组才可比较
      每个元素都相等才相等

    逻辑运算符
    与别的语言没由什么差异

    位运算符
    &    |   ^    <<    >>没什么差异
      与其他语言的差异 &^ 按位置零 (按位清零) 运算符
        1 &^ 0 -- 1
        1 &^ 1 -- 0
        0 &^ 1 -- 0
        0 &^ 0 -- 0
      该运算符这样计算, 只要操作符右边的运算数上的位置为1,无论左边对应位置上的运算数是多少都清零。
    右边操作符上的操作数为0时则左边原来是什么就显示什么。


    注意,使用Go语言就要使用Go的特点,写出真正的Go程序而不是将其他语言翻译成Go.

    5.条件和循环

    循环
      Go语言仅支持循环关键字for
      例 for j:= 7; j <= 9; j++ (不需要括号括起来)

    while条件循环 while (n < 5)
    Go版本
    n := 0
    for n < 5 {
    n++
    fmt.Println(n)
    }
    
    无限循环 while(true)
    Go版本
    n := 0
    for {
    ...
    }
    

      

    if条件

    例:
    if condition {
    ...
    } else {
    ...
    }
    
    if condition - 1 {
    ...
    } else if condition - 2 {
    ...
    } else {
    ...
    }
    

      

    区别:

    1. condition表达式结果必须为布尔值(没有隐式转换,int是不可以的)
    2. 支持变量赋值:
    if vardeclaration; condition {
    // code to be executed if condition is true
    }
    

      

    switch条件与其他语言的差异

    1. 条件表达式不限制为常量或者整数
    2. 单个case中,可以出现多个结果选项,使用逗号分隔
    3. 与C语言等规则相反,Go语言中不需要使用break来明确退出一个case
    4. 可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同
    写法举例:
    1.
    switch os := runtime.GOOS; os {
    case "darwin":
    fmt.Println("OS X.")
    //break
    case "linux":
    fmt.Println("Linux.")
    default:
    // freebsd, openbsd,
    // plan9, windows...
    fmt.Printf("%s.", os)
    }
    
    2.
    switch {
    case 0 <= Num && Num <= 3:
    fmt.Prinft("0-3")
    case 4 <= Num && Num <= 6:
    fmt.Prinft("4-6")
    case 7 <= Num && Num <= 9:
    fmt.Prinft("7-9")
    }
    

      

  • 相关阅读:
    duilib入门简明教程 -- VS环境配置(2) Alberl
    使用libCurl实现断点下载
    通用选择器和高级选择器
    Aforge.net 一个专门为开发者和研究者基于C#框架设计
    iBatis核心框架浅析
    Parameter Binding in ASP.NET Web API(参数绑定)
    图的基本概念
    领域模型中分散的事务如何集中统一处理(C#解决方案)
    .NET 垃圾回收与内存泄漏
    三层架构之泛型抽象工厂
  • 原文地址:https://www.cnblogs.com/dogtwo0214/p/13125265.html
Copyright © 2020-2023  润新知