工作之余,每天拿出点时间学习一门新技术,不求精通,但求了解其思想。通过下面途径学习的:

http://weiki.tk/Go_Web_Program/preface.html

从java转到golang的我,对于golang的变量定义确实不适应。golang的定义有些像javascript,用var 来定义变量。和java区别在于类型放到了后面。

  bool

var isActive bool

  其实这些都还是可以接受的,对我来讲,初次印象最别扭到地方是类型到名称。bool是布尔值,Go同时支持int和uint ,这两种类型其实长度相同,但是具体的长度要取决于不同到编译器的实现。

  INT

golang中直接定义好位数的类型有rune(int32),int8,int16,int 32,int64和byte(uint8),uint8,uint16,uint32,uint64。和java中区别的还有类型之间到转换,我们知道 java中到类型转换是"向上"趋进的。但是在GO中

var a int8
var b int32
c:=a+b

以上到写法会产生错误。另外注意到是虽然int的长度是32bit,但是int和int32还是不可义互用的。

  FLOAT

对于浮点类型,GO中没有float类型,他有float32和float64两种,默认是float64。

  对了,GO中支持复数

var c complex64 = 5+5i
//output: (5+5i)
fmt.Printf("Value is: %v", c)
RE + IMi

  STRING

GO的字符串天生支持utf-8,当然它一旦定义,将不能改变。

//示例代码
var frenchHello string  // 声明变量为字符串的一般方法
var emptyString string = ""  // 声明了一个字符串变量,初始化为空字符串
func test() {
    no, yes, maybe := "no", "yes", "maybe"  // 简短声明,同时声明多个变量
    japaneseHello := "Ohaiou"  // 同上
    frenchHello = "Bonjour"  // 常规赋值

字符串虽然不可以修改,但是可以通过切割来达到目的。

s := "hello"
s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作
fmt.Printf("%s\n", s)

如果要声明多行的字符串,那么直接通过 `来声明。

m := `hello
    world`

  错误类型

errorpackageerrors
err := errors.New("emit macho dwarf: elf header corrupted")
if err != nil {
    fmt.Print(err)
}

下面用一门书中到图来解释下:

另外还总结了一些技巧:

1.分组声明

  声明多个常量,变量或者导入多个包时,可采用分组到方式进行

eg下面到代码:

import "fmt"
import "os"

const i = 100
const pi = 3.1415
const prefix = "Go_"

var i int
var pi float32
var prefix string

可以分组成如下形式:

import(
    "fmt"
    "os"
)

const(
    i = 100
    pi = 3.1415
    prefix = "Go_"
)

var(
    i int
    pi float32
    prefix string
)

iota枚举

  还有一个比较有意思到关键词是iota,它是GO里面声明enum的时候采用的,它默认值是0,每调用一次加1.

const(
    x = iota  // x == 0
    y = iota  // y == 1
    z = iota  // z == 2
    w  // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota"
)

const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0

十二点多了,今晚到此吧。

有疑问加站长微信联系(非本文作者)