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

基本类型

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(" 你好,啊 ", " "))
}
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值