From 4bc522d2b98c2317c72c0e18b7d4f0169a77a401 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Sat, 12 Sep 2020 18:36:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E7=AC=94=E8=AE=B0=E5=A4=87?= =?UTF-8?q?=E4=BB=BD=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...量与变量.md => go常量和变量.md} | 11 +++++- src/gtString.go | 34 +++++++++++++++++++ src/learn/hello.go | 16 +++++++-- 3 files changed, 57 insertions(+), 4 deletions(-) rename src/go101/{go常量与变量.md => go常量和变量.md} (78%) create mode 100644 src/gtString.go diff --git a/src/go101/go常量与变量.md b/src/go101/go常量和变量.md similarity index 78% rename from src/go101/go常量与变量.md rename to src/go101/go常量和变量.md index b886165..73a8849 100644 --- a/src/go101/go常量与变量.md +++ b/src/go101/go常量和变量.md @@ -20,4 +20,13 @@ 内的整数 v , 转换结果等同于字符串字面量 "\uFFFD" (亦即 "\xef\xbf\xbd" )。 0xFFFD 是 Unicode标准中的(非法码点的)替换字符值。 (但是请注意,今后的Go版本可能只允许rune或 者byte整数被转换为字符串 ? 。 从Go官方工具链1.15版本开始, go vet 命令会对从非rune和非 - byte整数到字符串的转换做出警告。) \ No newline at end of file + byte整数到字符串的转换做出警告。) + +# 变量 + 包级别的变量在声明的时候依赖关系将影响他们的初始化顺序 + +# 常量表达式 + 当一个运算表达式所涉及的是所有操作都是常量的时候,此表达式称为一个常量表达式 + 一个常量表达式的估值是在编译阶段进行的。一个常量表达式的估值依然是一个常量。 + 如果一个表达式中涉及到的操作数中至少有一个不为常量,则此表达式称为非常量表达式 + diff --git a/src/gtString.go b/src/gtString.go new file mode 100644 index 0000000..6983690 --- /dev/null +++ b/src/gtString.go @@ -0,0 +1,34 @@ +package goUtils + +import ( + "reflect" + "unsafe" +) + +// string与[]byte的转换 +// Golang中,string从设计上是不可变(immutable)的。因此,string和[]byte的类型转换,都是产生一份新的副本。 +// +// func Example() { +// s := "Hello,world" +// b := []byte(s) +// } +// 如果确定转换的string/[]byte不会被修改,可以进行直接的转换,这样不会生成原有变量的副本。新的变量共享底层的数据指针。 + +func StrToBytes(s string) []byte { + stringHeader := (*reflect.StringHeader)(unsafe.Pointer(&s)) + bh := reflect.SliceHeader{ + Data: stringHeader.Data, + Len: stringHeader.Len, + Cap: stringHeader.Len, + } + return *(*[]byte)(unsafe.Pointer(&bh)) +} + +func BytesToStr(b []byte) string { + sliceHeader + sh := reflect.StringHeader{ + Data: sliceHeader.Data, + Len: sliceHeader.Len, + } + return *(*string)(unsafe.Pointer(&sh)) +} diff --git a/src/learn/hello.go b/src/learn/hello.go index 16e9af0..ecca142 100644 --- a/src/learn/hello.go +++ b/src/learn/hello.go @@ -1,7 +1,17 @@ -package learn +package main -import "fmt" +import ( + "fmt" +) + +const ( + HELLO1 = "123" + HELLO2 = HELLO1 + HELLO4 = HELLO3 + HELLO3 = "456" +) func main() { - fmt.Println("hello world!") + fmt.Println("hello world!", HELLO3, HELLO2) + fmt.Println("IMY********", aa, -5/2) }