Golang学习踩坑

学习一门新语言,难免少不了踩坑,很多坑都是因为上个语言遗留下来的习惯,在这里记录一下

  1. JetBrains GoLand 编写go语言的时候,不能直接写import,一般写main()的时候会自动导入
  2. go语言申明的变量必须使用,不然会编译报错
  3. go语言一行一句,不支持分行,不需要;,如果你想把多行语句并在一行,才需要用;隔开
  4. {不能单独放一行
  5. 关于包名和文件名的关系:文件名与包名没有直接关系,不一定要将文件名与包名定成同一个; 文件夹名与包名没有直接关系,并非需要一致;同一个文件夹下的文件只能有一个包名,否则编译报错。
  6. var c, d *int 是把c和d都声明为指针类型
  7. 初始化的标准写法:var a int = 100;var a = 100;var a float = 0.01
  8. const为常量
  9. 短变量声明:a := 100;b := 0.01 这种写法,a和b都必须是没有定义过的变量,另外标准写法和短变量写法的区别:例如
    短变量标准写法
    conn, err := net.Dial("tcp","127.0.0.1:8080")
    var conn net.Conn
    var err error
    conn, err = net.Dial("tcp", "127.0.0.1:8080")

    如果a在外部被定义为全局变量,那么它可以在在局部变量上进行短变量声明,因为内部声明的a将屏蔽外部的声明 

     

  10. 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错 ,例如a1,b1 = 10,10;a2,b1 = 10,10;b1相同也不会报错
  11. Golang位运算符的描述
    符号描述实例
    &按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。(A & B) 结果为 12, 二进制为 0000 1100
    |按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或(A | B) 结果为 61, 二进制为 0011 1101
    ^按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(A ^ B) 结果为 49, 二进制为 0011 0001
    <<左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。A << 2 结果为 240 ,二进制为 1111 0000
    >>右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。A >> 2 结果为 15 ,二进制为
  12.  fmt.print不能使用%d,%t之类的占位符,会自动换行;fmt.printf可以使用%d之类的

  13. &返回变量存储地址&a; 将给出变量的实际地址。
    *指针变量。*a; 是一个指针变量
    在输出指针的时候 指针a会输出地址,*a才输出变量,&a会输出变量的实际地址
  14.  Printf里面的%占位符一览
    %d按十进制整型数据的实际长度输出。
    %ld输出长整型数据。
    %mdm 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。
    %u输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使 CPU 多做一次无用功。
    %c用来输出一个字符。
    %f用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。
    %.mf输出实数时小数点后保留 m 位,注意 m 前面有个点。
    %o以八进制整数形式输出,这个就用得很少了,了解一下就行了。
    %s用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。
    %x(或 %X 或 %#x 或 %#X)以十六进制形式输出整数,这个很重要。
  15. os.Args的使用,类似于Java数组格式的Scanner,用于获取命令栏启动go语言时获取的参数

    使用方式

    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	fmt.Println(os.Args)
    	fmt.Println("aaaa")
    }
    
    命令行启动时输入
    go run xxxx.go 1 2 3
  16. range关键字用于迭代切片,使用方式
    // 创建一个整型切片,并赋值
    slice := []int{10, 20, 30, 40}
    // 迭代每一个元素,并显示其值
    for index, value := range slice {
        fmt.Printf("Index: %d Value: %d\n", index, value)
    }
  17. 主要申明关键字:var变量,const常量,type类型,func函数
  18. :=意义为声明  =意义为赋值
  19.  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值