Go学习之路(一)变量、常量、数据类型

Go的测试文件写法:
1、源码文件以_test结尾:xxx_test.go
2、测试方法名以 Test 开头:func TestXXX(t *testing.T){...}

Go的25个关键字或保留字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

Go 的 36 个预定义标识符

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int 32 int64 iota len make new nil panic uint64
print println real recover string true uint uint8 uintptr

Go 的数据类型

  • 布尔型
  • 数字类型
    • 整数型
      • uint8 无符号 8 位整数型(0 到 255)
      • uint16 无符号 16 位整数型(0 到 65535)
      • uint32 无符号 32 位整数型(0 到 4294967295)
      • uint64 无符号 64 位整数型(0 到 18446744073709551615)
      • int8 有符号 8 位整数(-128 到 127)
      • int16 有符号 16 位整数(-32768 到 32767)
      • int32 有符号 32 位整数(-2147483648 到 2147483647)
      • int64 有符号 64 位整数(-923372036854775808 到 923372036854775807)
    • 浮点型
      • float32 IEEE-754 32位浮点型数
      • float64 IEEE-754 64位浮点型数
      • complex64 32 位实数和虚数
      • complex128 64 位实数和虚数
    • 其他数字类型
      • byte 类似 uint8
      • rune 类似 int32
      • uint 32或64位
      • int 与 uint 一样大小
      • uintptr 无符号整型,用于存放一个指针
  • 字符串类型
  • 派生类型
    • 指针类型(Pointer)
    • 数组类型
    • 结构化类型(struct)
    • Channel 类型
    • 函数类型
    • 切片类型
    • 接口类型(interface)
    • Map 类型

Go与其他主要变成语言的差异

  • 赋值可以进行自动类型推断
  • 在一个赋值语句中可以对多个变量进行同时赋值

变量声明方法:

  // 第一种书写方法变量声明   var 变量名 类型 = 值
      var a int = 1  
      var b int = 1
    // 第二种书写方法     这种写法在
    var (
        a int =1
        b int = 1
  )
    
  // 第三种书写方法   这种方法用了go的类型推断,和Python相似
  a :=1
  b :=1
  a,b,c := 1,2,"str"

实现一个小demo
斐波那锲

  package main
  import (
    "fmt"
    "testing"
  )
  func TestFibList(t *testing.T){
    var a int = 1
    var b int = 1
    fmt.Println(a)
    for i :=0; i < 5; i++{
      fmt.Println(" ",b)
      tmp := a
      a = b
      b = tmp + a
     }
    fmt.Println()
  }

交换两个变量的值

func TestExchange(t *testing.T){
  a := 1
  b := 1
  tmp := a
  a = b
  b = tmp  
}
// 第二种方法(这种方法必须是两个变量的类型相同)
a,b = b,a 

_ 实际上是一个只写变量,你不能得到他的值,这样做是因为Go语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。

package main
import "fmt"
func main(){
  numb,_,str1 := numbers()
  fmt.Println(numb,str1)   // 这里如果打印_就会报错
}

func numbers()(int,int,string){     // 这里的第二个括号中是返回的数据类型
  a,b,c := 1,2,"str"
  return a,b,c
}
// 输出结果:
2 str

常量

常量的定义格式:

const identifier [type] = value
const a string = "abc"    // 显示类型定义
const b = "abc"    // 隐式类型定义
// 多个相同类型的声明
const name1,name2 = "abc","ace"

常量名一般默认是全大写
举个栗子:

package main
import "fmt"
func main(){
  const LENGTH int = 10
  const WIDTH int = 5
  var area int
  const a,b,c = 1, false, "str"    // 这个是个多重赋值
  area = LENGTH * WIDTH
  fmt.Printf("面积为 : %d", area)
  println()
  println(a,b,c)
}
// 运行结果
面积为 : 50
1 false str

iota

iota 特殊常量,可以认为是一个可以被编译器修改的常量
iota 在 const 关键字出现时将被重置为0(这个重置为0是在 const 内部的第一行之前,如果是在别的行,那就是恢复为几减一,如const中第七个数,再次出现iota则会恢复为6),const 中每新增一行常量声明将使 iota 计数一次( iota 可以理解成 const 语句块中的行索引)。

// 第一种写法
const(
  a = iota
  b = iota
  c = iota
)
// 第二种写法
const(
  a = iota
  b
  c
)
// 运行结果:
a = 0, b = 1, c = 2

举个栗子:

package main
import "fmt"
func main(){
  const(
    a = iota   // 这里是 0 
    b
    c
    d = "ha"   // 独立值,哈iota没关系,但是iota在这里会+1
    e             // "ha" iota+=1
    f = 100    // 同样是独立值 iota+=1
    g             // 100 iota+=1
    h = iota   // iota 恢复计数
    i
  )
  fmt.Println(a,b,c,d,e,f,g,h,i)
}

Go不支持隐式类型转换

// 错误的例子
package main
import "testing"
func TestImplicit(t *testing.T){
  var a int32 = 1
  var b int64
  b = a
  t.Log(a,b)
}
// 修改上面的错误
package main
import "testing"
func TestImplicit(t *testing.T){
  var a int32 = 1
  var b int64
  b = int64(a)
  t.Log(a,b)
}
// 自写类型
package main
import "testing"
type MyInt int64        // 这个就是自写类型
func TestImplicit(t *testing.T){
  var a int32 = 1
  var b int64
  b = int64(a)
  var c MyInt
  c = MyInt(a)     // 这里自写类型转换
  t.Log(a,b,c)
}



string转成int: 
int, err := strconv.Atoi(string)
string转成int64: 
int64, err := strconv.ParseInt(string, 10, 64)
int转成string: 
string := strconv.Itoa(int)
int64转成string: 
string := strconv.FormatInt(int64,10)

你可能感兴趣的:(Go学习之路(一)变量、常量、数据类型)