读取一行字符串。
func main() {
reader := bufio.NewReader(os.Stdin)
line, _ := reader.ReadString('\n')
l := len(line)
fmt.Println(l)
fmt.Println("回车", line[l-2])
fmt.Println("换行", line[l-1])
}
ReadString
会不断读取,直到遇到第一个分隔符,这时ReadString
把已读取的数据和分隔符以字符串的方式进行返回。
值得注意的是,当分隔符为\n
(换行)时,ReadString
会多读取一个\r
(回车)。
读取一行字节数组。
func main() {
reader := bufio.NewReader(os.Stdin)
line, _ := reader.ReadBytes('\n')
l := len(line)
fmt.Println(l)
fmt.Println("回车", line[l-2])
fmt.Println("换行", line[l-1])
}
读取一行字符串。
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
data := scanner.Text()
fmt.Println(len(data))
fmt.Println(data)
}
读取一行字节数组。
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
data := scanner.Bytes()
fmt.Println(len(data))
fmt.Println(data)
}
相较于Reader
,Scanner
并不会把多余的回车符和换行符读取到。
不断地读取,直到读完所有的输入。
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
package main
import "fmt"
func main() {
str := "hello world"
fmt.Printf("%T\n", str[0])
}
数据类型为uint8
,也就是byte
。
func main() {
str := "hello world"
for i, c := range str {
fmt.Printf("%T\n", c)
if i == 0 {
break
}
}
}
数据类型为int32
,也就是rune
。
func main() {
str := "hello world"
data := []byte(str)
fmt.Println(data)
str = string(data)
fmt.Println(str)
str = string(data[:5])
fmt.Println(str)
}
func main() {
str := "hello world"
data1 := []byte(str)
fmt.Printf("%T\n", data1[len(data1)-1])
data2 := []rune(str)
fmt.Printf("%T\n", data2[len(data2)-1])
}
byte
本质上是uint8
,而rune
本质上是int32
,当字符串中有中文时,rune
会完整地保留中文。
func main() {
var f = 5.5
fmt.Println(int(f))
}
由浮点型到整型,会保留浮点数的整数部分。
func main() {
var buf bytes.Buffer
buf.WriteString("hello")
buf.WriteByte(' ')
buf.WriteString("world")
str := buf.String()
fmt.Println(str)
}
func main() {
str := "hello world"
data := []byte(str)
fmt.Println(data[0:1])
}
输出的结果只有一个字符,说明截取的区间是半闭半开的。
func main() {
str := "100"
num, _ := strconv.Atoi(str)
fmt.Println(num)
str = strconv.Itoa(num)
fmt.Println(str)
}
func main() {
str := "hello world"
arr :=strings.Split(str, " ")
fmt.Println(arr[1])
}
func main() {
m := make(map[int]int)
m[0] = 1
if _, ok := m[1]; !ok {
fmt.Println("hello world")
}
}
package main
import "fmt"
func main() {
var arr1 []int
fmt.Println(arr1)
arr2 := make([]int, 5)
fmt.Println(arr2)
}
从打印结果可以看出,在第二个切片中,已经完成了对元素的初始化。
func main() {
arr := []int{4,5,6,1,2,3,0}
sort.Ints(arr)
fmt.Println(arr)
strArr := []string{"hello", "world", "a", "b", "c"}
sort.Strings(strArr)
fmt.Println(strArr)
}
func main() {
arr := []int{4,5,6,1,2,3,0}
sort.Sort(sort.Reverse(sort.IntSlice(arr)))
fmt.Println(arr)
strArr := []string{"hello", "world", "a", "b", "c"}
sort.Sort(sort.Reverse(sort.StringSlice(strArr)))
fmt.Println(strArr)
}