首页 > 其他分享 >go 语言基本语法

go 语言基本语法

时间:2023-04-24 17:33:49浏览次数:40  
标签:语言 int fmt var 语法 字符串 go string

一、go语言初探
1. 基本数据类型 整型(int)、浮点型(float)、布尔型(bool)、字符串(string)
2. 复合数据类型 数组、切片、结构体、函数、map、通道(channel)、接口等

3. 安装Bee go install github.com/beego/bee/v2@master

4. 命令:
    go version #查看go的安装版本
    go env #查看go运行环境
    go run main.go #运行go脚本
    go build main.go #生成main.exe 
    main.exe #执行生成的文件
    go fmt main.go #格式化代码 一般不用了, 编辑器可以格式化
    go get github.com/shopspring/decimal 下载go插件

二、语法:
1. fmt.Print #可以接收多个参数
2. fmt.Println #可以接收多个参数
3. fmt.Printf #格式化输出 类似c语言 %v 相应默认格式输出 %T 输出数据类型 int ....
4. fmt.Sprintf # 格式化输出到变量

4.定义变量 定义变量后必须使用否则会报错 建议用驼峰方式定义 小驼峰表示私有/大驼峰表示公有
    var a = 'aaa' 
    var a int = 10 
    a := 10 #类型推导方式定义变量 短变量声明法 不能声明全局变量

    #变量初始化的方式 同一作用域变量不能重复声明
        var name string
        name = "张三" #先定义再赋值的方式 必须用双引号
            或
        var name string = "张三" #直接赋值方式
            或
        var name = "张三" #类型推导方式 name := "张三" 短变量声明法


    #定义多个变量
        var a1, a2 string #同类型变量
        a1 = "张三"
        a2 = "李四"
            或
        var ( #也可以使用类型推导方式
            username string
            age      int
            sex      string
        )
        username = "张三"
        age = 18
        sex = "男"
            或
        a, b, c := 12, 13, "C" # 短变量声明多个变量

    #匿名变量 _

    var username string #变量不设置值 默认值为空
    var num int #变量不设置值 默认值为0

5. 常量 const pi = 3.14195 #定义常量必须赋值
    # 一次定义多个常量
    const (
        A = "A"
        B = "B"
    )
    const ( # 如果后面的常量不赋值, 则值等于前面的常量值 且 常量定义后不使用也不会报错
        name = "abc"
        name2
    )

    const ( # iota 常量自动累加 类似计数器
        a = iota # 0
        b # 1
        c # 2
    )

    const ( # iota 常量自动累加 类似计数器
        a = iota # 0
        _ # 跳过某个值
        c # 2
    )

    const ( # iota 常量自动累加 类似计数器
        a = iota # 0
        b = 100 # 100
        c # 2
        d # 3
    )

    const ( # 矩阵?
        a, b = iota + 1, iota + 2 #1 2
        c, d # 2 3
        e, f # 3 4
    )

6. 数据类型
    int类型 unsafe.Sizeof(a) 变量占用的存储空间(占用空间的位数) int类型尽量用具体的类型不要直接使用int, 因为int占用8字节会浪费内存空间
        有符号整型: int8 int16 int32 int64(默认)
        无符号整型: uint8 uint16 uint32 uint64
        不同位数不能进行加减运算, 运算前需进行类型转换如int64(a) 注意高位转低位溢出问题
        char字符: 属于int类型 值为字符对应的ascii码 用单引号设置值 fmt.Printf("%c",'a') 原样输出

    float浮点型
        float32 float64(默认)
        科学计数法: var a = 3.14e2 #314

    bool布尔型 默认值是false, bool无法转换成整型, 不能参与运算

    string字符串 要用双引号 字符用单引号
        str1 := `agsd` #原样字符串/多行字符串使用反引号, 类似js的模板字符串
        len(str) # 计算字符串占用存储空间, 一个中文占三个字节
        + # 拼接字符串
        strings.Split(str,"-") # 字符串分割成切片
        strings.Join(str,"-") # 切片连接成字符串
        strings.Contains(str1, "123") # 字符串是否包含另一个字符串 true/false
        strings.HasPrefix(str1, "123")/strings.HasSuffix(str1, "123") # 前辍/后辍是否包含某个字符串 true/false
        strings.Index(str1, "456") # 查找字符串第一次出现的位置(从前往后找) 找不到返回-1
        strings.LastIndex(str1, "456") # 查找字符串第一次出现的位置( )从后往前找) 找不到返回-1

        #循环输出字符串
        s := "你好 golang"
        for _, v := range s {
            fmt.Printf("%v(%c)", v, v)
        }

        #修改字符串
        s1 := "big"
        byteStr := []byte(s1) //转换成byte
        byteStr[0] = 'p' //修改字符串
        fmt.Println(string(byteStr)) //转回string pig

        s1 := "你好"
        byteStr := []rune(s1) //转换成rune
        byteStr[0] = '大' //修改字符串
        fmt.Println(string(byteStr)) //转回string 大好
7. 基本数据类型转换: int8()、int16()、float32()、float64()
    str := fmt.Sprintf("%d",num) #可以使用Sprintf 把任意类型转换成字符串类型
    strconv.FormatInt(int64(a),10) # int转字符串
    strconv.FormatFloat(float64(a),'f',2,64) #浮点转字符串
    strconv.ParseInt # 字符串转int

    # 字符串转int
        str := "abc"
        num, err := strconv.ParseInt(str, 10, 64)

    # 字符串转float strconv.ParseFloat
    # 不建议把strng 转 bool

8. 运算符
    # int 相除 只保留整数部分
    # ++ -- 无前置运算符

9. 流程控制语句
    if: 条件不加括号, 大括号不能省略且不能换行
    # 没有while语句
    for: 条件不加括号

    # for rang 循环字符串
    str := "你好 golang"
    for _, v := range str {
        fmt.Printf("%c", v)
    }

    #for rang 循环切片 也可以用len计数循环
    arr := []string{"php", "java", "golang"}
    for k, v := range arr {
        fmt.Println(k, v)
    }

    switch case # case 1,2,3,5 可以这样写 可以不写break fallthrough 穿透一层

 

标签:语言,int,fmt,var,语法,字符串,go,string
From: https://www.cnblogs.com/longfeiPHP/p/17350283.html

相关文章

  • go语言01 介绍 搭建 变量命名与使用
    今日内容目录今日内容1Go语言介绍2Go开发环境搭建3第一个helloworld4变量命名规范5变量的定义和使用1Go语言介绍#Go语言介绍Go即Golang,是Google公司2009年11月正式对外公开的一门编程语言Go是【静态强类型】语言,是区别于解析型语言的编译型语言(静态:类型固定强类型:......
  • go介绍
    go介绍go即golang,是Google公司2009年11月正式对外公开的一门编程语言go是一种静态,强类型语言,是编译型语言(静态:类型固定强类型:不同类型不允许直接运算)解释性语言:源代码由解析器对代码进行解释执行编译型语言:源代码编译生成机器语言,然后由机器执行机器码可执行编译型语......
  • Django4全栈进阶之路16 template模板的基础模板
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>{%blocktitle%}MySite{%endblock%}</title>{%blockstyles%}{%endblock%}</head><body><header><h1>MySite</h......
  • 1 Golang入门
    目录1Golang入门1Golang介绍1.1简介1.2特性1.3go语言发展1.4go语言的应用2go2.1包2.2main包2.3go程序的运行方式2.4声明包与包导入1Golang入门1Golang介绍1.1简介Go即Golang,是Google公司2009年11月正式对外公开的一门编程语言Go是【静态强类型】语言,是区别于......
  • 2 Golang语法基础
    目录2Golang语法基础1变量命名规范2语法规则:变量的定义与使用①完整定义②类型推导:自动推导出变量,是什么类型③简略声明:2Golang语法基础1变量命名规范Go语言中的函数名、变量名、常量名、类型名和包名等所有的命名,都遵循一个简单的命名规则:①一个名字必须以一个字......
  • Rust、Go 和 Swift 在性能和并发性方面有何差异?
    Rust是一种系统编程语言,旨在快速、安全和并发。其性能令人印象深刻,可以生成快速高效的机器代码。Rust 的编译器使用 LLVM 基础架构,它针对目标架构优化了代码。此外,Rust 的所有权和借用系统确保内存得到有效管理,没有任何运行时开销。Rust的并发模型是基于actor模型的,也就是说并......
  • Go语言介绍、Go开发环境搭建、第一个helloworld、变量命名规范、变量的定义和使用
    目录1Go语言介绍2Go开发环境搭建3第一个helloworld4变量命名规范5变量的定义和使用1Go语言介绍#Go语言介绍Go即Golang,是Google公司2009年11月正式对外公开的一门编程语言Go是【静态强类型】语言,是区别于解析型语言的编译型语言(静态:类型固定强类型:不同类型不允许直接......
  • 加密Python项目代码之把Django或Flask项目打包成exe
    目录python代码仿泄露方案-方案一:启动起来,把源代码删除-方案二:pipinstaller打包成可执行文件-方案三:做到docker镜像中---》运行容器---》-epassword=授权码加密Python项目代码之把Django或Flask项目打包成exe:https://zhuanlan.zhihu.com/p/430490285......
  • Codeforces Beta Round 96 (Div. 1) -- C. Logo Turtle (dp,记忆化搜索)
    记忆化搜索就是暴力,多一步优化,走过的路别走了。说实话,可能是数据水了,居然能过。constintN=510;strings;intn,ans;boolst[501][501][2][50];voiddfs(intx,intidx,intdir,intk){ if(st[x][idx][dir][k])return; st[x][idx][dir][k]=1;//走过的路不走......
  • idea - 在Terminal 交叉编译golang 解决
    1. 背景在ideaTerminal栏执行gobuildxxx.go打包的是exe文件交叉编译配置SETCGO_ENABLE=0SETGOOS=linuxSETGOARCH=arm64gobuildxxx.go发现编译文件仍然是exe2.解决需要切换为cmd指令执行cmd然后在执行交叉编译即可 ......