基本类型
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 mainimport "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 mainimport "fmt"func main() {var grade string = "B"var marks int = 90switch 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 mainimport "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 mainimport "fmt"func main() {switch {case false:fmt.Println("1、case 条件语句为 false")//fallthroughcase true:fmt.Println("2、case 条件语句为 true")fallthroughcase false:fmt.Println("3、case 条件语句为 false")fallthroughcase true:fmt.Println("4、case 条件语句为 true")//fallthroughcase true:fmt.Println("5、case 条件语句为 false")fallthroughdefault: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 mainimport ("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 mainimport ("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, "爱好者") //8fmt.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])//}//索引到runeindexRune := 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(" 你好,啊 ", " "))
}