Go的变量定义,函数不定参,返回多参和一些操作符使用

在go语言中,不像和其他语言一样,他没有所谓的public,private这两个定义公共和私有的关键字,他约束定义首字母大写就是公有的pulbic,小写或者下划线_就是私有的private。

var MAX_COUNT int=10//默认public,首字母大写
var min_count int=1//默认private,首字母小写

首先,在工程目录创建一个执行函数入口,包名为mian,这个不可改变,然后导入ftm这个基础函数包,可以取别名fm,或者.符号,但是一般不建议用.作别名,容易让人一眼看不知道导入了什么包

import (
    f "fmt"
)

go声明变量,如果不声明变量类型,则由系统检测

  • 常用声明
var var0 int=0//单个声明
var va1,va2,va3 int=1,2,3//多个声明
  • 简洁声明
var0:=0//单个声明
va1,va2,va3:=1,2,3//多个声明
  • 省略变量类型
var var0=0//单个声明
var va1,va2,va3=0,1,2//多个声明
  • 常量声明用const
const(
    FIRST  int= 0//public
    SECOND     //结果0,如果没有定义值,常量里面的值是自上引用
    second =2//private
)
  • go枚举,用关键字itoa,从0开始,每次自增1,不管它出现在常量集合定义的第几位,0都是从常量集合的第一个常量开始,每出现一个自增1,遇到第二个常量声明const关键字时候重置为0
const ( 
    FIRST  int= 1
    SECOND //结果1,自上引用
    THIRD  = iota//结果2
)
  • 类型别名,go语言可以声明一个类型别名,就好比取了另外一个名字,作用不变,用关键字type声明
type(
tInt int
tFloat float64
tByte byte
)

var va0 tInt=2//使用的时候

go函数是可以返回多个参数的,这一点跟其他语言有点不一样,表达式为

func 函数名(参数列表) (返回值列表) {
    // 函数体
}
//一个返回值,返回列表可以不需要用()包裹返回参数类型
func t(a int) int {
    return a + 1
}
//多个返回值,需要用()包裹返回参数类型
func t(a int) (int, int) {
    return a + 1, a + 2
}
//不定参数
func t1(args...int){
    for i,arg:=range args{
        f.Println("values:",arg," position:",i)
    }
}
//任意类型的不定参数函数定义
func 函数名(args ...interface{}) (返回值列表) {
    // 函数体
}
//例子
func t2(args ...interface{}) {
    for _, arg := range args {
        switch arg.(type) {
        case int:
            f.Println(arg, "is an int value.")
        case string:
            f.Println(arg, "is a string value.")
        case int64:
            f.Println(arg, "is an int64 value.")
        default:
            f.Println(arg, "is an unknown type.")
        }
    }
}
  • go是有闭包概念的,语法
c := func() func(参数类型列表) 返回值类型列表 {
    // 自由变量定义
    ...
    return func(参数列表) 返回值列表 {
        // 函数定义
    }
}

//函数参数是int类型,返回两个函数,返回的函数的参数都是int类型,返回值也都是int类型的
func1 := func(x int) (func(int) int, func(int) int) {
        a1 := func(i int) int {
            return i + x
        }
        a2 := func(j int) int {
            return j + x
        }
        return a1, a2
    }
    
    fc1, fc2 := func1(8)
    f.Println(fc1(2), fc2(3))//结果18,28

位运算符,譬如<< >>

3<<2//结果就是12

11>>2//结果就是2

位运算符计算先从十进制转二进制,3的二进制就等有0011,向左位移两位,就是变成等于1100,再转十进制就等于12了,向右位移的,也是先转换二进制,11的二进制就等于1011,向右位移两位,高位补0,就变成等于0010,再转十进制就等于2了

  • 其他运算符的
3  0011//二进制值
11 1011//二进制值
&     3&11 //如果两个都是1,就是1,如果不是,就是0,所以结果为0011,十进制结果就是3
|     3|11 //如果其中个都是1,就是1,如果两个都不是,就是0,所以结果为1011,十进制结果就是11
^     3^11 //如果其中两个都是1,就是0,如果其中一个是1,就是1,所以结果为1000,十进制结果就是8
&^    3&^11 //如果下面的1,就强制转换对应上面的为0,如果下面是0,就不做操作,所以结果为0000,十进制结果就是0

你可能感兴趣的:(Go的变量定义,函数不定参,返回多参和一些操作符使用)