【Go语言】基础语法

一、Go 命名规则

变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则:

1. 首字符可以是任何Unicode字符或下划线

2. 首字符以外的部分可以是Unicode字符、下划线、数字

3. 名字长度无限制

4. 不可使用关键字和保留字

5、首字母大写进行定义的常量、变量、函数、接口 可以跨packa访问

 

二、操作符与表达式

算术运算符

运算符

描述
+
-
*
/
求余

关系运算符

运算符 描述
== 相等
!=  <> 不相等 
大于 
小于 
>=  大于等于 
<=  小于等于 

 逻辑运算符

运算符 描述
|| OR 或
&& AND 且
! NOT 非

 位运算符

运算符 描述
&

参与运算的两数各对应的二进位相与(两位均为1才为1)

| 参与运算的两数各对应的二进位相或(其中一位均为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1(两位不一样则为1)。作为一元运算符时表示按位取反,符号位也跟着变
<< 左移n位就是乘以2的n次方。a<<b是把a的各二进位全部左移b位,高位丢弃,低位补0
>> 右移n位就是除以2的n次方。a>>b是把a的各二进位全部右移b位

 

 补码

 位运算

 赋值运算符

运算符 描述
= 简单赋值
+= 相加后赋值
-= 相减后赋值
*= 相乘后赋值
%= 求余后赋值
/= 相除后赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值

三、变量、常量、字面量

1、变量

变量类型

类型 变量类型 fmt输出 默认初始化值
整型 int  int8  int16  int32  int64  uint  uint8  uint16  uint32  uint64 %d 0
浮点型 float32 float64 %f  %e  %g 0
复数 complex128  complex64 %v 0
布尔型 bool %t false
指针 uintptr %p  %d nil
引用 map  slice  channel %v nil
字节(仅支持ASCII码) byte %d nil
任意字符(支持任意字符) rune %d nil
字符串 string %s ''
错误 error %v nil

变量初始化

如果声明变量后未显示初始化变量值,会赋予默认值

 

#变量完整声明格式
var a string = "china"

#多个变量同时声明
var a,b int = 7 , 8

var ( a=7 b=8 c=9 ) #动态识别模式,声明变量 var a = "china" #动态识别模式,声明多个变量 var a,b = "china" , 7 #函数内部变量可使用 := 声明并初始化变量 func test () { a := 3 b float32 := 4 } #_可用来声明匿名变量:匿名变量不占用命名空间,不分配内存,因此可重复使用 _ = 2+4

 变量作用域

全局变量:

大写字母开头,所有地方都可以访问,跨package访问时需要带上package名称

小写字母开头,本package中可以访问

全局变量必须使用 var / const 进行定义,不可以使用 := 

 

局部变量:

仅本函数内部可以访问,内部声明的变量可以跟外部声明的变量有冲突,以内部变量为准

可以通过 {} 实现变量局部使用,仅在 {} 内生效,可以和外部变量有冲突

//在vp package 中定义全局变量 Name

package vp

var (
    Name   = "Janzen"
)

 主程序中引用变量

package main

import (
    "fmt"
    "test/vp"
)

var (
    age    = 27                             // 设置本package使用的全局变量
    Passwd = "janzen_q"              // 设置可跨package使用的全局变量
    Name   = "Janzen.qiu"            // 设置可跨package使用的全局变量
)

func new_paaswd() {
    // 设置函数内局部变量 Passwd
         Passwd := "janzen_Q"
    fmt.Printf("Passwd = %s\n", Passwd)
}

func new_age() {
    // 设置函数内局部变量 age
    age := 25
    fmt.Printf("new age = %d\n", age)
    {
        // 设置作用域内局部变量 Passwd
        var age int = 28
        fmt.Printf("set age = %d\n", age)
    }
    fmt.Printf("new age = %d\n", age)
}

func main() {
    new_age()
    new_paaswd()
    fmt.Printf("vp.Name = %s\n", vp.Name)
    fmt.Printf("Name = %s\n", Name)
    fmt.Printf("Passwd = %s\n", Passwd)
    fmt.Printf("age = %d\n", age)
}
PS F:\go\go_project\test> go run .\main.go
new age = 25
set age = 28
new age = 25
Passwd = janzen_Q
vp.Name = Janzen
Name = Janzen.qiu
Passwd = janzen_q
age = 27

2、常量

常量定义

常量在定义时必须进行赋值,且程序运行期间其值不能改变

const Pl float32 = 3.14

const(
    PI = 3.14
    E = 2.71
)

const(
    a = 100
    b     // b=100,继承上一行的值
    c     // c=100,继承上一行的值
)


iota 递增

const(
    a = iota    // a=0
    b              // b=1
    c              // c=2
    d              // d=3
    e              // e=4
)


const(
    a = iota    // a=0
    b              // b=1
    c              // c=2
    _              // _=3
    d              // d=4
)

const(
    a = iota    // a=0
    b = 30      // b=30
    c              // c=30
    d              // d=30
    e              // e=30
)


const(
    a = iota    // a=0
    b = 30      // b=30
    c = iota    // c=1
    d              // d=2
    e              // e=3
)

 iota 使用场景案例

const (
    _ = iota
    KB = 1 << (10*iota)
    MB
    GB
    TB    
)


const(
    a,b = iota+1 , iota+2    // 1,2  iota = 0
    c,d                                // 2,3  iota = 1
    e,f                                // 3,4  iota = 2
)

3、字面量

字面量:没有出现变量名,直接使用值。基础类型的字面量相当于常量

fmt.Printf("%t\n",0.4 == 4)    // 整型字面量  浮点型字面量
fmt.Printf("%v\n",4i)    // 复数字面量
fmt.Printf("%t\n",'\uaf17' == '')    // Unicode字面量  rune字面量
fmt.Printf("%s\n", 'Hellow World !')    // 整型字面量  浮点型字面量

 四、注释

注释格式

  • 单行注释:以 // 开头
  • 多行注释:连续多行以 // 开头,或者在段前使用 /* ,段尾使用 */
  • 多行注释之间不能出现空行
  • NOTE:引人注意,TODO:将来需要进行优化,Deprecated:变量或函数强烈建议不再使用
  • 注释行前加缩进即可写go代码

 

注释的位置

  • 包注释:在 package xxx 上方。一个包只需要在一个地方写包注释,通常会专门写一个doc.go,里面只有一行 package xxx 和关于包的注释内容
  • 结构体注释:在 type xxx struct 上方
  • 函数注释:在 func xxx () 上方
  • 行注释:在目标行的上方或者右侧

 

go doc

go 自带的文档查看工具,会自动合并对应的包注释内容,并展示可跨package调用的内容

命令格式:

go doc 目标包目录名称

godoc工具

  • godoc 可以为项目代码导出网页版的注释文档
  • 需要先安装go get golang.org/x/tools/cmd/godoc
  • 启动http:godoc -http:=6060
  • 浏览器访问 http://127.0.0.1:6060/pkg/go-course/entrance_class
posted @ 2023-07-23 00:08  Janzen_Q  阅读(8)  评论(0编辑  收藏  举报