<< Go Web 编程>> 一书 第 52 页说到:
Go 语言中 string,slice,map 这三种类型的实现机制类似指针,所以可以直接传递, 而不用取地址后传递指针。
这个说法套在 string 上, 是错误的。
package main import "fmt" func add1(a string) string { a = a + " simida" return a } func main() { x := "I am Jon" fmt.Println("x = ", x) x1 := add1(x) fmt.Println("x + 1 = ", x1) fmt.Println("x = ", x) /*output: x = I am Jon x + 1 = I am Jon simida x = I am Jon */ }
以上例子中 x 的值在调用函数add1()之后无变化.
package main import "fmt" func add1(a *string) string { *a = *a + " simida" return *a } func main() { x := "I am Jon" fmt.Println("x = ", x) x1 := add1(&x) fmt.Println("x + 1 = ", x1) fmt.Println("x = ", x) /*output: x = I am Jon x + 1 = I am Jon simida x = I am Jon simida */ }
采用指针传递, 则调用函数之后x值发生变化.
由此可见, string 类型的实现机制 并非 类似指针.
而 slice 和 map 的实现机制则类似指针, 所以不必取地址传递指针.
package main import "fmt" func add1(a []int) []int { for k, v := range a { a[k] = v + 1 } return a } func main() { x := make([]int, 2, 6) fmt.Println("x = ", x) x1 := add1(x) fmt.Println("x + 1 = ", x1) fmt.Println("x = ", x) /*output: x = [0 0] x + 1 = [1 1] x = [1 1] */ }
package main import "fmt" func add1(a map[string]int) map[string]int { for k, v := range a { a[k] = v + 1 } return a } func main() { x := map[string]int{"a": 0, "b": 0} fmt.Println("x = ", x) x1 := add1(x) fmt.Println("x + 1 = ", x1) fmt.Println("x = ", x) /*output: x = map[a:0 b:0] x + 1 = map[a:1 b:1] x = map[a:1 b:1] */ }
相关推荐
本程序提供了std::string 类型的Format格式化函数,以及两种格式化string字符串的方法,主方法在str.hpp文件中,测试文件在string_format.cpp中,已测试可用
Java String 类型 API 测试代码 1.String和char[]之间的转换 toCharArray(); 2.String和byte[]之间的转换 getBytes() Arrays工具类 : Arrays.toString(names) String类 String replace(char oldChar, ...
在任何编程语言中,字符串都是重中之重。通过使用XMind总结C++ XMind中的字符串,了解并熟练掌握string对象的构造和初始化,插入删除替换,查找和比较,把所有相关的操作整合在一个页面上,提高工作效率
关于string的几个类似CString的函数
java编程中String类型时间转化成Date类型
而对于较为复杂和抽象的类型,包括我们自定义的各种业务类型,这些类型中可能存在多层继承关系,那么这些结构资源中就隐藏着虚函数表、虚指针,对于多层聚合、组合的类型也会存在自定义类型的指针对象,这些资源都...
string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos); 其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子...
主要给大家介绍了关于C/C++中关于std::string的compare陷阱的相关资料,文中先对C/C++中的std::string进行了简单的介绍,通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
理解C# String类型:特殊的引用类型
自己编写的string类,名字叫做MString。并且编写了配套的iterator、const_iterator、reverse_iterator、const_reverse_iterator。完全支持stl的各种算法,包括支持insert_iterator()转换。编写它的目的不是为了使用...
int break_string(std::string instr, std::string subStr, vector<std::string>* subs); //以subStr为标记切割instr为多个单词,存储于subs std::string super_CString::getTimeString(bool fgf);//获得表示当前...
String是Java库中一个预定义的类,在java.lang包中。 String类型 字符串常量:双引号括起来的多个字符组成的序列,每一个字符占2个字节,在内存中共占用2n个字节,n为字符的个数。 例如: " 1234 " , " hello world ...
get string from a fun
js中的string.format函数代码.docx
使用字符指针写的string类,对+ 、 =操作符进行了重载,实现了strcpy,strcmp,strcat等功能。
//获取网络中的所有网络类型 Function NetGetNetList(var List: Tstringlist): Boolean; //获取网络中的工作组 Function NetGetGroupList(var List: TStringList): Boolean; //获取工作组中所有计算机 ...
利用输入字符串流:std::istringstream 代码如下:bool b;std::string s = “true”;std::istringstream(s) >> std::boolalpha >>... 您可能感兴趣的文章:详解C++中String类模拟实现以及深拷贝浅拷贝自己模拟写C++中的St
Strs:array of String):String; //删除Text中的空格 function FmtText(Text:String):String; //格式化浮点数,修正其中的浮点误差 function FmtFloat(Value:Extended;Digits:Integer=4):Double; /...
C++语言string类的实现 完整源代码 pdf
string): string; //小写人民币转换成大写人民币 function IsExistForm(aFormObject: string): Boolean; //查询窗体是否存在 function CalcAmountOfField(aQry: TQuery; aFieldName: string; var oAmountStr: ...