美文网首页我爱编程
go 的基本使用

go 的基本使用

作者: a十二_4765 | 来源:发表于2018-08-06 17:29 被阅读33次

    const 修饰,代表永远是只读的,不能被修改
    常量的定义 以及强制类型转换
    const filename = "abc.txt"
    const 数值可作为各种类型使用
    函数时编程
    如何把 4,5 转换成5,4
    main(){
    fist =100
    maix = 200
    fist,maix = maix,fist

    变量的作用域
    1,在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部
    2,在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的则作用于整个程序
    int 8 一个字节 int16 俩字节 int32 四个字节 int64 八个字节
    uint 无符号整形
    生成随机数
    matn/rand
    rand.Int()
    字符类型: var a byte 8位一个字节
    字符串类型:var str string
    占位符
    %v 相应值的默认格式
    %#v 响应值的go语法表示
    %T 相应值的类型的Go语法表示
    %% 字符上的百分号,并非占位符
    %t 单词true或false
    整数
    %b 二进制表示
    %c 相应Unicode码点所表示的字符
    %d 十进制表示
    %o 八进制表示
    %q 单引号围绕的字符字面值,由go语法安全地转义
    %x 十六进制表示,字母形式为小写 a-f
    %X 十六进制表示,字母形式为大写A-F
    %U Unicode格式
    浮点数
    %b 无小数部分的
    %f 有小数点而无指数
    字符串与字节切片
    %s 字符串或切片
    %q 双引号围绕的字符串
    %x 十六进制,小写字母,每个字节俩个字符
    %X 十六进制,大写字母,每个字节俩个字符
    //字符串翻转
    func reverse(str string) string{
    var result string
    strLen :=len(str)
    for i := 0; i<strLen; i++{
    result =result+fmt.Sprintf("%c",str[strLen-i-1])
    }
    return result
    }

    func main(){
    var str1 ="hello"
    result :=reverse(str1)
    fmt.Println(result)
    }
    fmt.Scanf("%d",&n)
    获取控制台输出
    //水仙花
    func isNumber(n int) bool{
    var i,j,k int
    i = n % 10
    j = (n/10)%10
    k = (n/100) %10
    sum := iii + jjj + kkk
    return sum == n
    }

    func main(){
    var n int = 100
    var m int =999

    for i := n; i <m; i++{
    if isNumber(i) == true{
    fmt.Println(i)
    }

    }
    }

    strings 和strconv
    strings.HasPrefix(s string,prefix string) bool 判断字符串s是否以prefix开头
    stirngs.HasSuffix(s string,suffix string) bool, 判断字符串s是否以suffix结尾
    strings.Index(s string,str string) int 判断str在s中首次出现的位置,如果没有出现则返回-1
    strings.LastIndex(s string,str string) int 判断str在s中最后出现的位置,如果没有出现,则返回1
    string.Replace(str string, old string,new string,n int),字符串替换
    strings.Count(str string,substr string)int 字符串计数
    strings.Repeat(str string,count int) string 重复count次str
    strings.ToLower(str string) string:转为小写
    strings.ToUpper(str string) string 转为大写
    时间和日期类型
    time包
    time.Time类型,用来表示时间
    获取当前时间 now :=time.Now()
    time.Now().Day() ,time.Now().Minute(),time.Now().Month(),time.Now().Year()
    指正的类型
    普通类型,变量存的就是值,也叫值类型
    获取变量的地址,用&,比如 var a int ,获取a的地址:&a
    指针类型,变量存的是一个地址,这个地址存的才是值
    获取指针类型所指向的值,使用:* 比如var p int 使用p获取p指向的值
    goto 类似于for循环
    label1
    如果j == 4 就直接结束当前for循环执行父类
    func main(){
    LABEL1:
    for i := 0;i <=5 ;i++ {
    for j := 0;j<=5;j++{
    if j ==4 {
    continue LABEL1
    }
    fmt.Println("i is:%d,and j is:%d\n",i,j)
    }
    }
    }
    函数
    声明语法:func 函数名(参数列表)[(返回值列表)]
    golang 函数的特点
    不支持重载,一个包不能有个俩个名字一样的函数
    函数是一等公民,函数也是一种类型,一个函数可以赋值给变量
    匿名函数
    多返回值
    //可变参数
    func add(a int, arg ...int)int {
    var sum int = a
    for i :=0; i<len(arg);i++{
    sum +=arg[i]
    }
    return sum
    }
    func main(){
    sum :=add(10,3)
    fmt.Println(sum)
    }
    //可变参数字符串拼接
    func add(a string, arg ...string)(result string) {
    result = a
    for i :=0; i<len(arg); i++{
    result += arg[i]
    }
    return
    }
    func main(){
    sum :=add("hello","word")
    fmt.Println(sum)
    }
    函数
    defer用途:
    当函数返回时,执行defer语句,因此可以用来做资源清理
    多个defer语句,按先进后出的方式执行
    defer语句中的变量,在defer声明时就觉定了
    for i :=0;i<10;i++{
    defer
    fmt.Println(i)
    }
    打印10 9 8。。。。1
    defer用途 锁资源释放
    func read(){
    mc.LockI()
    defer mc.Unlock()
    }
    数据库连接的释放
    func read(){
    conn :=openDatabase()
    defe conn.Close()
    }
    内置函数
    close:主要用来关闭channel
    len:用来求长度,比如string,array,skice,map,channel
    new 用来分配内存,主要用来分配值类型,比如int,struct,返回的是指针
    make:用来分配内存,主要用来分配引用类型,比如chan,map,slice
    append:用来追究元素到数组,slice中
    panic和recover;用来做错误处理
    //斐波那契数
    func fab(n int) int{
    if n <=1 {
    return 1
    }
    return fab(n-1) +fab(n-2)
    }
    func main(){
    for i := 0; i<10;i++{
    n:=fab(i)
    fmt.Println(n)
    }
    }
    数组:是同一种数据类型的固定长度的序列
    切片:切片是数组的一个引用,因此切片是引用类型
    切片的长度可以改变,切片是一个可变的数组
    通过make来创建切片
    切片拷贝
    s1 := [] int(1,2,3,4,5)
    s2 :=make([]int,10)
    copy(s2,s1)
    切片
    s3 :=[]int{1,2,3}
    s3 = append(s3,s2 ...)
    排序操作 使用sort包 import("sort")
    sort.Ints 对整数进行排序
    func testIntSort(){
    var a = [...]int{1,8,38,2,144}
    sort.Ints(a[:])
    fmt.Println(a)
    }
    sort.Strings 对字符串进行排序,
    sort.Float64 对浮点型进行排序
    map 数据结构
    ket -value 的数据结构,又叫做字典或者关联数组
    map 数据结构
    map排序
    a.先获取所有key,把key进行排序
    b.按照排序好的key,进行遍历
    线程同步
    impoty("sync")
    互斥锁,var mu sync.Mutex
    读写锁 var mu sync.RWMutex
    写多的时候加互斥 读多的时候加读写锁

    相关文章

      网友评论

        本文标题:go 的基本使用

        本文链接:https://www.haomeiwen.com/subject/jmmgvftx.html