Golang基础1-基本类型、if、switch、string

news2025/1/15 20:35:15

基本类型

bool

整数:byte(相当于uint8), rune(相当于int32), int/uint ,int8/uint8 ,int16/uint16 ,int32/uint32 ,int64/uint64

浮点数: float32 ,float64, complex64 ,complex128

array(值类型)、slice、map、chan(引用类型)

条件循环语句

if 、switch

if用法注意点

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var a int = 10
 
   /* 使用 if 语句判断布尔表达式 */
   if a < 20 {
       /* 如果条件为 true 则执行以下语句 */
       fmt.Printf("a 小于 20\n" )
   }
   fmt.Printf("a 的值为 : %d\n", a)
}

switch用法注意点

Go 语言 switch 语句 | 菜鸟教程

switch简单demo
package main

import "fmt"

func main() {
    var grade string = "B"
    var marks int = 90

    switch marks {
    case 90:
        grade = "A"
    case 80:
        grade = "B"
    case 50, 60, 70:
        grade = "C"
    default:
        grade = "D"
    }

    switch {
    case grade == "A":
        fmt.Println("优秀")
    default:
        fmt.Println("懒得写了")
    }
    fmt.Println(grade)
}

switch判断interface的类型
package main

import "fmt"

func main() {
    var x interface{}
    x = "你好"

    switch i := x.(type) {
    case nil:
        fmt.Println("nil")
    case int:
        fmt.Printf("x is an integer: %d\n", i)
    case string:
        fmt.Printf("x is a string: %s\n", i)
    default:
        fmt.Println("x is of unknown type")
    }
}
fallthrough加在后面可以不加判断强制执行后面的case
package main

import "fmt"

func main() {

    switch {
    case false:
        fmt.Println("1、case 条件语句为 false")
        //fallthrough
    case true:
        fmt.Println("2、case 条件语句为 true")
        fallthrough
    case false:
        fmt.Println("3、case 条件语句为 false")
        fallthrough
    case true:
        fmt.Println("4、case 条件语句为 true")
        //fallthrough
    case true:
        fmt.Println("5、case 条件语句为 false")
        fallthrough
    default:
        fmt.Println("6、默认 case")
    }
}

string

string、rune、byte之间的关系

参考链接:https://www.cnblogs.com/cheyunhua/p/16007219.html

理解go中rune数据类型 - 知乎

首先查看官方包的定义

可以看出byte区分字节值和uint8,rune区分字符值和int32

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32

UTF-8 是 Unicode 的一种实现方式,是一种针对 Unicode 可变长度的字符编码,它定义了字符串具体以何种方式存储在内存中。UFT-8 使用 1 ~ 4 为每个字符编码。

rune对应于int32,也就是这个unicode码点

byte对应于原始字节(8位所以0~255),也就是原始字节

go中的string类型采用UTF-8编码,这是一种可变长的 Unicode 字符编码方案,几乎可以表示世界任何字符。

统计字节数:len

统计Unicode字符数:utf8.RuneCountInString()

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    a := "Go语言"

    fmt.Println("字节数:", len(a))
    //utf8计算unicode字符数
    fmt.Println("Unicode字符数:", utf8.RuneCountInString(a))
    fmt.Println("[]Rune:", len([]rune(a)))

    // 遍历字符串中的字符 char为rune类型
    fmt.Println("遍历字符串中的字符:")
    for _, char := range a {
        //测试当前rune类型
        fmt.Printf("%T %c\n", char, char)
    }
    fmt.Println()
}

字符串之间比较

Strings.Compare包返回-1,0,1分别< ,== ,>

常用其他方法

package main

import (
    "fmt"
    "strings"
)

func main() {
    name := "go语言爱好者-l"
    //是否包含
    contain := strings.Contains(name, "爱好")
    fmt.Println(contain)

    //出现次数
    count := strings.Count(name, "g")
    fmt.Println(count)

    //以sep分割
    s := strings.Split(name, "-")
    fmt.Println(s)

    //前后缀
    goHead := strings.HasPrefix(name, "go语言")
    lEnd := strings.HasSuffix(name, "l")
    fmt.Println(goHead, lEnd)

    //查询字串出现位置,注意是byte的索引
    index := strings.Index(name, "爱好者") //8
    fmt.Println(index)

    //索引输出rune
    //for key, val := range name {
    //    fmt.Println(key, "--->", val)
    //}

    //索引输出byte,更细节,具体看当时文档 string rune byte之间的关系
    //for i := 0; i < len(name); i++ {
    //    fmt.Println(i, "-->", name[i])
    //}

    //索引到rune
    indexRune := strings.IndexRune(name, 35328)
    fmt.Println(indexRune)

    //替换,-1则替换所有
    fmt.Println(strings.Replace(name, "go", "java", -1))

    //大小写转换
    fmt.Println(strings.ToUpper("go"))
    fmt.Println(strings.ToLower("JAVA"))

    //去掉前后的符合,其他的用到了自己查询
    fmt.Println(strings.Trim(" 你好,啊 ", " "))
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1628673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前期Hadoop学习总结

前期Hadoop学习总结 1.Linux&#xff1a;操作系统 ​ 2.虚拟机&#xff1a;主机 3.SecureCRT &#xff08;客户端&#xff09;&#xff1a;连接Linux 方便操作 4.Hadoop&#xff1a;软件 这个软件要装在Linux里面 5.Hadoop是干嘛的&#xff1a; Hadoop是一个开源的分布式计…

【LLMOps】小白详细教程,在Dify中创建并使用自定义工具

文章目录 博客详细讲解视频点击查看高清脑图 1. 搭建天气查询http服务1.1. flask代码1.2. 接口优化方法 2. 生成openapi json schema2.1. 测试接口2.2. 生成openapi schema 3. 在dify中创建自定义工具3.1. 导入schema3.2. 设置工具认证信息3.3. 测试工具 4. 调用工具4.1. Agent…

Apache Seata的可观测实践

title: Seata的可观测实践 keywords: [Seata、分布式事务、数据一致性、微服务、可观测] description: 本文介绍Seata在可观测领域的探索和实践 author: 刘戎-Seata 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Seata简介 Seata的…

matplotlib 安装失败:Failed building wheel for matplotlib 解决方案

Python | Failed building wheel for matplotlib 朋友遇到 python 安装 matplotlib 时的问题&#xff0c;笔者帮忙远程调试(踩了不少坑)。网上的解决方案有很多无效&#xff0c;以此来记录以下个人解决方案。 在使用指令 pip install matplotlib出现如下报错&#xff1a; “…

机器学习理论基础—集成学习(1)

机器学习理论基础—集成学习 个体与集成 集成学习通过构建并结合多个学习器来完成学习任务&#xff0c;有时也称为多分类系统等。 分类&#xff1a; 根据集成学习中的个体学习器的不同可以分为同质集成&#xff08;集成的学习器相同例如全部是决策树&#xff09;&#xff0c…

目标检测——农作物杂草数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

centos 安装配置文件中心 nacos2.2.3 稳定版

安装mysql 8 参考文章 centos7搭建mysql5.6 && mysql 8.0_centos7 mysql5.6-CSDN博客 安装 jdk 17 官网下载 对应的版本 Java Downloads | Oracle wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_l…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

Visual Studio中怎样更改Nuget程序包源

场景 Visual Studio 2019 在使用NuGet添加依赖包时&#xff0c;在预览中搜索不到程序包。 排查下NuGet的程序包源为本地。 将程序包源修改下。 实现 在解决方案上右击选择管理解决方案中的NuGet程序包(在 Visual Studio 中打开“工具”>“选项”>“NuGet 包管理器”…

vim 插件01:插件管理神器pathogen

1、pathogen简介 Vim 插件 pathogen 是一款历史比较悠久的 Vim 插件管理器。Pathogen 的主要功能是提供一种模块化的方式来管理和加载 Vim 插件。说人话&#xff1a;vim是一款管理各类插件的插卡&#xff0c;使用它会让插件的安装和使用非常方便。 以下是 Pathogen 的主要特点…

高级STM32应用开发:使用HAL库和RTOS

引言 STM32系列微控制器以其高性能、丰富的外设支持和低功耗特性&#xff0c;在工业、汽车及消费电子市场中占有显著地位。 下面我们旨在探讨STM32的高级开发技术&#xff0c;包括硬件抽象层&#xff08;HAL&#xff09;库的使用和实时操作系统&#xff08;RTOS&#xff09;的…

python之excel加工处理小案例一则

一、工具用途 工作中&#xff0c;需要对各类excel进行加工处理&#xff0c;当表和字段比较多时&#xff0c;关联条件又有多个&#xff0c;每次通过execl的vlookup之类的关联公式手工可以解决工作需求&#xff0c;但一般耗时较长&#xff0c;且人工统计匹配也存在出错的情况。 …

Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍 官网地址&#xff1a;Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ kafka 3.6.1版本&#xff0c;作为经典分布式订阅、发布的消息传输中间件&#xff0c;kafka在实时数据处理、消息队列、流处理等领域具有广泛…

利用yakit实现csrf (lucy争夺最帅男银的csrf之旅)

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 csrf原理:【web安全】CSRF漏洞攻击与防御-CSDN博客 文章主要内容提炼 本文主要讲利用yakit实现csrf的过程。 用pikachu靶场和内网环境做案例。 如需漏洞原理请点击上面原理的导航。 &#xff08;因为我觉得yak…

RFID技术引领3C手机镜头模组产线智能化转型

RFID技术引领3C手机镜头模组产线智能化转型 应用背景 随着智能手机市场的快速发展与技术创新&#xff0c;手机镜头模组作为影像功能的核心组件&#xff0c;其生产精度、效率及供应链管理的重要性日益凸显。面对复杂多变的市场需求、严格的品质要求以及激烈的市场竞争&#xf…

01.JAVAEE初阶之计算机如何工作

1.一台机器如何组成 冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备. 针对存储空间 硬盘 > 内存 >> CPU针对数据访问…

NodeJs[黑马笔记简洁版]

是什么 怎么用 模块 模块化标准 CommonJs(标准语法)默认 ECMAscript 内置模块 fs模块 path模块 http模块 自定义模块 第三方包 包概念 npm 包管理器 总结

Vue 使用Canvas画布手写电子版签名 保存 上传服务端

电子版签名效果 定义画布 <canvas width"500"height"250"ref"cn"mousedown"cnMouseDown"mousemove"cnMouseMove"mouseup"cnMouseUp"style"width:500px;height: 250px;background-color:snow;padding: 10p…

Nginx:高性能Web服务器与反向代理的卓越之选

目录 一、Nginx概述 二、Nginx的特点 三、Nginx架构图 四、Nginx优势 五、正向代理与反向代理 正向代理&#xff1a; 反向代理&#xff1a; 一、Nginx概述 Nginx&#xff08;engine x&#xff09;是一个由俄罗斯人Igor Sysoev开发的高性能HTTP和反向代理服务器。其历史背…

MySQL 数据库远程访问问题

在默认的情况下&#xff0c;MySQL 是不能远程访问的&#xff0c;当我们修改了用户名可以接受远程访问后&#xff0c;还是没有办法接受远程访问。 还有一个配置的地方需要验证。 mysqld.cnf 配置文件 mysqld.cnf 配置文件对访问的地址可能会有限制。 配置文件的地址为&#…