go语言获取输入 go语言输出hello word

go语言怎么保持控制台最后一行输入而其他区域可以输出?reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
这是读取控制台输入的数据,可以开协程的方式来执行这个代码,协程读取 , 就可以在其他地方使用
Go语言常量和输入输出Go语言常量和C语言差不多
Go语言定义常量const不能少,数据类型可以不写
Go语言定义常量不能用:=
Go语言定义常量没有赋初值,那么值就和上一行的常量的值相等
Go语句中没有明确枚举的固定写法, 但是在企业开发中一般都会常量组的形式来表示枚举
const(
枚举元素 = 值
枚举元素 = 值
)
用法:
const(
num = itoa
num2 = itoa
)
itoa从0开始,遇到一行赋值就+1
例如:
Golang中读取文件最常见的错误使用文件名作为输入
另一个常见错误是将文件名传递给函数 。
假设我们必须实现一个函数来计算文件中的空行数 。最自然的实现是这样的:
filename作为输入给出,所以我们打开它然后我们实现我们的逻辑,对吧?
现在,假设我们希望在此函数之上实现 单元测试 ,以使用普通文件,空文件,具有不同编码类型的文件等进行测试 。很容易变得非常难以管理 。
此外,如果我们想要实现相同的逻辑但是对于HTTP主体,例如,我们将不得不为此创建另一个函数 。
Go有两个很棒的抽象: io.Reader 和 io.Writer。相反,通过一个文件名,我们可以简单地传递一个 io.Reader 作为 抽象 的数据源 。
它是文件吗?一个HTTP正文?字节缓冲区?这并不重要,因为我们仍然会使用相同的 Read 方法 。
在我们的例子中,我们甚至可以缓冲输入以逐行读取它 。所以,我们可以使用 bufio.Reader 它的 ReadLine 方法:
现在 , 打开文件本身的责任委托给 count 客户:
使用第二种实现,无论 实际数据源 如何,都可以调用该函数 。同时,它将 促进 我们的单元测试 , 因为我们可以简单地创建一个 bufio.Reader 来自 string :
翻译自:
golang获取到string和直接赋值strimg不一样1、 string的定义
Golang中的string的定义在reflect包下的value.go中,定义如下:
StringHeader 是字符串的运行时表示,其中包含了两个字段,分别是指向数据数组的指针和数组的长度 。
// StringHeader is the runtime representation of a string.
// It cannot be used safely or portably and its representation may
// change in a later release.
// Moreover, the Data field is not sufficient to guarantee the data
// it references will not be garbage collected, so programs must keep
// a separate, correctly typed pointer to the underlying data.
type StringHeader struct {
Data uintptr
Lenint
}
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
2、string不可变
Golang中的字符串是不可变的 , 不能通过索引下标的方式修改字符串中的数据:
在这里插入图片描述
运行代码,可以看到编译器报错 , string是不可变的
在这里插入图片描述
但是能不能进行一些骚操作来改变元素的值呢?
package main
import (
"fmt"
"reflect"
"unsafe"
)
func main() {
a := "hello,world"
b := a[6:]
bptr := (*reflect.StringHeader) (unsafe.Pointer(b))
fmt.Println(a)
fmt.Println(b)
*(*byte)(unsafe.Pointer(bptr.Data)) = '.'

推荐阅读