Golang 基础语法-基本变量(2)

Golang 基础语法-基本变量(2)

变量的零值说明

  • 数值类型变量的零值为 0
  • 布尔类型变量的零值为 false
  • 字符串类型变量的零值为 "”

变量的类型转换语法

golang 中不一样类型之间的变量赋值须要显式的转换golang

//语法格式 T(v) 将 v 转换为 类型 T
var i int = 32
var f float64 = float64(i)
var u uint = uint(64)

变量的定义(声明)

  • 使用 var 声明
    不管在函数内仍是函数外,均可以使用 var 声明变量ide

    基本语法格式为:
    var varName varType
    var varName = varValue
    var varName1, varName2 varType
    var varName1, varName2 = varValue1, varValue2函数

    在基本语法格式上能够进行一些灵活组合,可是建议不要用花哨的语法ui

    //声明可是不初始化(foo 的值为对应变量类型的零值)
    var foo int;
    //声明且初始化(var声明初始化的时候不须要指定变量类型,编译器自动根据初始化值肯定变量类型)
    var bar  = 3 //推荐写法
    var bar int = 3 //合法可是不推荐
    //声明 i1, i2 为 int 类型(初始值为 int 类型的零值 0)
    var i1, i2 int
    //声明 i1 和 i2同时赋值为1,2
    var i1, i2 = 1, 2
    //声明 int 类型的 i1,string 类型的 s1
    var i1, s1 = 1, "a"
    //声明一组全局变量,变量能够初始化或者不初始化
    var(
        i1, i2 = 1, 2
        i3, i4 int
        s1 = "111221"
        b1 = true
    )
  • 快捷语法
    只能在函数体内使用快捷语法,函数体外非法编码

    语法格式
    varName1 := varValue1操作系统

    func main(){
        //声明变量 i1而且同时给变量赋值
        i1 := 1
        //声明变量 i2,s1而且同时给他们赋值
        i2, s1 := 1, "11"
    }
  • var声明和快捷语法声明须要注意的地方code

    便捷声明方法是声明一个新的变量且赋值,不能用做给 var 声明的变量赋值对象

    var foo = 1
    func main(){
        foo := 10
        //输出10 使用的局部变量取值
        fmt.Println(foo)
        //PS: 必定要注意下面有语法错误
        var bar int
        bar := 11   //便捷方式实际上是先声明一个新变量而后给赋值,可是此时 bar 变量已经存在了不能重复定义
    }

特殊变量 _

变量 _ 用来抛弃忽略某个值,golang 中不容许存在没有使用的变量索引

  • 函数多返回值抛弃字符串

    _, r := divide(10, 3)
  • 导入包不使用(可是会调用导入包的 init方法)

    import(
        "fmt"
        _ "os"
    )

常量

常量是指变量一旦定义,在编译阶段它的值就是肯定了的,在运行阶段是不能够被改变的,golang 中 number|boolean|string 类型能够定义为常量

定义语法
const constantName = value
cosnt constantName constantType = value

const PI = 3.14
const Pi float32 = 3.14156

变量类型

golang 中的 基本变量类型主要为 number,bool,string等

Boolean

关键词 bool 用于定义 boolean类型变量,boolean 类型变量的取值只有 truefalse, 零值(默认值)为 false
golang 不容许把 boolean 类型转变为数字类型

数字类型(Numerrical)

Integers

golang 不容许类型不一样的变量进行运算,例如 int8类型的变量和 int32类型的变量不能进行加法操做

  • signed

    • int 长度取决于操做系统,32位操做系统是32位,64位操做系统是64位
    • rune 它是int32的别名
    • int8
    • int16
    • int32
    • int64
  • unsigned

    • uint
    • byte 它是 uint8的别名
    • uint8
    • uint16
    • uint32
    • uint64

浮点型

注意没有 float 这个类型

  • float32
  • float64

复数(Complex)

  • complex128
  • complex64

字符串(string)

goalng 使用 UTF-8做为编码结合,使用 " 或者 ` 包裹起来的字符就是一个 string
` 定义多行字符串

var s1 = "hello"
var s2 = `hello
word`

string 对象不容许改变值(可是能够给从新赋值),下面的语法错误

var s = "hello"
s[0] = 'c'

若是要改变一个变量的值,须要使用旧的变量建立

s := "heloo"
c := byte(s) //string 转换为[]byte 类型
c[0] = 'c'
s2 := string(c) //把 c []byte 转为 string
fmt.Printf("%s\s\n", s2)

+ 能够用来拼接两个字符串

s := "hello, "
m := "world"
a := s + m
fmt.Printf("%s\n", a)

//输出 "cello, "
s = "c" + s[1:] //返回 "c" + s从索引1到结束的字符串拼接

Error(golang 内置,其余语言没有的)

golang没有 try-catch 语句块处理异常,内置了 error 类型用于处理错误

err := errors.New("some error messaage")
if err != nil {
    //TODO something
}

其余

  • 分组定义
    若是你想定义多个常量,变量或者导入多个包,可使用分组格式

    //如下是非分组形式
    import "fmt"
    import "os"
    
    const i = 100
    const pi = 3.145
    
    var i int
    var pi float32
    var prefix string
    //分组形式
    import(
        "fmt"
        "os"
    )
    const(
      
        pi = 3.145
        prefix = "GO"
    )
    var(
    
        pi float32
        prefix string
    )
  • iota 枚举

    关键字 iota 能够生成枚举类型,枚举值从0开始,每次加1

const(
        //x == 0
        x = iota
        //y == 1
        y = iota 
        //z == 2
        z = iota 
        //若是常量名称后面没有任何表达式
        //则 w 等价于 w = iota, w == 3
        w
    )
    const v = iota //v == 0
    //PS 注意在同一行时的 iota 特殊状况
    const(
        //若是 iota 在同一行,则 e == f == g == 0
        e, f, g = iota, iota, iota 
    )
  • 变量的可见性

    • 任何以大写字母开头的变量都是能够被导出的,即在包外能被访问,
    • 函数或者常量大写字母开头的,也是能够被导出的,包外能够访问的
    • golang 中没有 public 或者 private 来控制变量函数常量等的可见性,经过变量函数常量的名称的首字母是否大小写来判断
package test
//Foo 在包 test 以外能够经过 test.Foo 访问
var Foo
//bar 在包 test 以外经过 test.bar 访问是错误的,由于它的首字母是小写,包外不可见
var bar
//函数在test 包外可使用 test.Test1()访问
func Test1(){

}
//函数在 test 包外不能够经过 test.test2()访问,只能够在包内使用
func test2(){

}
//包外使用 test.I访问
Const I = 1
// j 不能够在包外经过 test.j 访问
cont j = 10
相关文章
相关标签/搜索