初识golang

golang的变量和常量

//函数外声明并初始化变量
var test //错误
var test = "test" //ok,不需要写分号,不需要写类型
var test string = "test" //ok,写不写类型都OK
test := "test" //错误,在函数外部不可以用:=
//解释:":="这个符号是自动匹配类型,比如 a := 100,会把右边的类型和值传递到变量a,也就是说a的类型是int,值是100
//函数内声明并初始化变量
var testFunc = func() {
    var test2 //错误
    var test = "test" //ok
    var test1 string = "test1" //ok
    test3 := "test3" //ok
    fmt.Println(test, test1, test2, test3)                                                                                                          
}
//变量块
var (
ErrParamError = "param error"
ErrParamEmpty = "param empty"
)

常量

const test//错误,没有初始化
const test = "test" //ok
const test string = "test" //ok
const test := "test" //错误
//常量块

const (
    test = "test"
    Pi = 3.13
)

iota用法:iota默认为整型的空值0,之后的元素的值是它前一个元素的值+1

const (
    Monday = iota
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
)

func main() {
    fmt.Println(Monday, Tuesday, Sunday)
}

输出:
0 1 6

 另外注意到:包的全局变量是可以只定义但是不使用的,而函数内的临时变量是定义后必须要使用的(作为参数,右值,或者右值的一部分)

//这段代码是OK的
var test = "test"

func main() {                                                                                                          
}

//这段代码是错误的
func main() {
    var test1 = "test1"
    //fmt.Println(test1)                                                                                                                 
}

//加上fmt是ok的
func main() {
    var test1 = "test1"
    fmt.Println(test1)                                                                                                                 
}

 数组:

代码
package main
import "fmt"

func main() {
    arr := make([]string, 5, 10)                                                                                                      
    fmt.Println(len(arr), cap(arr))
    return
}
输出:
5 10
能看出来数组arr的长度是5,容量是10.这两个数字意味着什么呢?

代码
package main

import "fmt"

func main() {
    var temp string
    arr := make([]string, 5, 10)
    fmt.Println(len(arr), cap(arr))

    arr[0] = "string0"
    arr[1] = "string1"
    arr[5] = "string5"                                                                                                                
    return
}
输出:
5 10
panic: runtime error: index out of range
len(arr)=5意味着数组的最大长度是5,arr[5]这样的变量是不被允许的

cap(arr)=5不知道是啥意思

 值类型,指针类型

package main
import (
    "fmt"
)

var _ = fmt.Sprintf("")

func main() {
    var a int = 10
    fmt.Println(a)
    changeValue1(a)
    fmt.Println(a)

    fmt.Println(a)
    changeValue2(&a)
    fmt.Println(a)
}

func changeValue1(a int) {
    a++ 
}
                                                                                                                                      
func changeValue2(a *int) {
    *a += 1
}

输出:
10
10
10
11

 判断结构体是否被设置?

思路1:判断其中的元素是否为空元素;思路2:是否可以字节判断变量为空,目前是用第一种方法

package main
import "fmt"

type testStruct struct {
    Name string
    Age int
}

func main() {
    var t testStruct
    //t.Age = 100
    if t.Name == "" {
        fmt.Println("name is empty")
    } else {
        fmt.Println("a" + t.Name + "a")
    }
}

 

  .....

posted on 2014-11-17 16:42  awildfish  阅读(727)  评论(0编辑  收藏  举报

导航